Warum Java?

Werbung
•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
Herunterladen