24
•02.06.01 •1 Margarita Esponda [email protected] SS 2001 Einführung in die Informatik für Schülerinnen Warum Java? Geschichte der Programmiersprachen Entstehung von Objektorientierten Programmiersprachen Geschichte von Java Vorteile und Nachteile gegenüber anderen Programmiersprachen

Warum Java? - Fachbereich Mathematik und Informatik · PEARL „Process and Experiment Automation Real-Time Language LOGO 1967 C++ ... Inzwischen hatte sich herausgestellt, dass der

  • Upload
    vubao

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

•02.06.01

•1

Margarita [email protected]

SS 2001

Einführung in die Informatik für Schülerinnen

Warum Java?

• Geschichte der Programmiersprachen

• Entstehung von Objektorientierten Programmiersprachen

• Geschichte von Java

• Vorteile und Nachteile gegenüber anderen Programmiersprachen

•02.06.01

•2

Geschichte der Programmiersprachen1941 Z3 Konrad Zuse

.. . .

.. . .

.. . .

.. . .

.. . .

Programm

Geschichte der Programmiersprachen

Steinzeit

1945 John von Neumann

eigentlich kein Programm1943 ENIAC

„stored programs“

•02.06.01

•3

Rechner erkennen und bearbeiten nur Instruktionen in

Maschinensprache

0100101011100000111010100110101000010101011100000111010100110101 0100101011100000111010100110101000010101011100000111010100110101 01101010111011111110101001101010010101010111000001110101001101010000110101011100000111010101........

Erste Programmiersprachen Maschinensprachen

187A: 01 00 75 17 80 3E 0D187B: 01 10 B9 FF FF 8B D1187C: 01 20 42 33 C9 B8 D1187D: 01 30 5B FF BE E7 04187E: 01 40 01 BF 01 00 CD18 . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . usw.

1101

Adresse im Speicher

•02.06.01

•4

Assembler-Programmiersprachen

add A, B, Csub C, D, Eadd A, E, Esub C, D, Ecmp E, D, endadd C, D, E. . . . . . usw.

000 0100010 0100111 0100100 001 0100100 0101000 0101001000 0100010 0101001 0101001001 0100100 0101000 0101001010 0101001 0101000 111111001 . . . . . . . . . . . . . . . . . . . . .

Assembler-Programm

LABEL: LOAD #1 ALOAD #2 BADD #1 #2 #3STORE #3 CJUMP LABEL

Beispiel

2

2

5

577

Register

•02.06.01

•5

Probleme

• Die Programmierung ist maschinenbezogen

• Sie verlangt genaue Kenntnisse über die Hardware

• schwer lesbar

• fehleranfällig

• sehr teuer!

Hochprogrammiersprachen

FORTRAN 1954 John Backus IBM

COBOL 1959 Department of Defense

ALGOL 1958 Europa

LISP 1958 John McCarty MIT

FORTRAN „Formula Translator“

COBOL „Common Business Oriented Language“

ALGOL „ Algorithmic Language“

LISP „List Processing“

•02.06.01

•6

Hochprogrammiersprachen

C = A + B*C

LOAD #1 CLOAD #2 BMULT #1 #2 #3LOAD #4 AADD #3 #4 #1STORE #1 C

Vorteile

bleibende Probleme

Maschinesprache

problembezogenerweniger hardwareabhängigkompakterlesbarer

Betriebsysteme + Compiler

Software viel teurer als Hardware

Fehler

FORTRAN

C EINLESEN DER DATEN READ (5,*,END=92) N,M WRITE (6,*) 'MATRIXORDNUNG ', N WRITE (6,*) '(HALBE) BANDBREITE ', M IF (N.GT.NMAX) GOTO 91 IF (M.GT.MMAX) GOTO 91

Übersetzer

portabler

•02.06.01

•7

Schichtenarchitektur

Hardware

TexteditorenÜbersetzer für verschiedene SprachenBetriebsystem

Anwendungsprogramme

Assembler

Hochprogrammiersprachen

Programmiertechniken

Strukturiertes Programmieren

Modularisierung

Unterprogramme

