Objektorientierte Konzepte in Verteilten Systemen und

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