Kapitel 5.1-5.3

Werbung
Überblick
5 Java
5.1 Interpretation und Übersetzung von Programmen
5.2 Java als objekt-orientierte Programmiersprache
5.3 Ein erstes Java-Beispiel
5.4 Java Syntaxkonstrukte
5.5 Elementare Java-Klassen
5.6 Vererbung
5.7 Interfaces
5.8 Programmierkonventionen und Dokumentation
© Klaus Hinrichs
Informatik I – Java
5-1
Java ist …
• Insel Indonesiens
(126 650 km2 , 65 Mill. Einw.)
• amerikanischer Slang für Kaffee
(" Betriebsstoff der Java-Programmierer")
• Software-Technologie für objektorientierte Programmierung und
verteilte Anwendungen
© Klaus Hinrichs
Informatik I – Java
5-2
5.1 Interpretation und Übersetzung von Programmen
• Interpreter:
Ein Interpreter ist ein Programm, das Programme einer
Programmiersprache A direkt ausführt.
• Arbeitsweise:
– Schrittweise syntaktische Analyse der Anweisungen des
Quellprogramms
– Ermittlung der Parameter und Aufruf einer internen Funktion zur
Ausführung einer Anweisung
• Interpretierte Sprachen:
APL, BASIC, LISP, PROLOG, POSTSCRIPT
© Klaus Hinrichs
Informatik I – Java
5-3
Interpretation und Übersetzung von Programmen
• Compiler:
Ein Übersetzer (Compiler) ist ein Programm, das Programme aus einer
Programmiersprache A in eine Programmiersprache B übersetzt.
• Eine Übersetzung ist somit die folgende Abbildung:
Quellsprache A ! Zielsprache B
Somit wird jedem Quellprogramm genau ein Zielprogramm zugeordnet.
• Wichtig:
Quell- und Zielprogramm müssen gleiche Bedeutung haben semantische Korrektheit!
• Ziel:
Zielprogramm soll möglichst schnell ausführbar sein bei geringem
Speicherplatzbedarf ! Effizienz!
© Klaus Hinrichs
Informatik I – Java
5-4
5.2 Java als objekt-orientierte Programmiersprache …
Java, OOP und das Internet
• Java ist mehr als eine Programmiersprache!
Java als Softwaretechnologie umfaßt:
– objektorientierte Programmierung
– leistungsfähige Klassenbibliothek
(Application Programming Interface API)
– "Internet-Fähigkeiten"
– Module und Schnittstellen für die schnelle Entwicklung verteilter
Anwendungen
• Entwicklung und Vertrieb durch Sun Microsystems: Java Development
Kit (JDK)/ Software Development Kit (SDK) frei verfügbar
© Klaus Hinrichs
Informatik I – Java
5-5
… Java als objekt-orientierte Programmiersprache
• Java nutzt das Internet als Infrastrukturbasis
• Java Programme (Java-Byte-Code) sind plattformunabhängig
• Applets: in WWW-Seiten eingebundene, über das Internet verteilbare
und in jedem Java-fähigen Browser ausführbare Java-Programme
• Applikationen: eigenständig ausführbare Java-Progamme, z. B.
HotJava-Browser
© Klaus Hinrichs
Informatik I – Java
5-6
Geschichte
1991
Erstes Projekt bei Sun (James Gosling)
Ziele:
Entwicklung einer einfachen Programmiersprache für
Unterhaltungselektronik / Haushaltsgeräte
klein, einfach portierbar, …
1993
World Wide Web auf dem Internet
architekturneutrale Sprache wie Java ideal für Internet
1995
Sun kündigt Java auf der SunWorld ´95 an
Netscape 2.0 wird "Java-fähig"
jetzt
Java boomt!
© Klaus Hinrichs
Informatik I – Java
5-7
Java als Programmiersprache …
Java: A simple, object-oriented, distributed, interpreted, robust, secure,
architecture neutral, portable, high-performance, multithreaded and
dynamic language.
aus: The Java Language: A White Paper
• vollständig objektorientiert
– ohne prozedurale Altlasten
• unkompliziert - einfach und leicht erlernbar
– Beschränkung auf das Notwendige (keine Zeiger, keine HeaderDateien, keine Mehrfachvererbung, keine Unions wie in C, C++)
– Verzicht auf Trickkisten
– Syntax ähnlich zu C, C++
© Klaus Hinrichs
Informatik I – Java
5-8
… Java als Programmiersprache …
• plattformunabhängig (architekturneutral)
– übersetzte Java-Programme (Java-Byte-Code) sind auf jeder Javafähigen Rechner-plattform ausführbar (virtuelle Maschine)
– definierte Wertebereiche für Zahlen
• sicher
– keine direkten Speicherzugriffe mit Zeigerarithmetik
– strenge Typüberprüfung
– keine Programmierung mit Sprachverletzung
© Klaus Hinrichs
Informatik I – Java
5-9
… Java als Programmiersprache
• robust
– keine Rechnerabstürze durch Programmierfehler
– Überprüfung der Speicherzugriffe
– Ausnahmeroutinen (exceptions) zur Fehlerbehandlung
• multithreaded
– parallele Ausführung von Programmteilen (Threads)
– Java ist schnell (sagt Sun), doch langsamer als
vergleichbare C-Programme
(Java-Compiler sorgen für schnellere Java-Programme)
• Internet-fähig
– Java-Applets sind über das Netz verteilbar und auf lokalen
Rechnern ausführbar
– Klassen für TCP/ IP-Kommunikation, HTTP-/ FTP-Anwendungen,
…
© Klaus Hinrichs
Informatik I – Java
5-10
Übersetzung von Java Programmen
• Aus Java-Programmtext erzeugt der Java-Compiler eine JavaBytecode-Datei
• Auf dem Zielrechner interpretiert die Java Virtual Machine JVM
diesen Bytecode und führt das Programm aus
– Geschwindigkeitsprobleme
© Klaus Hinrichs
Informatik I – Java
5-11
Ausführung von Java Programmen
Compilierte Java Programme (d. h. Bytecode) laufen auf jeder
JVM-fähigen Plattform
© Klaus Hinrichs
Informatik I – Java
5-12
Bytecode / Class-Files
• Java wird vom Java Compiler in eine fest definierte Zielsprache
übersetzt.
• Die Zielsprache ist der Bytecode
– maschinenähnlich, hat z. B. Register
– kann einfach interpretiert bzw. in Maschinencode anderer
Plattformen übersetzt werden
• Jede Java-Klasse wird separat übersetzt und
– in separater Datei, dem Class-File gespeichert.
– Das Format der Dateien wird Bytecode genannt.
– Auch andere Sprachen lassen sich nach Bytecode übersetzen.
© Klaus Hinrichs
Informatik I – Java
5-13
JDK / JRE
• Java Development Kit (JDK) / Software Development Kit (SDK)
– Kostenlose Software-Entwicklungsumgebung der Firma JavaSoft
für die Entwicklung von Java-Programmen
– Alle Entwicklungen sind mit JDK / SDK alleine möglich,
kommerzielle Tools können jedoch Entwicklung unterstützen:
• XCode (Apple)
• Visual Age (IBM)
• JBuilder (Inprise, Borland)
• Visual J++ (Microsoft)
• Java Workshop / Studio (Sun)
– Darf nicht ohne Lizenzgebühren weiterverkauft werden!
• Java Runtime Environment (JRE)
– Untermenge des JDK / SDK, die benötigt wird, um JavaApplikationen laufen zu lassen
– Darf ohne Lizenzgebühren eigenen Produkten beigefügt werden
© Klaus Hinrichs
Informatik I – Java
5-14
Virtual Machine / JIT-Compiler
• Virtual Machine ist der Teil des JRE, der benötigt wird, um Bytecode
zu interpretieren
• Classfiles werden nur bei Bedarf geladen und
– entweder interpretiert oder
– vor Verwendung "just in time" in die Maschinensprache der
Zielplattform übersetzt.
• JIT-Compiler (Just-In-Time-Compiler) ist ein Compiler, der Klassen
nur bei Bedarf zur Ausführungszeit übersetzt
– Es gibt in der Regel Geschwindigkeitsvorteile im Vergleich zur
Interpretation.
• Bestandteile der Java Virtual Machine JVM:
– Byte Code Loader
– Byte Code Verifier
– Byte Code Interpreter
© Klaus Hinrichs
Informatik I – Java
5-15
Java Applikationen vs. Java Applets
• Java Applets
– laufen innerhalb der JVM eines Webbrowsers
– haben eigene, festgelegte Zeichenfläche im Webbrowser
• Java Applikationen
– eigenständige Applikationen
– laufen innerhalb der JVM
– werden auf der Befehlszeilenebene oder als Mac-/WindowsApplikation gestartet
• Programmieren in Java für beide identisch
© Klaus Hinrichs
Informatik I – Java
5-16
Java-Plattform
• Plattform: Hard- und Softwareumgebung, in der ein Programm
ausgeführt wird.
• Java-Plattform:
• Java API:
– umfangreiche Sammlung von Softwarekomponenten, die viele
nützliche Funktionalitäten bereitstellen, z.B. Bausteine (widgets)
für graphische Benutzerschnittstellen (GUI)
– aufgeteilt in Bibliotheken (! packages) von zueinander in
Beziehung stehenden Klassen und Interfaces.
© Klaus Hinrichs
Informatik I – Java
5-17
5.3 Ein erstes Java-Beispiel
• Klassen
– sind allgemeine Beschreibungen für "Dinge" (Objekte) mit
ähnlichen Eigenschaften und gleichem Verhalten.
– legen mögliche Eigenschaften und Verhaltensweisen (ihrer
Objekte) fest.
• Objekte
– sind Mitglieder einer Klasse.
– haben Eigenschaften / Zustand, beschrieben durch Attribute
– haben ein Verhalten (Behavior), beschrieben durch Methoden
• Instanzen
– sind konkrete (instantiierte) Objekte einer Klasse (belegen
Speicher mit Werten).
© Klaus Hinrichs
Informatik I – Java
5-18
Beispiel: Girokonto
public class Girokonto {
private int kontostand;
// in Pfennigen gerechnet
Modifier class Klassenname {
Attribut-Deklarationen
Methoden
}
public Girokonto() {
kontostand = 0;
}
//
/*
Kommentar
Kommentar
*/
/* Einzahlen und Abheben */
public void zahle(int pfennige) {
kontostand = kontostand + pfennige;
}
public int holeKontostand() {
return (kontostand);
}
}
Informatik I – Java
© Klaus Hinrichs
5-19
Von Klassen zu Objekten
• Exemplare aus einer Klassen-Schablone:
Girokonto
Kontostand (in Pfennigen)
· Ein-/ Auszahlen
· Kontostand abfragen
Objekt
Objekt
Objekt
Objekt
Objekt
• Erzeugen von Objekten durch Instantiierung:
Girokonto meinKonto = new Girokonto();
• Objekt wird automatisch gelöscht, wenn es nirgendwo mehr benutzt
wird (! automatische Garbage-Collection)
• Zustand eines Objekts verändern (! Attribute)
• Nachrichten an ein Objekt senden (! Methoden)
© Klaus Hinrichs
Informatik I – Java
5-20
Attribute
• Attribute zur Beschreibung des Zustands eines Objekts
private int kontostand;
private Girokonto gehaltsKonto;
Modifier Datentyp attributname
• Verändern von Attributen
kontostand = kontostand + pfennige;
• Einkapseln von Attributen
(! Ziel: möglichst alle Attribute einkapseln)
– privat (private), d. h. nur innerhalb des Objekts sichtbar
– öffentlich (public), d. h. auch außerhalb des Objekts sichtbar
© Klaus Hinrichs
Informatik I – Java
5-21
Methoden …
• Methoden zur Beschreibung des Verhaltens von Objekten (d.h. zur
Verarbeitung von Nachrichten, die an Objekte geschickt werden)
public void zahle(int pfennige) {
kontostand = kontostand + pfennige;
}
Spezieller Rückgabewert: void
public int holeKontostand() {
return (kontostand);
}
Modifier Rückgabetyp Methodenname(Typ1 ParamName1,
Typ2 ParamName2 ...){
Liste von Anweisungen;
[ return (Rückgabewert) ]
}
© Klaus Hinrichs
Informatik I – Java
5-22
… und ihr Aufruf
• Beispiel: Auf die Nachricht "Einzahlung 50 Pfennig" reagiert ein
Kontoobjekt mit der Ausführung der Methode einzahlen mit dem
Parameterwert 50.
meinKonto.zahle(50);
saldo = meinKonto.holeKontostand();
• Übergabe von Parametern
– statt komplette Objekte zu übergeben, nur Zeiger darauf
(by reference)
– bei einfachen Datentypen als Wert kopiert (by value)
• Einkapseln von Methoden
– privat, d. h. nur als interne Hilfsmethode zugreifbar (private)
– öffentlich, d. h. extern sichtbar (public)
© Klaus Hinrichs
Informatik I – Java
5-23
Spezielle Methode main
• Ausführung eines Java-Programms besteht im Versenden von
Nachrichten (! bewirken Ausführung von Methoden).
• Dieser Prozess wird von einer Methode main ausgelöst, die jedes
Java-Programm enthalten muß:
public static void main(String[] args)
• Zur Ausführung eines Java-Programms wird dem Interpreter der
Name einer Klasse übergeben, die Ausführung des Progamms
beginnt dann mit dem Aufruf der main-Methode dieser Klasse.
• Übergeben von Argumenten an main aus Kommandozeile möglich
• main geeignet zum Testen von Klassen-Implementierungen
public class TestGirokonto {
...
public static void main(String[] args) {
// Hier Code zum Testen einfügen!
}
...
}
© Klaus Hinrichs
Informatik I – Java
5-24
Hilfsklasse Bildschirm
• Benutzereingaben und Bildschirmausgaben später detaillierter, im
Augenblick genügt Anwendersicht: "Welche Methoden gibt es?“
– komfortable Ausgabe auf den Bildschirm:
Bildschirm.gibAus(text)
– komfortable Eingabe eines Textes von Tastatur:
eingabetext = Bildschirm.gibEin()
– Warten auf Tastendruck
Bildschirm.warteAufTastendruck()
© Klaus Hinrichs
Informatik I – Java
5-25
Übung: Attribute und Methoden …
Lernziele
• Klasse erweitern um Attribute, Methoden
• Erzeugen von Objekten und Nachrichtenaustausch (Methoden)
zwischen Objekten
Aufgaben
• Ergänzen Sie die Klasse "Girokonto"
– zum Sperren eines Kontos:
boolesches Attribut istGesperrt
Methoden
void sperre()
void entsperre()
boolean istGesperrt()
– zum Überschreiben des aktuellen Kontostandes mit einem
übergebenen Betrag:
! Fortsetzung
Methode void setzeKontostand(int neuerKontostand)
© Klaus Hinrichs
Informatik I – Java
5-26
… Übung: Attribute und Methoden …
• Testen der Klasse Girokonto
(! Methode main in der Klasse TestGirokonto)
– Erzeugen eines Girokonto-Objekts
– Nacheinander Einzahlen von 100 Pfennigen, Abheben von 20
Pfennigen und Einzahlen von 30 Pfennigen
– Anschließend Kontostand ausgeben
© Klaus Hinrichs
Informatik I – Java
5-27
… Übung: Attribute und Methoden …
public class Girokonto {
...
private boolean istGesperrt;
...
public void sperre() {
istGesperrt = true;
}
public void entsperre() {
istGesperrt = false;
}
public boolean istGesperrt() {
return (istGesperrt);
}
...
}
© Klaus Hinrichs
Informatik I – Java
5-28
… Übung: Attribute und Methoden
public class TestGirokonto {
public static void main(String[] args) {
// erzeuge neues Konto
Girokonto konto = new Girokonto();
// führe Transaktionen durch
konto.zahle(+100);
konto.zahle(+30);
konto.zahle(-20); //gib Kontostand aus
int saldo = konto.holeKontostand();
Bildschirm.gibAus(saldo);
}
}
Klasse Bildschirm
© Klaus Hinrichs
Informatik I – Java
5-29
Zusammenfassung
• Programm = Mehrere Objekte, die Nachrichten austauschen
• Klassen: Schablonen für Objekte
– Attribute, Methoden
• Objekte
– Erzeugen
• Nachrichtenaustausch
• Aufruf von Methoden eines Objektes (Punkt-Notation), z. B.
konto.holeKontostand()
© Klaus Hinrichs
Informatik I – Java
5-30
Herunterladen