•02.06.01 Einführung in die Informatik für Schülerinnen SS 2001 Margarita Esponda [email protected] Warum Java? • Geschichte der Programmiersprachen • Entstehung von Objektorientierten Programmiersprachen • Geschichte von Java • Vorteile und Nachteile gegenüber anderen Programmiersprachen •1 •02.06.01 Geschichte der Programmiersprachen 1941 Z3 Konrad Zuse .. .. .. .. .. . . . . . . . . . . Programm Geschichte der Programmiersprachen Steinzeit 1943 ENIAC eigentlich kein Programm 1945 John von Neumann „stored programs“ •2 •02.06.01 Rechner erkennen und bearbeiten nur Instruktionen in Maschinensprache 01001010111000001110101001101010 00010101011100000111010100110101 01001010111000001110101001101010 00010101011100000111010100110101 01101010111011111110101001101010 01010101011100000111010100110101 0000110101011100000111010101........ Erste Programmiersprachen Maschinensprachen Adresse im Speicher 187A: 01 00 75 17 80 3E 0D 187B: 01 10 B9 FF FF 8B D1 187C: 01 20 42 33 C9 B8 D1 187D: 01 30 5B FF BE E7 04 187E: 01 40 01 BF 01 00 CD 18 . . . . . . . . . . . . . . . . . . . . . 1101 . . . . . . . . . . . . usw. •3 •02.06.01 Assembler-Programmiersprachen 000 0100010 0100111 0100100 001 0100100 0101000 0101001 000 0100010 0101001 0101001 001 0100100 0101000 0101001 010 0101001 0101000 1111110 01 . . . . . . . . . . . . . . . . . . . . . add A, B, C sub C, D, E add A, E, E sub C, D, E cmp E, D, end add C, D, E . . . . . . usw. Assembler-Programm Beispiel LABEL: LOAD LOAD ADD STORE JUMP #1 A #2 B #1 #2 #3 C LABEL #3 2 5 Register 2 5 7 7 •4 •02.06.01 Probleme • Die Programmierung ist maschinenbezogen • Sie verlangt genaue Kenntnisse über die Hardware • schwer lesbar • fehleranfällig • sehr teuer! Hochprogrammiersprachen FORTRAN FORTRAN 1954 John Backus IBM COBOL 1959 Department of Defense ALGOL 1958 Europa LISP 1958 John McCarty MIT „Formula Translator“ COBOL „Common Business Oriented Language“ ALGOL „ Algorithmic Language“ LISP „List Processing“ •5 •02.06.01 Hochprogrammiersprachen C = A + B*C LOAD LOAD MULT LOAD ADD STORE #1 #2 #1 #4 #3 #1 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 C B #2 A #4 C #3 #1 Vorteile problembezogener weniger hardwareabhängig kompakter lesbarer portabler bleibende Probleme Betriebsysteme + Compiler Software viel teurer als Hardware Maschinesprache Fehler •6 •02.06.01 Schichtenarchitektur Hochprogrammiersprachen Anwendungsprogramme Texteditoren Übersetzer für verschiedene Sprachen Betriebsystem Assembler Hardware Programmiertechniken Neue Sprachen Strukturiertes Programmieren Basic 1964 Unterprogramme LOGO 1967 Pascal 1970 Programmbibliotheken C Ada Modularisierung 1979 Modula 2 1978 C++ PEARL 1980 PEARL „Process and Experiment Automation Real-Time Language •7 •02.06.01 „Spaghetti code“ 100 110 120 150 160 200 210 300 310 400 410 450 460 470 500 510 520 GOTO 500 PRINT I ; GOTO 400 PRINT I * 12 ; GOTO 450 PRINT „ = „ ; GOTO 150 PRINT „ 12 „ ; GOTO 200 PRINT „ * „ ; GOTO 300 I=I+1 IF I > 12 THEN STOP GOTO 110 PRINT "Result" I=1 GOTO 110 Result 1 * 12 = 12 2 * 12 = 24 3 * 12 = 36 ... Aus „Object-Oriented Programming in Java“ Mitchell Waite and Robert Lafore UNIX + C 1969 UNIX + C AT&T's Bell Labs UC Berkeley, verbesserte UNIX K. Thompson, D. Ritchie Free!! nur der Kernel in Assembler programmiert modulares Betriebsystem der Rest in C-Sprache nur ein C-Compiler ist nötig Hardware ist ständig billiger geworden mit UNIX entstehen viele neue Hardwarefirmen Beginn der Minicomputer-Welt viele Rechner aber nur im C programmierbar •8 •02.06.01 C Assemblersprachen C-Sprache Hochprogrammiersprachen 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, "!e k;dc \ i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);} mistery.c „The International Obfuscated C Code Contest“ •9 •02.06.01 Die Welt der Programmiersprachen teilte sich Was? Wie? Deklarative Sprachen Imperative Sprachen OOP Prolog 1970 FP 1978 Parlog 1983 Miranda 1985 Haskell 1990 Objekt Orientierte Programmiersprachen Simula 67 1962-1967 Smalltalk Early 70s Xerox PARC Eiffel 1985 OO-Pascal, Modula 3, Oberon C++ Java Early 80s Bell Laboratories 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 •10 •02.06.01 deklarativ vs. imperativ - Sprachen basieren auf einem mathematischen Formalismus. - Sprachen sind von der dahinterstehenden Hardware geprägt. - Wissen über ein Problem rein deklarativ darstellbar - Befehlssequenz ( Zustände ) - Intelligentes System, das Fragen an das Programm beantworten kann. - Zeitlicher Ablauf im Programm sichtbar. kompakter robuster einfacher 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 •11 •02.06.01 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. •12 •02.06.01 C Smalltalk C++ Oberon Stammbaum Syntax Semantik JAVA 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 •13 •02.06.01 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 Rechner interpretierbarer Formalismus mit eindeutig definierter Syntax 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 •14 •02.06.01 Algorithmen Definition von Algorithmus 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“ Introduction to Algorithms. T. Cormen Algorithmus-Eigenschaften • Die Beschreibung ist finit endlicher Länge • Algorithmen sind determiniert bei gleichen Eingabewerten gleiches Ergebnis. • Algorithmen terminieren i.d.R sie enden nach endlich vielen Schritten Es gibt Programme die nicht terminieren! •15 •02.06.01 OO-Programm Die OOP betrachtet eine Programmausführung als ein System kooperierender Objekte O1 O3 O2 OOP: Das Grundmodell • Objekte haben einen lokalen Zustand • Objekte empfangen und bearbeiten Nachrichten Ein 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. •16 •02.06.01 Konzepte objektorientierter Programmierung • • • • • • Objekte Klassen Nachrichten Vererbung Kapselung Polymorphismus Objekt Zustand: - Eigenschaft 1 - Eigenschaft 2 . . . . Verhalten: - Methode 1 - Methode 2 - Methode 3 . . . . Buch Zustand: - Titel - Autor - Verlag . . . . . Verhalten: - getAutor( ) - getInhaltVerzeichnis ( ) - suche ( Schlüsselwort ) . . . •17 •02.06.01 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 Klasse Rechteck Rechteck_A x=0 y=0 höhe = 10 breite = 10 Diagonale Rechteck_B Umfang x y höhe Rechteck x=0 y=0 höhe = 10 Fläche breite Rechteck breite = 10 usw. Rechteck_C x = 33 y = 45 höhe = 15 breite = 15 •18 •02.06.01 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. B.doSomething( args ); A B Attri..1 Attri..3 ....... Attri..1 Attri..3 ....... C.doThis( args ); Attri..1 Attri..3 ....... C statisch! Klassen Klassen definieren neue Objekttypen und sind “Schablonen” zum Erzeugen von Speicherobjekten. Objekte dynamisch! 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. Nachrichten rechteck1.equal(rechteck2) Empfänger Nachricht Argumente •19 •02.06.01 Java-Anwendung Rechteck.java class Rechteck { // Feldvariablen Kreis.java class Geometrie { class Kreis { // Konstruktoren .... // Konstruktoren // Methoden .... // Feldvariablen // Feldvariablen .... .... Geometrie .java .... .... // Konstruktoren .... // Methoden .... .... // Methoden .... .... .... } } . . ( . . . . ) {. .} . . .. . 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 main einer Klasse. •20 •02.06.01 Beispiel /* Ein einfaches aber vollständiges Java-Programm */ public class MyFirstProgram { public static void main(String[] args) { System.out.println( "Es läuft !"); } } // end of class MyFirstProgram 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-Format zu erzeugen */ •21 •02.06.01 Java ist plattformunabhängig MyProgram.java Java Source javac Java-Compiler MyProgram.class Bytecode Interpreter Interpreter Interpreter java MyProgram MyProgram MyProgram Java • Java-Anwendungen Selbständige Programme, die auf der lokalen Festplatte gespeichert werden und wie ein herkömmliches Programm installiert und gestartet werden können. • Java Applets Kleine Programmstücke, die nicht selbständig ausgeführt werden können. Applets können nur von Web-Browsern oder Appletviewern ausgeführt werden. • Java-Servlets 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. •22 •02.06.01 Java-Applets in HTML-Seiten 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 <html> <head> <title>applettest</title> </head> <body> <applet code=LaufText.class width=120 height=60> </applet> </body> </html> JDK ( Java Development Kit ) javac Java-Compiler java Java-Interpreter AppletViewer Für „Applets“ javadoc Dokumentationsgenerator Texteditor - UltraEdit - JBuilder 3.0 - IBM VisualAge für Java •23 •02.06.01 Übersetzen/Ausführen Übersetzen: Ausführen: javac MyFirstProgram.java java MyFirstProgram •24