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