Programmbibliotheken

Basic

Pascal

Modula 2

Neue Sprachen

Ada 1979

1964

1970

PEARL 1980

1978

C

PEARL „Process and Experiment Automation Real-Time Language

LOGO 1967

C++

•02.06.01

•8

„Spaghetti code“100 GOTO 500110 PRINT I ;120 GOTO 400150 PRINT I * 12 ;160 GOTO 450200 PRINT „ = „ ;210 GOTO 150300 PRINT „ 12 „ ;310 GOTO 200400 PRINT „ * „ ;410 GOTO 300450 I = I + 1460 IF I > 12 THEN STOP470 GOTO 110500 PRINT "Result"510 I = 1520 GOTO 110

Aus „Object-Oriented Programming in Java“Mitchell Waite and Robert Lafore

Result

* 12 = 12

2 * 12 = 24

1

3 * 12 = 36

...

UNIX + C

UNIX + C AT&T's Bell Labs

UC Berkeley, verbesserte UNIX

modulares Betriebsystem

nur der Kernel in Assembler programmiert

der Rest in C-Sprache

Hardware ist ständig billiger geworden

mit UNIX entstehen viele neue Hardwarefirmen

viele Rechner aber nur im C programmierbar

nur ein C-Compiler ist nötig

Beginn der Minicomputer-Welt

K. Thompson, D. Ritchie

Free!!

1969

•02.06.01

•9

C

Assemblersprachen

Hochprogrammiersprachen

C-Sprache

C kann eine schreckliche Programmiersprache sein#include <stdio.h>

