Ü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