A.2 Teil II: Verteilte Programmierung A Übersicht A.2 Teil II: Verteilte Programmierung Übungen zu ■ Sockets ■ Serialization, Classloader Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen ■ RMI ■ Message Passing, RPC, ORB ■ ORB Erweiterungen: Sicherheit, Replikation, Persistenz Wintersemester 2002/03 Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Title.fm 2002-10-21 11.22 .1 OOVS OOVS Teil I: Java Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. Org.fm 2002-05-06 21.52 A.2 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. A Übersicht A.3 Teil III: CORBA A Übersicht A Übersicht A.1 Teil I: Java A.3 Teil III: CORBA ■ Die Sprache Java ■ CORBA Programmieren in Java ■ OO-Grundlagen in Java: Klassen, Objekte, Vererbung ■ CORBA Services ■ weitere OO-Konzepte in Java: Packages, Innere Klassen, Abstrakte Klassen, Final-Klassen und -Methoden ■ weiterführende Themen ■ automatische Tests mit JUnit Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Org.fm 2002-05-06 21.52 A.1 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS ■ Fehlerbehandlung, Ein-/Ausgabe, Threads Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Org.fm 2002-05-06 21.52 A.3 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. B Java - Überblick B.1 Das Java-System B Java - Überblick B.1 Das Java-System (2) CompilerUmgebung ■ Was ist Java? Laufzeit-Umgebung (Java Plattform) ◆ eine objektorientierte Programmiersprache mit folgenden Eigenschaften: • einfach Class Loader • portabel Java Quellen (.java) • robust ◆ ein sicheres Laufzeitsystem Bytecode Verifier • beliebige Programme ohne Gefahr ausführen • Zugriffskontrolle auf lokale Ressourcen (z.B. Dateien) und das Netzwerk Java Virtual Machine Java Compiler Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.1 OOVS OOVS Java Bytecode (.class) Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. JavaOverview.fm 2002-04-16 08.26 B.3 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. B.1 Das Java-System B.1 Das Java-System B.1 Das Java-System B.1 Das Java-System (3) CompilerUmgebung CompilerUmgebung Java Quellen (.java) Java Quellen (.java) Java Compiler Java Compiler Java Bytecode (.class) Java Bytecode (.class) Laufzeit-Umgebung (Java Plattform) Java Class Libraries Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.2 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS Class Loader Bytecode Verifier Java Interpreter Java Virtual Machine Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.4 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. B.1 Das Java-System B.3 Datentypen B.3 Datentypen B.1 Das Java-System (4) Laufzeit-Umgebung (Java Plattform) CompilerUmgebung ■ Primitive Datentypen: Java Class Libraries ◆ byte, short, int, long (8/16/32/64 bit) ◆ float, double (32/64 bit) ◆ char (Unicode, 16 bit) Class Loader Java Quellen (.java) Bytecode Verifier ◆ boolean (true, false) ◆ “einfache” Operatoren: +,-,+=,<<,... Java Interpreter Java Compiler Just-in-Time Compiler Java Virtual Machine ■ Unterschiede zu C: ◆ keine “unsigned” Datentypen ◆ spezielle Datentypen “boolean” und Unicode char Laufzeit System Betriebssystem Hardware Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.5 OOVS OOVS Java Bytecode (.class) ◆ kein while (x--), stattdessen while (x-- != 0) ◆ kein if (ptr), stattdessen if (ptr != null) Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. JavaOverview.fm 2002-04-16 08.26 B.7 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. B.2 Java vs. C/C++ B.4 Kommentare B.2 Java vs. C/C++ B.4 Kommentare ■ kein Präprozessor (#define) ■ einzeilige Kommentare: ■ kein typedef, union, enum, struct // Das ist ein Kommentar. ■ keine Zeiger-Arithmetik ■ mehrzeilige Kommentare: ■ keine Funktionen oder Prozeduren /* Das ist * ein Kommentar. */ ■ keine globalen Variablen Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.6 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS ■ Dokumentation (Erzeugt HTML-Dokumentation mit dem Tool javadoc): /** Dieser Kommentar * enthält javadoc* Dokumentation. */ Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.8 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. B.5 Kontrollstrukturen B.6 Strings B.5 Kontrollstrukturen B.6 Strings (2) ■ Zusammenfügen funktioniert auch mit int, float,...: ■ Kontrollstrukturen wie in C: ◆ for ( ... ; ... ; ...) { ... } ◆ while ( ... ) { ... } String test = "Result: " + (2 + 3); oder do { ... } while ( ... ); ◆ switch ( ... ) { case .... } Inhalt von test: "Result: 5" ◆ if .... ◆ return, break, continue ■ Wichtig: Strings sind konstant. ■ Unterschiede zu C: ◆ kein goto outerloop: for ( .... ) { // this is "outerloop" while ( .... ) { if ( ... ) break outerloop;// leave "outerloop" } } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.9 OOVS OOVS ◆ break und continue mit Label: Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. JavaOverview.fm 2002-04-16 08.26 B.11 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. B.6 Strings B.7 Arrays B.6 Strings B.7 Arrays ■ gute Unterstützung für Stringverarbeitung ■ Deklaration mit type name[] oder type [] name ■ Datentyp String: ■ Allokation mit new, keine Freigabe notwendig (garbage collector): int numbers[] = new int[100]; String hello = "Hallo"; ■ Elementzugriff wie in C: name[index]: ■ Zusammenfügen mit “+”: for (int n=0; n<100; n++) numbers[n] = n; String world = "Welt"; String greeting = hello + " " + world + "!"; System.out.println(greeting); ■ automatische Bereichsüberprüfung Ausgabe: Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.10 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS Hallo Welt! Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.12 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. B.7 Arrays C OO-Grundlagen mit Java C OO-Grundlagen mit Java B.7 Arrays (2) ■ Deklaration und Initialisierung: ■ Fundamentale Konzepte der objektorientierten Programmierung: int [] firstPrimes = { 2, 3, 5, 7 }; Abstraktion Kapselung ■ Ermitteln der Länge eines Arrays mit length: und Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.13 OOVS OOVS for(int i=0; i<firstPrimes.length; i++) { System.out.println(firstPrimes[i]); } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.1 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. B.7 Arrays C.1 Abstraktion C.1 Abstraktion B.7 Mehrdimensionale Arrays ■ Array-Elemente können wiederum Arrays sein: ■ Trennung von: ◆ Schnittstelle (interface): Was kann getan werden? ◆ Implementierung: Wie wird es gemacht? Interface Implementierung-A Implementierung A Implementation-AB Implementierung Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 JavaOverview.fm 2002-04-16 08.26 B.14 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS int [][] matrix = new int[5][4]; Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.2 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.1 Abstraktion C.2 Kapselung C.1 Abstraktion C.2 Kapselung ■ Beispiel: stack ■ Objekte: Gekapselte Datenstruktur, bestehend aus: ◆ Interface: push, pop ◆ Daten (Instanzvariablen, Attribute) ◆ Implementierung: verkettete Liste, Array ◆ Methoden (Operationen) object stack push,pop push data Implementierung-A Array Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 pop C.3 OOVS OOVS Implverkementierung-A verkettete Liste ■ Kapselung unterstützt die Bildung von Abstraktionen. Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.2 Kapselung C.3 Objekte C.2 Kapselung Prozedurale Programmierung C.5 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte Objektorientierte Programmierung 1 Eigenschaften von Objekten Prozeduren Daten Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.4 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS Objekte Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.6 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 2 Klassen 2 Klassen - Beispiel ■ Objekte sind Instanzen einer Klasse. class Person ■ Die Klasse bestimmt die interne Struktur und die Schnittstelle eines Objekts. String firstname String name int age print object Hans Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.7 OOVS OOVS “Hans”, “Wurst”, 41 Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.9 OO-Basics.fm 2002-04-23 10.36 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 2 Klassen - Beispiel 2 Klassen - Beispiel class Person class Person String firstname String name int age object Otto String firstname String name int age print “Otto”, “Walkes”, 36 print object Peter object Hans “Peter”, “Meier”, 62 Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.8 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS “Hans”, “Wurst”, 41 Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.10 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 2 Klassen - Beispiel 4 Das Objekt-Netz ■ Klassendefinition: ■ Objekte können andere Objekte referenzieren. ◆ Beispiel: eine Person kann eine Adresse referenzieren: class Person { String firstname; String name; int age; void print() { System.out.println("Name: " + firstname + " " + name + " Age: " + age); } } Name: “Hans” Lives in: Street: “Lorlebergplatz” Number: 1 Person Address ■ Darstellung des Zustands eines objektorientierten Programms: Objekt Class Person String firstname String name int age Referenz Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.11 OOVS OOVS print Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.13 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 3 Objekterzeugung 5 Nachrichten / Methoden ■ Objekterzeugung (Instantiierung): ■ Objekte kommunizieren mit Hilfe von Nachrichten. ◆ Jedes Objekt legt sein eigenes Verhalten selbst fest. Person otto = new Person(); otto.firstname = "Otto"; otto.name = "Walkes"; otto.age = 36; otto.print(); ◆ Die Objektsemantik ist nicht über das ganze Programm verteilt. ■ Nachricht = Methodenaufruf an einem Objekt person.print() class Person print() object Otto String firstname String name int age “Otto”, “Walkes”, 36 person client print object Peter object Hans “Peter”, “Meier”, 62 Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.12 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS “Hans”, “Wurst”, 41 ■ objektorientiertes Programm: mehrere Objekte kommunizieren miteinander, um eine bestimmte Aufgabe zu erfüllen. Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.14 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 6 Methoden und Variablen 6 Variablen ■ Methoden können auf 3 verschiedene Arten von Variablen zugreifen: ■ Zugriff auf Instanzvariablen mit: ◆ Parameter (Argumente) ◆ instanceName.variableName ◆ lokale Variablen ◆ Instanzvariablen class Person { String firstname; String name; int age; Instanzvariablen class Point { int xPosition, yPosition; ... void move(int x, int y) { boolean sameName(Person otherPerson) { if (name == otherPerson.name) return true; return false; } Parameter } int i; ... Instanzvariable Instanzvariable lokale Variablen Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.15 OOVS OOVS } } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.17 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 6 Variablen 7 Der Parameter this ■ Parameter und lokale Variablen müssen unterschiedliche Namen haben. ■ Jede Methode hat einen impliziten Parameter this. ■ Parameter und lokale Variablen überdecken Instanzvariablen. ■ this: Referenz auf die Instanz, an der die Methode aufgerufen wurde: class Person { String name; ... void print() { System.out.println(this.name); } } class Test { int a; void m(int a) { a = 5; // does not change instance variable a } } ■ this kann bei Eindeutigkeit weggelassen werden. Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.16 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS ■ Beispiel für Mehrdeutigkeit: class Person { ... boolean compare(String name) { return this.name == name; } } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.18 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 8 Überladen 10 Konstruktoren ■ Methoden mit unterschiedlichen Parametern können den gleichen Namen haben. ■ Konstruktoren dienen der Initialisierung des Objekts. ■ Name des Konstruktors = Name der Klasse. ■ Beispiel: ■ Der Konstruktor wird automatisch nach der Objekterzeugung aufgerufen. class Date { ... void print(PrintStream stream) { stream.println(...); } void print() { print(System.out); } } class Income { ... int computeIncome() { ... } float computeIncome() { ... } // Error !! } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.19 OOVS OOVS ■ Hinweis: Überladen funktioniert nur mit Parametern nicht mit dem Typ des Rückgabewerts: Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.21 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 9 Objekt-Initialisierung 10 Konstruktoren (2) ■ Erzeugen eines Objekts bedeutet Reservierung von Speicher. ■ Initialisierung einer Person mit Name und Alter: class Person { String name; int age; ■ Dieser Speicher muss initialisiert werden. ■ Eine Möglichkeit: ◆ Explizites Aufrufen einer Initialisierungsmethode. Person(String name, int age) { this.name = name; this.age = age; } ... ◆ Nachteil: fehleranfällig. Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.20 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.22 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 10 Konstruktoren (3) 11 Objekte und Referenzen ■ Mehrere Konstrukturen sind möglich: ■ Java-Variablen bezeichnen keine Objekte, sondern Referenzen. class Person { String name; int age; Person p; // Deklaration einer Referenz auf ein Objekt // der Klasse Person // Fehler: Methodenaufruf an einer null- p.print(); Person(String name, int age) { this.name = name; this.age = age; } Person(String name) { this.name = name; this.age = 18; } ... Variablen Objekt-Speicher Person person1 0x7f3de310 Person person2 John Smith 0x313fdc31 Frank Snider Person person3 0x2fe412f8 Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.23 OOVS OOVS } Hans Wurst int result 42 boolean success false Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.3 Objekte C.3 Objekte 10 Konstruktoren (4) 12 Zuweisungen ■ Aufruf eines anderen Konstruktors mit this(...): ■ = weist einer Variable eine Referenz zu class Person { String name; int age; ■ == vergleicht zwei Referenzen ■ Einer Variable eines primitiven Datentypes kann keine Referenz zugewiesen werden. Person(String name, int age) { this.name = name; this.age = age; } Person(String name) { this(name,18); } ... ■ Einer Variable, welche eine Objektreferenz ist, kann niemals der Wert eines primitiven Datentypes zugewiesen werden. ■ Beispiel: Person p; int i=42; } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen OO-Basics.fm 2002-04-23 10.36 C.24 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS p = i; • Universität Erlangen-Nürnberg • Informatik 4, 2002 C.25 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. // Deklaration einer Referenz-Variablen // Deklaration und Initialisierung einer // Variable eines primitiven Datentypes // Fehler: Zuweisung zwischen Referenz und // primitiven Datentyp Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.26 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.3 Objekte 13 Aufrufsemantik von Methoden 15 Identität und Referenzen ■ Objekt-Parameter werden als Referenz übergeben. ■ Identität: gleiche Referenz ■ Primitive Datentypen (int, float, etc.) werden als Wert übergeben. ■ Gleichheit: Inhalt der referenzierten Objekte ist gleich Variablen ■ Beispiel: void meth(int a, Person k) { a = 5; // a: passed by value k.setAge(25); // k: passed by reference } Objektspeicher person1 John Smith person2 Frank Snider person3 John Smith Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.27 OOVS OOVS person4 ■ Welche Personen sind identisch, welche gleich? Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.3 Objekte C.3 Objekte 14 Gleichheit und Identität 16 Testen von Gleichheit und Identität ■ Unterschied zwischen gleichen Objekten und identischen Objekten: ■ Identität kann mit dem Operator == getestet werden: class Date { int day, month, year; Date(int day, int month, int year) { this.day = day; this.month = month; this.year = year; } } ... Date d = new Date(1,3,98); Date d1 = new Date(1,3,98); Date d2 = d; if (d == d1) { ... } ■ Gleichheit kann mit der Methode equals getestet werden: if (d.equals(d1)) { ... } ■ Die Methode equals muss selbst implementiert werden: ◆ d und d1 sind gleich Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen OO-Basics.fm 2002-04-23 10.36 C.28 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS ◆ d und d2 sind identisch • Universität Erlangen-Nürnberg • Informatik 4, 2002 C.29 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. class Date { ... public boolean equals(Object o) { if (! (o instanceof Date)) return false; Date d = (Date)o; return d.day == day && d.month == month && d.year == year; } } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.30 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.3 Objekte C.4 Vererbung 16 Testen von Gleichheit und Identität (2) 1 Vererbung in der echten Welt ■ Wenn zwei Objekte gleich sind, dann müssen sie den gleichen HashWert besitzen: Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.31 OOVS OOVS class Date { ... public int hashcode() { return day + month + year; } } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.33 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.4 Vererbung C.4 Vererbung C.4 Vererbung 2 Vererbung in Java ■ Vererbung: Definition eines neuen Objekts auf der Basis einer spezialisierten Definition eines existierenden Objekts. ■ Definition von Objekten durch Verweise auf andere Objekte. ◆ Beispiel: • Definition eines Tieres: Ein Ding welches atmet und isst. ■ Neue Klassen können von existierenden Klassen abgeleitet werden. • Definition einer Kuh: Ein Tier, dass “muuuu” macht und Milch gibt. ■ Beispiel: Ein Kunde ist eine Person. • Kuh erbt die Eigenschaften “atmen” und “essen” von Tier. class Customer extends Person { int number; ... } ■ Customer ist eine Unterklasse (subclass) von Person Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.32 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS ■ Person ist die Oberklasse (superclass) von Customer. Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.34 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.4 Vererbung C.4 Vererbung 3 Unterklassen 5 Vererbung ist Spezialisierung Schnittstelle ■ Unterklassen erben Implementierung implementiert ◆ Zustand (Instanzvariablen) und Generalisierung ◆ Verhalten (Methoden) von der Oberklasse. A ■ Unterklassen können: Implementierung-A ◆ neue Instanzvariablen einführen ◆ neue Methoden einführen ◆ geerbte Instanzvariablen verdecken (vorsicht!) Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.35 OOVS OOVS ◆ geerbte Methoden überschreiben Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.37 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.4 Vererbung C.4 Vererbung 4 Das Ersetzungsprinzip C.4 Vererbung ist Spezialisierung Schnittstelle ■ Wenn ein Objekt der Oberklasse erwartet wird, kann immer auch ein Objekt einer Unterklasse verwendet werden. Implementierung implementiert ◆ wichtigster Typ des Polymorphismus Generalisierung A ■ Vererbung ist Spezialisierung ("ist ein" Relation) Implementierung-A ■ alles was für die Generalisierung gilt muss auch auf die Spezialisierung zutreffen. ◆ Die Spezialisierung muss alle Anforderungen der Generalisierung erfüllen. Interface Konformität semantische Konformität Abstraktion Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.36 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS SubA implementiert Implementierung-A Implementierung-SubA Spezialisierung Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.38 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.4 Vererbung C.4 Vererbung 6 Vererbung in Java 8 Überschreiben ■ Klassen mit einfacher Vererbung ■ Unterklassen können für geerbte Methoden eine neue Implementierung bereitstellen. ■ Baum Hierarchie mit der Klasse Object als Basisklasse aller anderen Klassen ■ Die neue Implementierung überschreibt die geerbte Implementierung: Object Object clone() boolean equals(Object o) String toString() ... ... ... ... ... OOVS ... ... ■ primitive Typen (int,float,...) sind außerhalb des Klassenbaumes Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.39 OOVS String class Person { String name; ... void print() { System.out.println("Person: " + name); } } class Customer extends Person { int number; ... void print() { System.out.println("Person: " + name); System.out.println("Customer number: " + number); } } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.4 Vererbung C.4 Vererbung 7 Die Klasse Object 8 Überschreiben (2) ■ Die Klasse Object: Basisklasse aller anderen Klassen ■ Die Implementierung der Oberklasse kann mit super.method() aufgerufen werden. class Person extends Object {... } ■ Beispiel: ◆ extends Object kann wegfallen class Customer extends Person { int number; ... void print() { super.print(); System.out.println("Customer number: " + number); } } class Person {... } ■ Stellt Basisfunktionalität zur Verfügung, zum Beispiel: ◆ boolean equals(Object o) Standardimplementierung vergleicht die Referenzen – Jede Klasse sollte eine eigene Implementierung bereitstellen // Stringdarstellung eines Objekts – Standardimplementierung: Klassenname und Objekt ID – Jede Klasse sollte eine eigene Implementierung bereitstellen Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.40 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS // Test auf Gleichheit – ◆ String toString() C.41 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.42 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.4 Vererbung C.4 Vererbung 9 Überladen vs. Überschreiben 10 Dynamisches Binden ■ Um eine Methode zu überschreiben müssen die Typen der Parameter und des Rückwerts exakt übereinstimmen, ansonsten wird die Methode überladen. ■ Die Methoden werden erst bei einem Aufruf gebunden. ■ dynamischer Typ: Typ/Klasse des referenzieren Objekts (die Klasse, die bei new verwendet wurde) ■ Um dem Ersetzungsprinzip gerecht zu werden würde es ausreichen, wenn: ■ statischer Typ: Typ der Referenz ◆ die Typen der Parameter von einer Oberklasse der ursprünglichen Parameter sind ■ Durch den statischen Typ wird festgelegt, welche Methoden aufgerufen werden können. ◆ der Typ des Rückgabewertes von einer abgeleiteten Klasse des ursprünglichen Rückgabetyps ist. ■ Der dynamische Typ legt fest, welche Methode verwendet wird: Customer c = new Customer("Max", 1234); // dynamischer Typ von p ist Customer, Person p = c; // statischer Typ ist Person Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.43 OOVS OOVS ■ Java unterstützt das jedoch nicht!!! c.print(); p.print(); // obwohl die Referenz p den Typ Person hat, wird // die print() Methode von Customer verwendet Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.4 Vererbung C.4 Vererbung 9 Überladen vs. Überschreiben (2) 11 Sichtbarkeit und Vererbung ■ häufiger Fehler: ■ Die Sichtbarkeit von Methoden darf in Unterklassen nicht eingeschränkt werden (Ersetzbarkeit!):. class Object { boolean equals(Object o) { ... } ... } equals von Object wird nicht überschrieben class Person { public String getName() { ... } } class Customer extends Person { private String getName() { ... } } Error Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen OO-Basics.fm 2002-04-23 10.36 C.44 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS class Customer { int number; boolean equals(Customer c) { return number == c.number;} ... } • Universität Erlangen-Nürnberg • Informatik 4, 2002 C.45 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.46 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.4 Vererbung C.4 Vererbung 12 Konstruktoren und Vererbung 13 Typenkonvertierung: Upcast ■ Konstruktoren werden nicht vererbt ■ Typenkonvertierung von einer Unterklassen zur Oberklasse (upcast) erfolgt automatisch: ■ Aufrufen eines Konstruktors der Oberklasse mittels super(...) Person p = new Customer(...); ■ super(...) muss die erste Anweisung in einem Konstruktor sein Person name age ■ Falls die erste Anweisung nicht super(...) ist, so fügt der Compiler automatisch eine super() Anweisung ein. ■ Standardkonstruktor: Upcast ◆ wird vom Compiler erzeugt, falls kein Konstruktor definiert wird print() Downcast ◆ enthält eine super() Anweisung Customer Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.47 OOVS OOVS number Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.49 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.4 Vererbung C.4 Vererbung 12 Konstruktoren und Vererbung (2) 13 Typenkonvertierung: Downcast ■ Beispiel: ■ Typenkonvertierung von der Oberklasse zu einer Unterklasse (downcast) explizit mittels Cast-Opertor: class Customer extends Person { int number; Customer(String name, int number) { super(name); this.number = number; } ... } Customer c = new Customer(...) Person p = c; // implizite Typenkonvertierung Customer c2 = (Customer) p; // explizite Typenkonvertierung ■ Wenn das Objekt und die Variable nicht typkonform sind, wird eine ClassCastException generiert: Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.48 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS Customer c = new Customer(...) Person p = c; // implizite Typenkonvertierung Employee e = (Employee) p; // erzeugt eine ClassCastException zur Laufzeit Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.50 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.4 Vererbung C.4 Vererbung 14 Typ Ermittlung 15 Die Klasse Class (2) ■ instanceof Operator: ■ seit Java 1.1: besser als Class.forName(...) Customer c = new Customer(...) Person person = c; // upcast if (person instanceof Employee) { Employee employee = (Employee) person; ... } else if (person instanceof Customer) { Customer customer = (Customer) person; ... } Class aClass = Employee.class; ... Object o = aClass.newInstance(); Person p = (Person) o; ■ instanceof mit der Oberklasse des dynamischen Typs ist ebenfalls true: Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.51 OOVS OOVS person instanceof Person Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OO-Basics.fm 2002-04-23 10.36 C.53 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. C.4 Vererbung D Aufgabe 1 D Aufgabe 1 15 Die Klasse Class ■ Die Klasse Class: Die Klasse aller Klassen. ■ Anwendungen ■ Ein Class Objekt repräsentiert eine Klasse oder ein Interface. ■ Zeichnen ■ Mit Hilfe eines Class Objekts können neue Instanzen erzeugt werden: ■ Interfaces in Java Customer c = new Customer(); ... Class aClass = c.getClass(); System.out.println("Class of c is:"+aClass); Object o = aClass.newInstance(); ■ Explizites Laden von Klassen ■ JUnit ■ OOVS Homepage: http://www4.informatik.uni-erlangen.de/Lehre/WS02/V_OOVS/Uebung/ // ein neues Customer Objekt Person p = (Person) o; Class aClass = Class.forName("Employee"); Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 OO-Basics.fm 2002-04-23 10.36 C.52 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS ■ Ein Class Objekt kann aus dem Namen einer Klasse generiert werden: Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Uebung1.fm 2002-10-24 09.38 D.1 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. D.1 Anwendungen D.2 Zeichnen D.1 Anwendungen 2 Die paint Methode ■ implizit: wenn ein Teil der Anwendung neu gezeichnet werden muss, so ruft das System die paint() Methode auf: ■ Eine Anwendung benötigt eine main Methode: class MyApplication { public static void main(String[] args) { ... } } paint(Graphics g) Laufzeit System Anwendung ■ Anwendungen werden durch den Java Interpreter gestartet. ◆ Parameter: Hauptklasse (Klasse mit main Methode) ■ explizit: repaint() veranlasst das System paint() aufzurufen: > set path=( /local/java-1.4/bin $path) > setenv CLASSPATH /proj/i4oovs/felser/aufgabe1 > java MyApplication 1:repaint() Laufzeit System Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Uebung1.fm 2002-10-24 09.38 D.2 OOVS OOVS 2:paint(Graphics g) Anwendung Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. Uebung1.fm 2002-10-24 09.38 D.4 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. D.2 Zeichnen D.2 Zeichnen D.2 Zeichnen 3 Das Graphics Objekt ■ ...wird als Parameter an die paint() Methode übergeben: 1 Frame import java.awt.Frame; import java.awt.Graphics; ■ Top-Level-Window zum anzeigen von grafischen Inhalten: import java.awt.Frame; public class MyApplication extends Frame { ... public void paint(Graphics g) { ... } } public class MyApplication extends Frame { MyApplication(){ super("MyApplication"); setSize(400,300); setVisible(true); } } ■ ... wird zum zeichnen verwendet: ◆ drawRect(int x, int y, int w, int h) ◆ drawOval(int x, int y, int w, int h) Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Uebung1.fm 2002-10-24 09.38 D.3 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS ◆ ... ■ Ursprung oben links!! Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Uebung1.fm 2002-10-24 09.38 D.5 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. D.3 Schnittstellen in Java D.4 Explizites Laden von Klassen D.3 Schnittstellen in Java D.4 Explizites Laden von Klassen ■ Schnittstellen werden in Java durch das Schlüsselwort interface definiert: ■ Klassenobjekte können dynamisch durch den Methodenaufruf Class.forName() geladen und instanziiert werden. interface Stack{ void push(Object o); Object pop(); } ■ Die Methode newInstance() liefert eine konkrete Instanz einer dynamisch geladenen Klasse. ■ Beispiel: try{ Class c = Class.forName("TestClass"); Object o = c.newInstance(); }catch(Exception e){ System.err.println(e.toString()); } ■ Zur Implementierung dient das Schlüsselwort implements: Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Uebung1.fm 2002-10-24 09.38 D.6 OOVS OOVS class Stack_impl implements Stack{ public void push(Object o){ .... } public Object pop(){ .... } } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. Uebung1.fm 2002-10-24 09.38 D.8 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. D.3 Schnittstellen in Java D.5 Automatisches testen mit JUnit D.5 Automatisches testen mit JUnit D.3 Schnittstellen in Java (2) ■ Verwendung von Interfaces: ■ Unit-Test public class Calculator { public void add(Stack store ) { ... } } .... Calculator calc = new Calculator(); Stack s1=new Stack_impl_array(...); calc.add(s1); Stack s2=new Stack_impl_list(...); calc.add(s2); ◆ testet die Methoden einer Klasse ◆ ist jederzeit wiederholbar ◆ verändert den Programmcode der Applikation nicht ◆ gewährleistet definierte Funktion auch nach großen Modifikationen des Programmcodes ■ Beispiel Money.java public class Money { private double amount; public Money (double amount){ ....} public double getAmount(){ .... } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Uebung1.fm 2002-10-24 09.38 D.7 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. OOVS OOVS } Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Uebung1.fm 2002-10-24 09.38 D.9 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. D.5 Automatisches testen mit JUnit D.5 Automatisches testen mit JUnit (2) ■ Unit-Test für Money.java public class MoneyTest extends TestCase { public MoneyTest (String name){ super(name); } public void testAmount(){ Money money = new Money(3.00); assertTrue(3.00 == money.getAmount()); } public static void main(String[] args){ junit.textui.TestRunner.run(MoneyTest.class); } OOVS } ■ Mehr Informationen unter http://www.junit.org oder nächste Woche in der Übung. Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Uebung1.fm 2002-10-24 09.38 D.10 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. D.6 Entwicklungsumgebung im CIP-Pool D.6 Entwicklungsumgebung im CIP-Pool ■ java - /local/java-1.4 ■ junit - /local/junit ■ Entwickeln mit xemacs und jde (http://jdee.sunsite.dk/) ◆ Anpassungen in .emacs oder .xemacs/init.el OOVS (add-to-list ’load-path (expand-file-name "/local/speedbar")) (add-to-list ’load-path (expand-file-name "/local/semantic")) (add-to-list ’load-path (expand-file-name "/local/eieio")) (add-to-list ’load-path (expand-file-name "/local/jde-2.2.8/lisp")) (require ’jde) ◆ CLASSPATH erweitern um /local/jde-2.2.8/java/lib/jde.jar und /local/jde-2.2.8/java/lib/bsh.jar Objektorientierte Konzepte in Verteilten Systemen und Betriebssystemen • Universität Erlangen-Nürnberg • Informatik 4, 2002 Uebung1.fm 2002-10-24 09.38 D.11 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.