main(t,_,a)char *a;{return!0<t?t<3? main(-79,-13,a+main(-87,1-_,main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a)&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72? main(_,t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\l]!/n{n#'; r{# w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/"):t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}

mistery.c „The International Obfuscated C Code Contest“

•02.06.01

•10

Die Welt der Programmiersprachen teilte sich

Deklarative Sprachen Imperative Sprachen

Miranda

Prolog

Haskell

OOP

Smalltalk

Eiffel

Simula 67

C++

OO-Pascal, Modula 3, Oberon

ObjektOrientierteProgrammiersprachen

Parlog

Was? Wie?

Java

1985

Early 70s Xerox PARC

1962-1967

1970

FP

1985

1978

Early 80s Bell Laboratories

1983

1990

1995

Deklarative Programmiersprachen

Mutter( luise, maria ).Mutter( anne, maria ).Mutter( maria, andrea ).

Vater( luise, peter ).Vater( maria, joachim ).

Oma( X, Y ) :- Mutter( Z, Y ), Muter( X, Z ).Oma( X, Y ) :- Mutter( Z, Y ), Vater( X, Z ).

Geschwister( X, Y ) :- Mutter( X, Z ), Mutter( Y, Z ).Geschwister( X, Y ) :- Vater( X, Z ), Vater( Y, Z ).

? Oma( anne, andrea ).

Programm in Prolog

•02.06.01

•11

deklarativ vs. imperativ- Sprachen basieren auf

einem mathematischen Formalismus.

- Wissen über ein Problem rein deklarativ darstellbar

- Intelligentes System, das Fragen an das Programm beantworten kann.

- Sprachen sind von der da-hinterstehenden Hardware geprägt.

- Befehlssequenz ( Zustände )

- Zeitlicher Ablauf im Programm sichtbar.

kompakterrobustereinfacher

effizienter

Objektorientiertes Programmieren

• Simulationsprobleme– in der Welt läuft alles parallel

• Wiederverwendbarkeit von Software– saubere Modularisierung der Software

– mit klaren Schnittstellen

• Graphische Benutzeroberflächen- nicht sequentielle, interaktive Steuerung

von Anwendungsprogrammen.

• Programmierung verteilte Anwendungen- Parallelität und Kommunikation auf natürlicher Weise

•02.06.01

•12

Objektorientiertes Programmieren

• Vorgänge der realen Welt- inhärent paralleles Ausführungsmodell

• Trennung von Auftragserteilung und Auftragsdurchführung- klar definierten Schnittstellen

• Klassifikation und Vererbung- Anpassbarkeit, Klassifikation und Spezialisierung von

Programmteilen

Java• 1991 Patrick Naughton und James Gosling entwickelten die

Programmierumgebung Oak bei Sun Microsystems,um Anwendungen für elektronische Geräte und das interaktive

Fernsehen leicht zu programmieren.

• 1995 wurde der erste www-Browser (HotJava) vorgestellt und Oak wird in Java umbenannt.Inzwischen hatte sich herausgestellt, dass der Name Oak bereits

für eine andere Programmiersprache vergeben war.

• 1996 veröffentlichte Sun die erste offizielle Entwicklungsumgebung für Java.

kostenlos über die Adresse http://java.sun.com

• Beispielloser Erfolg: Noch nie hat eine neue Programmiersprache in so kurzer Zeit so starke Verbreitung gefunden.

•02.06.01

•13

Stammbaum

C++

JAVA

Smalltalk

Oberon

C

SyntaxSemantik

Java-Eigenschaften

• portabel - Basisdatentypen maschinenunabhängig- Pseudocode (einfache JVM)

• objektorientiert - umfangreiche Bibliotheken ohne Aufwand verwendbar.

• verteilt • Thread-unterstützend Nebenläufige Prozesse

• robust - Strenge Typ- und Ausnahmebehandlung- keine Zeiger ( Pointer )

- keine GOTOs

•02.06.01

•14

Java-Eigenschaften?

• einfach einfacher als C++

• sicher Das Thema Sicherheit wird nie ganz abgeschlossen sein

• leistungsstark interpretierte Bearbeitung ist langsamer als Programme in Maschinencode eines speziellen Rechners

Programme

• Eine Programmiersprache ist ein durch einen Rechnerinterpretierbarer Formalismus mit eindeutig definierterSyntax und Semantik.

• Ein Programm ist die Formulierung eines Algorithmus in einer konkreten Programmiersprache.

• „An OO-Program is a system of cooperating objects“

M.Waite and R.Lafore

•02.06.01

•15

Algorithmen

Ein Algorithmus ist eine präzise, endliche Verarbeitungsvorschrift zur Lösung eines Problems.

„an Algorithm is a well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output. An algorithm is thus a sequence of computational steps that transform the input into the output“

Definition von Algorithmus

Introduction to Algorithms. T. Cormen

Algorithmus-Eigenschaften

• Algorithmen terminieren i.d.R sie enden nach endlich vielenSchritten

Es gibt Programme die nicht terminieren!

• Die Beschreibung ist finit endlicher Länge

• Algorithmen sind determiniert bei gleichen Eingabewerten

gleiches Ergebnis.

•02.06.01

•16

Die OOP betrachtet eine Programmausführung als ein System kooperierender Objekte

O3

O1

O2

OO-Programm

• Objekte haben einen lokalen Zustand

• Objekte empfangen und bearbeiten NachrichtenEin Objekt kann

– seinen Zustand ändern,– Nachrichten an andere Objekte verschicken,– neue Objekte erzeugen oder existierende Objekte löschen.

• Objekte sind grundsätzlich selbständige Ausführungseinheiten, die unabhängig voneinander und parallel arbeiten können.

OOP: Das Grundmodell

•02.06.01

•17

Konzepte objektorientierter Programmierung

• Objekte• Klassen• Nachrichten• Vererbung• Kapselung• Polymorphismus

Objekt

Zustand:- Eigenschaft 1- Eigenschaft 2. . . .

Verhalten:- Methode 1- Methode 2- Methode 3. . . .

Zustand:- Titel- Autor- Verlag. . . . .

Verhalten:- getAutor( )- getInhaltVerzeichnis ( )- suche ( Schlüsselwort ). . .

Buch

•02.06.01

•18

Klasse

Was ist eine Klasse ? Eine Klasse ist ein Bauplan, um Objekte einer bestimmten Art oder Sorte zu erzeugen.

Ohne Klassen gibt es keine Objekte!

Klasse

Fläche

Umfang

Diagonale

Rechteck

Rechteckxyhöhe

breite

Rechteck_A

x = 0y = 0höhe = 10

breite = 10

Rechteck_B

x = 0y = 0höhe = 10

breite = 10

Rechteck_C

x = 33y = 45höhe = 15

breite = 15

usw.

Klasse Rechteck

•02.06.01

•19

Nachrichten• Objekte interagieren, indem sie Nachrichten austauschen.

• Wenn Objekt A möchte, dass Objekt B eine Methode ausführt, dann sendet A eine Nachricht (Message) an B.

Attri..1Attri..3.......

Attri..1Attri..3.......

Attri..1Attri..3.......

C.doThis( args );

B.doSomething( args );

C

BA

Nachrichten

Eine Objekt ist: • die Instanziierung einer Klasse,• eine Einheit von Daten und Methoden, die auf diesen Daten

operieren. • Jedes Objekt „weiß“, zu welcher Klasse es gehört.

rechteck1.equal(rechteck2)

Objekte

KlassenKlassen definieren neue Objekttypen und sind “Schablonen” zum Erzeugen von Speicherobjekten.

statisch!

dynamisch!

Empfänger Nachricht Argumente

•02.06.01

•20

class Rechteck {// Feldvariablen

. . . .// Konstruktoren

. . . .// Methoden

. . . .

. . . .}

Rechteck.java

class Kreis {// Feldvariablen

. . . .// Konstruktoren

. . . .// Methoden

. . . .

. . . .}

Kreis.javaclass Geometrie {// Feldvariablen

. . . .// Konstruktoren

. . . .// Methoden

. . . .

. . . .

. . . .

}

Geometrie.java

Java-Anwendung

. . . main ( . . . . ) {. .} start

Java-Programme• Java-Programme bestehen aus einer oder mehreren Klassen

• Eine Klasse ist in der Regel in einer eigenen, gleichnamigen Datei mit der Endung .java definiert, z. B.

MyFirstProgram.java

• Die Programmausführung beginnt mit der Methode maineiner Klasse.

•02.06.01

•21

Beispiel

public class MyFirstProgram {

}

/* Ein einfaches aber vollständiges Java-Programm */

// end of class MyFirstProgram

System.out.println( "Es läuft !");public static void main(String[] args) {

}

Kommentare in Java

// von hier aus bis Ende der Zeile wird dieser Text ignoriert

/* alle diese Zeilen hier werden von

dem javac völlig ignoriert ........

*/

/** dieser Text wird von dem javadoc-Programm verwendet

um automatische Dokumentation in html-Formatzu erzeugen

*/

•02.06.01

•22

Java ist plattformunabhängig

Interpreter Interpreter Interpreter

Bytecode

Java-Compiler

Java SourceMyProgram.java

javac

MyProgram.class

java

MyProgramMyProgram

MyProgram

Java• Java-Anwendungen

• Java Applets

• Java-Servlets

Selbständige Programme, die auf der lokalen Festplatte gespeichert werden und wie ein herkömmliches Programm installiert und gestartet werden können.

Kleine Programmstücke, die nicht selbständig ausgeführt werden können. Applets können nur von Web-Browsern oder Appletviewern ausgeführt werden.

Das serverseitige Pendant zu Java-Applets. Dies sind Programme, die auf einem Server (im Hintergrund) laufen und in der Lage sind HTML-Seiten zu generieren.

•02.06.01

•23

Java-Applets in HTML-Seiten

<html>

<head> <title>applettest</title> </head>

<body>

<applet code=LaufText.class width=120 height=60> </applet>

</body>

</html>

Der Java-Quellcode des Applets:

LaufText.java

Zum Übersetzen ruft man dann `javac LaufText.java' auf, was im gleichen Verzeichnis eine Datei `LaufText.class' erzeugt

JDK ( Java Development Kit )

javac

java

AppletViewer

javadoc

Java-Compiler

Java-Interpreter

Für „Applets“

Dokumentationsgenerator

Texteditor - UltraEdit- JBuilder 3.0- IBM VisualAge für Java

•02.06.01

•24

Übersetzen/Ausführen

Übersetzen: javac MyFirstProgram.javaAusführen: java MyFirstProgram