Einführung in die objektorientierte Programmierung (OOP

Werbung
Obligatorische Literatur
Einführung in die objektorientierte
Programmierung (OOP)
►
►
►
Prof. Dr. rer. nat. Uwe Aßmann
Lehrstuhl Softwaretechnologie
Fakultät für Informatik
TU Dresden
Version 08-1.0, 10.10.08
►
1) Objekte
2) Klassen
3) Allgemeines über
Objektorientierte
Programmierung
Softwaretechnologie, © Prof. Uwe Aßmann
Zuser Kap 7, Anhang A
Störrle, einleitende Kapitel
Java:
■
Balzert, LE 3-5
■
Boles, Kap. 1-6
Optional:
■
1
A. Kay. The History of Smalltalk. Second Conference on the History of
Programming Languages. ACM. http://portal.acm.org/citation.cfm?id=1057828
2
Prof. Uwe Aßmann, Softwaretechnologie
Ziele
►
Objekte verstehen als identitätstragende Entitäten mit Methoden und Zustand
Klassen als Modellierungskonzepte verstehen
►
Verstehen, wie Objekte und Klassen im Speicher dargestellt werden
►
■
Objekte: Die Idee
Mengen-, Schablonensemantik
Prof. Uwe Aßmann, Softwaretechnologie
3
Softwaretechnologie, © Prof. Uwe Aßmann
4
Die zentralen Fragen
Modeling the Real World
Car
...
1
4
Engine
Wheel
Wie können wir die Welt möglichst einfach beschreiben?
2
Side-wheels
Objektorientierte Entwicklung modelliert die reale Welt, um sie im Rechner
zu simulieren
Wie können wir die Beschreibung im Computer realisieren?
Herkunft:
Simula 1967 (Nygaard, Dahl). Ziel: technische Systeme simulieren
Smalltalk 1973 (Kay, Goldberg)
Frage: Worauf muss man besonders achten?
Prof. Uwe Aßmann, Softwaretechnologie
5
Verschiedene Antworten
►
►
►
►
Die Welt einfach modellieren
Funktionale Sprachen (wie Haskell, ML)
■
Die Antwort der Objektorientierung:
durch Software-Objekte
Funktionen berechnen Werte ohne Zustand
Imperative modulare Sprachen (wie Modula, C, Ada 83)
■
Funktionen berechnen Werte mit Zustand
■
Statische Aufrufbeziehungen zwischen den Funktionen
Identifikation von Objekten in Systemen
Kapselung von Funktionen in Objekten
(Verantwortungsbereiche)
Objektorientierte Sprachen (wie C++, Java, C#, Ada95)
■
Funktionen berechnen Werte und Objekte mit Zustand
■
Dynamisch veränderliche Aufrufbeziehungen
Klare Schnittstellen zwischen Teilsystemen
(Benutzungsprotokolle zwischen Objekten)
Logische Sprachen (Prolog, Datalog, F-Logik, OWL)
■
Prädikate beschreiben Aussagen (Wahrheiten)
■
Deklarative Logik beschreibt inferierbares Wissen auf einer Faktenbasis
Kein expliziter Steuer- oder Datenfluß, ist implizit
■
6
Prof. Uwe Aßmann, Softwaretechnologie
Verschiedene Abstraktionsebenen
(Hierarchie)
Vorgefertigte Teile - Wiederverwendung
(Baukastenprinzip, Rahmenwerke)
Prof. Uwe Aßmann, Softwaretechnologie
7
Prof. Uwe Aßmann, Softwaretechnologie
8
Objekte
►
►
►
►
Grundkonzepte der Objektorientierung
Wie ist das Objekt bezeichnet (Name)?
Wie verhält es sich zu seiner Umgebung?
Welche Informationen sind „Privatsache“ des Objekts?
Ein System besteht aus vielen Objekten.
►
►
Identität:
„DD-0X5A“
►
Ein Objekt hat ein definiertes Verhalten.
■
Menge genau definierter Operationen (Funktionen, Methoden, Prodeduren)
■
Operation wird beim Empfang einer Nachricht (Message) ausgeführt.
■
Operationen drücken die Zuständigkeit eines Objektes für gewisse Aufgaben
des Systems aus
Ein Objekt hat einen inneren Zustand.
■
Ausgedrückt durch sog. Attribute, die Werte annehmen können
■
Resultat einer Operation hängt vom aktuellen Zustand ab
Ein Objekt besteht also aus einer Menge von Operationen auf einem
Zustand
■
Verhalten:
„gelbes Licht“
Objekte gruppieren Operationen, die über einen Zustand kommunizieren
Zustand:
Normalbetrieb
Objekt zur Repräsentation
einer Ampel
9
Prof. Uwe Aßmann, Softwaretechnologie
Grundkonzepte der Objektorientierung
►
►
Die Identität ist unabhängig von anderen Eigenschaften.
■
Es können mehrere verschiedene Objekte mit identischem Verhalten und
identischem inneren Zustand im gleichen System existieren.
■
►
OOSE
Jacobson
Zustand des Objekts ist Privatsache
Zustand wird nach aussenhin verborgen; niemand kann sich Annahmen auf den
Zustand machen, ausser denen, die das Objekte freiwillig angibt
...
OMT
Rumbaugh et al.
1995:
Booch / Rumbaugh / Jacobson
Objekte müssen zu Objektnetzen verknüpft werden
Prof. Uwe Aßmann, Softwaretechnologie
OOD
Booch
Ca. 1990:
Ein Objekt lebt in einem Objektnetz (Noone is an island)
■
10
Unified Modeling Language UML
Ein Objekt verwaltet ein Geheimnis (Geheimnisprinzip, Kapselung des
Zustandes)
■
12. Abteilungsrunde
DD-0X5A: Ampel
Prof. Uwe Aßmann, Softwaretechnologie
Ein Objekt hat eine eindeutige Identität (Schlüssel, key, object identifier)
■
Objekt zur Repräsentation
eines Termins
1997:
1999:
2001:
11
UML 1.1
UML 1.3
UML 1.4
2002: UML 1.4.1
2004: UML 2.0
►
UML ist Industriestandard der OMG (Object Management Group)
http://www.omg.org/uml
►
Achtung: wir verwenden hier jUML (Java-äquivalent), aUML (für Analyse),
dUML (für Design).
Prof. Uwe Aßmann, Softwaretechnologie
12
Wie sieht ein Objekt in (j)UML aus?
►
►
Wie sieht ein Objekt in UML aus?
Bsp.: Eine Einkommenssteuererklärung wird von einem Steuerzahler
ausgefüllt. Sie wird zuerst mit Standardwerten initialisiert, dann in Iterationen
ausgefüllt: abgespeichert und wiedergelesen. Zuletzt wird sie beim Finanzamt
eingereicht.
Die Werte aller Attribute bildet den Objektzustand
►
►
Attribute und/oder Operationen (Methoden, Funktionen, Prozeduren) können
weggelassen sein
Objekte können anonym sein oder einen Variablennamen (Identifikator)
tragen
anonym
Identität
:Finanzamt
fin:Finanzamt
st:Steuererklärung
submit()
name:String = „Dresden I“
number:int = 1
iteration:int = 5
submit()
create()
store()
reread()
:Steuererklärung
number:int = 1
iteration:int = 5
Zustand
name:String = „Leo Rott“
maritalStatus:String = „verh“
Funktionen
sandra:Steuerzahler
pay()
13
Prof. Uwe Aßmann, Softwaretechnologie
Wie sieht ein Objekt im Speicher aus?
(vereinfacht)
►
Der Speicher setzt sich zusammen aus
■
■
■
■
Keller
benamt
zahler:Steuerzahler
100
104
:Steuerzahler
108
112
116
Symboltabelle
(Stringspeicher)
Leo Rott
verh
Die Halde wächst dynamisch mit wachsender Menge von Objekten
■
Symboltabelle (symbol table, halbdynamisch: statischer und dynamischer Teil,
enthält alle Zeichenketten (Strings))
Code-Speicher für Methoden (statisch)
Halde
(Objektspeicher)
Wie sieht ein Objekt im Speicher aus?
(vereinfacht)
►
Halde (heap, dynamisch wachsender Objektspeicher)
Keller (stack, Laufzeitkeller für Methoden und ihre Variablen)
Code-Speicher
(Methoden)
pay() {
....
}
create() { .. }
store() { .. }
reread() { .. }
14
Prof. Uwe Aßmann, Softwaretechnologie
verschiedene Lebenszeiten
Halde
(Objektspeicher)
:Steuerzahler
100 name:String
Symboltabelle
Leo Rott
verh
104 maritalStatus:String
108 pay()
112 number:int = 1
116 iteration:int = 5
120 create()
124 store()
:Steuererklärung
120
128 reread()
124
:Steuererklärung
Code-Speicher
pay() {
....
}
create() { .. }
store() { .. }
reread() { .. }
new() { .. }
128
Prof. Uwe Aßmann, Softwaretechnologie
15
Prof. Uwe Aßmann, Softwaretechnologie
16
Was passiert bei der Objekterzeugung
im Speicher?
Objekterzeugung (Allokation)
►
Eine Methode im Code-Speicher spielt eine besondere Rolle: der Allokator
(Objekterzeuger) new()
■
zahler2 = new Steuerzahler(“Sandra Klug”, “ledig”);
Erzeugt in der Halde ein neues Objekt, mit
.
Platz für die Attribute. Der Allokator arbeitet spezifisch für den Typ eines
Objekts und kennt die Platzbedarf eines Objekts
.
Platz für die Zeiger auf die Methoden
.
Initialisierung: Der Allokator erhält die Initialwerte von Attributen als Parameter
Symboltabelle
Halde
(Objektspeicher)
Leo Rott
verh
Sandra Klug
ledig
100 name:String
104 maritalStatus:String
108 pay()
In Java:
zahler2 = new Steuerzahler(“Sandra Klug”, “ledig”);
►
Code-Speicher
112 number:int = 1
pay() {
....
}
create() { .. }
store() { .. }
reread() { .. }
new() { .. }
116 iteration:int = 5
120 create()
124 store()
128 reread()
132 name:String
Neu
136 maritalStatus:String
140 pay()
Prof. Uwe Aßmann, Softwaretechnologie
17
Allokation und Aufruf eines Objektes in
Java
►
Objekte durchlaufen im Laufe ihres Lebens viele Zustandsveränderungen, die
durch Aufrufe verursacht werden
// Typical life of a young man
juri = new Man();
// Allokation: lege Objekt im Speicher an
while (true) {
juri.cry();
// Yields: juri.state == crying
juri.drink();
// Yields: juri.state == drinking
juri.sleep();
// Yields: juri.state == sleeping
juri.fillDiapers(); // Yields: juri.state == fillingDiapers
}
Prof. Uwe Aßmann, Softwaretechnologie
19
Prof. Uwe Aßmann, Softwaretechnologie
:Steuerzahler
18
Zustandsänderungen im Ablauf eines
Java-Programms
class Clock {
int hours, minutes;
public void tick() {
minutes++; if (minutes == 60) { minutes = 0; hours++;
public void tickHour() {
for (int i = 1; i<= 60; i++) {
tick(i);
// object calls itself
}
}
public void reset() { hours = 0; minutes = 0; }
public void set(int h, int m) { hours = h; minutes = m;
}
...
Clock cl1 = new Clock();
// cl1.hours == cl1.minutes ==
cl1.reset();
// cl1.hours == cl1.minutes ==
Clock cl2 = new Clock();
// cl2.hours == cl2.minutes ==
cl2.reset();
// cl2.hours == cl2.minutes ==
cl1.set(3,59);
// cl1.hours == 3; cl1.minutes
cl1.tick();
// cl1.hours == 4; cl1.minutes
cl1 = null;
// object cl1 is dead
Prof. Uwe Aßmann, Softwaretechnologie
} }
}
undef
0
undef
0
== 59
== 0
20
Allokation, Aufruf und Deallokation
einer Steuererklärung in Java
►
Was können Objekte darstellen?
Ein Codemuster ist ein Lösungsschema für wiederkehrende
Programmierprobleme
►
■
erkl = new Einkommensteuererklärung();
// Allokation: lege Objekt im Speicher an
erkl.initialize();
Codemuster (Idiom)
// fill with default values
FirstIteration
boolean firstIteration = true;
while (true) {
if (firstIteration) {
firstIteration = false;
} else {
erkl.rereadFromStore(); // Read last state
}
erkl.edit();
// Yields: erkl.state == editing
erkl.store();
// Yields: erkl.state == stored
}
erkl.shipToTaxOffice();
erkl = null;
// object dies
Prof. Uwe Aßmann, Softwaretechnologie
21
Objektnetze
►
►
Simulierte abstrakte Dinge (Anwendungsobjekte, fachliche Objekte,
Geschäftsobjekte, business objects)
■
►
Rechnungen, Löhne, Steuererklärungen, Buchungen, etc.
Konzepte und Begriffe
■
►
Autos, Menschen, Häuser, Maschinen, Weine, Steuerzahler, etc.
Farben, Geschmack, Regionen, politische Einstellungen, etc.
Handlungen. Objekte können auch Aktionen darstellen
■
■
Entspricht der Substantivierung eines Verbs (Reifikation, reification)
sog. Kommandoobjekte, wie Editieren, Drucken, Zeichnen, etc.
Ein Link von einem Objekt zum nächsten heisst Referenz (Objekt-Assoziation)
►
►
... können als Objektnetze in UML dargestellt werden
In Java werden also Referenzen durch Attribute mit dem Typ eines Objekts
(also kein Basistyp wie int); in UML durch Pfeile
cl1:Clock
class TwinClock {
TwinClock twin;
public void tick() { minutes++;
if (minutes == 60) { minutes = 0; hours++; }
twin.tick();
}
void setTwin(TwinClock t) { twin = t; }
}
...
TwinClock cl1 = new TwinClock();
// cl1.twin == undefined
TwinClock cl2 = new TwinClock();
// cl2.twin == undefined
cl1.setTwin(cl2);
// cl1.twin == cl2
cl2.setTwin(cl1);
// cl2.twin == cl1
Prof. Uwe Aßmann, Softwaretechnologie
22
Prof. Uwe Aßmann, Softwaretechnologie
Objektwertige Attribute in Objektnetzen
Objekte existieren selten alleine; sie müssen zu Objektnetzen verflochten
werden
■
Simulierte reale Objekte der realen Welt (der Anwendungsdomäne)
cl1:Clock
twin:Clock=cl2
tick()
setTwin(t:Clock)
cl1:Clock
twin:Clock=cl2
tick()
setTwin(t:Clock)
tick()
setTwin(t:Clock)
twin
twin
cl2:Clock
cl2:Clock
twin:Clock=cl1
tick()
23
setTwin(t:Clock)
cl2:Clock
twin:Clock=cl1
tick()
setTwin(t:Clock)
Prof. Uwe Aßmann, Softwaretechnologie
tick()
setTwin(t:Clock)
24
Phasen eines objektorientierten
Programms
►
Phasen eines objektorientierten
Programms
Die folgende Phasengliederung ist als Anhaltspunkt zu verstehen; oft werden
einzelne Phasen weggelassen oder in der Reihenfolge verändert
Aufbauphase
Allokation von Objekten im Speicher
Initialisierung
Vernetzung der Objekte (Aufbau des Objektnetzes)
Arbeitsphase: die Objekte arbeiten zusammen, um das Ziel zu erreichen
Umbauphase: Rekonfiguriere das Objektnetz
Abbauphase
Abbau des Objektnetzes
Abfallsammlung auf der Halde (garbage collection, in Java autom.)
25
Prof. Uwe Aßmann, Softwaretechnologie
class Clock { // assume a combination of previous Clock and TwinClock
public void tick() { .. }
public void tickHour() { .. }
public void setTwin(Clock c) { .. }
public void reset() { .. }
public void set(int h, int m) { .. }
Allokation
}
...
Clock cl1 = new Clock(); // cl1.hours == cl1.minutes == undefined
Clock cl2 = new Clock(); // cl2.hours == cl2.minutes == undefined
Initialisierung
cl1.reset();
// cl1.hours == cl1.minutes == 0
cl2.reset();
// cl2.hours == cl2.minutes == 0
Vernetzung
cl1.setTwin(cl2);
cl2.setTwin(cl1);
// cl1.twin == cl2
// cl2.twin == cl1
cl1.set(3,59);
cl1.tick();
// cl1.hours == 3; cl1.minutes == 59
// cl1.hours == 4; cl1.minutes == 0
cl1 = null;
cl2 = null;
// object cl1 is dead
// object cl2 is dead
Arbeitsphase
Abbauphase
Prof. Uwe Aßmann, Softwaretechnologie
26
Klasse und Objekt
Klassen
►
Ein weiterer Grundbegriff der Objektorientierung ist der der Klasse.
►
Fragen: Welcher Begriff beschreibt das Objekt?
■
Welchen Typ hat das Objekt?
■
In welche Klasse einer Klassifikation fällt das Objekt?
■
Zu welcher Menge gehört das Objekt?
Klasse:
„Ampel“
Objekt:
„DD-0X5A“
Softwaretechnologie, © Prof. Uwe Aßmann
27
Prof. Uwe Aßmann, Softwaretechnologie
28
Beispiel: Ampel-Klasse und AmpelObjekte
►
Klassen als Begriffe, Mengen und
Schablonen
Objekte, die zu Klassen gehören, heißen Ausprägungen der Klasse
►
Begriffsorientierte Sicht:
■
►
DD-0Y3C:Ampel
DD-0X5B:Ampel
DD-0X5A:Ampel
<<instance-of>>
►
Mengenorientierte Sicht:
■
Eine Klasse enthält eine Menge von Objekten
■
Eine Klasse abstrahiert eine Menge von Objekten
Schablonenorientierte (ähnlichkeitsorientierte) Sicht:
■
<<instance-of>>
<<instance-of>>
Ampel
■
Ausprägung einer Klasse (Das Wort Instanz ist kein korrektes Deutsch)
Prof. Uwe Aßmann, Softwaretechnologie
29
Merkmale von Klassen und Objekten
►
■
■
■
►
►
Prof. Uwe Aßmann, Softwaretechnologie
►
30
Zustandsinvariante Methoden:
■
Damit haben alle Objekte der Klasse die gleichen Merkmale
Attribute (attributes, Daten). Attribute haben in einem Objekt einen
objektspezifischen Wert.
.
Die Werte bilden in ihrer Gesamtheit den Zustand des Objektes, der sich über
der Zeit ändert.
Operationen (Methoden, Funktionen, Prozeduren, functions, methods).
Prozeduren, die den Zustand des Objektes abfragen oder verändern können.
Diese Merkmale sind für alle Objekte einer Klasse gleich.
Invarianten, Bedingungen, die für alle Objekte zu allen Zeiten gelten
Da ein Objekt aus der Schablone der Klasse erzeugt wird, sind anfänglich die
Werte seiner Attribute die des Klassenprototyps.
Durch Ausführung von Methoden ändert sich jedoch der Zustand, d.h., die
Attributwerte.
■
►
31
Anfragen (queries, Testbefehle). Diese Prozeduren geben über den Zustand des
Objektes Auskunft, verändern den Zustand aber nicht.
Prüfer (checker, Prüfbefehle). Diese Prozeduren liefern einen booleschen Wert.
Sie prüfen eine Konsistenzbedingung (Integritätsbedingung, integrity constraint)
auf dem Objekt, verändern den Zustand aber nicht.
.
Invarianten-Prüfer
.
Prüfer von Vorbedingungen für Methoden, Nachbedingungen
Zustandsverändernde Methoden:
■
■
■
Prof. Uwe Aßmann, Softwaretechnologie
Eine Klasse bildet eine Äquivalenzklasse für eine Menge von Objekten
.
Natürlich ist eine Äquivalenzklasse eine spezielle Menge, die aber durch ein
gemeinsames Prädikat charakterisiert ist
.
Die Klasse schreibt das Verhaltensschema und die innere Struktur ihrer
Objekte vor (Äquivalenz)
.
Eine Klasse enthält einen speziellen Repräsentanten, ein spezielles Objekt,
ein Schablonenobjekt (Prototyp) für ihre Objekte.
Ein Objekt wird aus einer Klasse erzeugt (Objektallokation),
.
in dem der Prototyp in einen neuen, freien Speicherbereich kopiert wird.
.
Damit erbt das neue Objekt das Verhalten der Klasse (die Operationen), das
Prädikat und die Attribute des Prototyps (meistens Nullwerte wie 0 oder null)
Arten von Methoden
Eine Klasse hat Merkmale (features, in Java: members), die sie auf die
Objekte überträgt.
■
Eine Klasse stellt einen Begriff dar. Dann charakterisiert die Klasse ein Konzept
Modifikatoren
.
Attributmodifikatoren ändern den (lokalen) Zustand des Objekts
.
Netzmodifikatoren ändern die Vernetzung des Objektes
Repräsentationswechsler (representation changers) transportieren das Objekt
in eine andere Repräsentation
.
z.B. drucken den Zustand des Objekts in einen String, auf eine Datei oder auf
einen Datenstrom.
Allgemeine Methoden.
Prof. Uwe Aßmann, Softwaretechnologie
32
Klasse als Venn-Diagramm in der
mengenorientierte Sicht
►
►
Klasse in schablonenorientierter Sicht
Professoren und Studenten
Klassen bilden Mengen; Objekte werden durch Enthaltensein ausgedrückt
Merke die Verbindung zu Datenbanken:
■
Objekte entsprechen Tupeln mit eindeutigem Identifikator (OID, surrogate)
■
Klassen entsprechen Relationen mit Identifikator-Attribut
Ampel
DD-0X5A:Ampel
DD-0Y3C:Ampel
Professor
Student
Schill:Professor
Schneider:Student
Aßmann:Professor
Müller:Student
Härtig:Professor
Weckermann:Student
DD-0X5B:Ampel
33
Prof. Uwe Aßmann, Softwaretechnologie
Klasse in schablonenorientierter Sicht
►
►
Ausprägungen werden durch Klassen-Objekt-Assoziationen ausgedrückt
created-from ist die inverse Relation zu instance-of
►
DD-0Y3C:Ampel
<<instance-of>>
<<created-from>>
<<created-from>>
►
34
Der Prototyp wird vor Ausführung des Programms angelegt (im statischen
Speicher) und besitzt
.
eine Tabelle mit Methodenadressen im Codespeicher (die Methodentabelle).
Der Aufruf einer Methode erfolgt immer über die Methodentabelle des
Prototyps
.
Eine Menge von Attributwerten (Klassenattribute)
und einen Objekt-Extent (Objektmenge), eine Menge von Objekten
(vereinfacht als Liste realisiert), die alle Objekte der Klasse erreichbar macht
■
DD-0X5B:Ampel
visitLecture()
eat()
drinkBeer()
work()
sleep()
getName()
Um die 3 unterschiedlichen Sichtweisen auf Klassen zusammen behandeln
zu können, gehen wir im Folgenden von folgenden Annahmen aus:
Jede Klasse hat ein Prototyp-Objekt (eine Schablone)
■
<<created-from>>
giveLecture()
eat()
drink()
work()
sleep()
getName()
Wie sieht eine Klasse im Speicher
aus?
DD-0X5A:Ampel
Ampel
Student
Prof. Uwe Aßmann, Softwaretechnologie
►
<<instance-of>>
Professor
In einer Datenbank entspricht der Objekt-Extent der Relation, die Klasse dem
Schema
<<instance-of>>
Prof. Uwe Aßmann, Softwaretechnologie
35
Prof. Uwe Aßmann, Softwaretechnologie
36
Wie erzeugt man ein Objekt für eine
Klasse? (Verfeinerung)
►
zahler2 = new Steuerzahler(“Sandra Klug”, “ledig”);
►
Man kopiert den Prototyp in die Halde:
Wie erzeugt man ein Objekt für eine
Klasse? (Verfeinerung)
►
Man reserviert den Platz des Prototyps in der Halde
kopiert den Zeiger auf die Methodentabelle (Vorteil: Methodentabelle kann von
allen Objekten einer Klasse benutzt werden)
und füllt die Prototypattributwerte in den neuen Platz
■
■
■
Prototypen im
statischen Speicher
010
name:String == null
014
maritalStatus:String == null
018
methodTable:Method[]
pay()
Prof. Uwe Aßmann, Softwaretechnologie
018 methodTable:Method[]
Code-Speicher
(Methoden)
132 name:String
136 maritalStatus:String
37
140
prototype:Class
Prof. Uwe Aßmann, Softwaretechnologie
name:String == null
132
name:String
014
maritalStatus:String == null
136
maritalStatus:String
018
methodTable:Method[]
140
prototype:Class
extent:List(Object)
144
name:String
148
maritalStatus:String
152
taxnumber:int == 12940
156
prototype:Class
160
name:String
164
maritalStatus:String
168
prototype:Class
methodTable:Method[]
172
name:String
extent:List(Object)
176
maritalStatus:String
180
prototype:Class
184
name:String
188
maritalStatus:String
192
taxnumber:int == 12941
196
prototype:Class
030
taxnumber:int
034
methodTable:Method[]
038
***
extent:List(Object)
042
046
050
***
Prof. Uwe Aßmann, Softwaretechnologie
38
Klassennetze und Objektnetze
010
026
pay() {
....
}
fillIn() { .. }
store() { .. }
reread() { .. }
new() { .. }
Halde
(Objektspeicher)
►
Objekte und Klassen können zu Netzen verbunden werden:
■
■
***
Code-Speicher
(Methoden)
fillIn()
Der Objekt-Extent ist eine Liste der Objekte einer Klasse. Wir benötigen dazu
ein neues Attribut des Prototyps
022
Leo Rott
verh
Sandra Klug
ledig
pay()
Objekt-Extent im Speicher
►
010 name:String == null
014 maritalStatus:String == null
pay() {
....
}
fillIn() { .. }
store() { .. }
reread() { .. }
new() { .. }
fillIn()
Symboltabelle
(Stringspeicher)
Prototypen im
statischen Speicher
Stringspeicher
(Symboltabelle)
Leo Rott
verh
Sandra Klug
ledig
Ergebnis:
►
Klassen durch Assoziationen (gerichtete Pfeile)
Objekte durch Links (Zeiger, pointer, gerichtete Pfeile)
Klassennetze prägen Objektnetze, d.h. legen ihnen Obligationen auf
Child
mom
Mother
class Child {
...
Mother mom;
...
}
mom
tom:Child
jane:Mother
mom
Child tom = new Child();
tom.mom = jane;
...
tom.mom = null;
tom:Child
39
Prof. Uwe Aßmann, Softwaretechnologie
40
Mehrstellige Assoziationen
Invarianten von Assoziationen
►
►
Die Obligationen können aus Multiplizitäten für die Anzahl der Partner
bestehen (Kardinalitätsbeschränkung oder Invariante der Assoziation)
“Ein Kind kann höchstens eine Mutter haben”
►
Eine Mutter kann aber viele Kinder haben
Implementierung in Java durch integer-indizierbare Felder mit statisch bekannter
Obergrenze (arrays). Allgemeinere Realisierungen im Kapitel “Collections”.
■
Assoziationen und ihre Multiplizitäten prägen also die Gestalt der
Objektnetze.
class Mother {
0..*
...
Mother
Child
Child[] kid;
kid
...
}
►
class Child {
...
Mother mom;
...
}
0..1
Child
mom
Mother
jane:Mother
mom
tom:Child
jane:Mother
mom
Child tom = new Child();
tom.mom = jane;
...
tom.mom = null;
kid
kid
jane:Mother
tom:Child
kid[0]
jane:Mother
tom:Child
tom:Child
Mother jane = new Mother();
jane.kid[0] = tom;
...
jane.kid[1] = sally;
kid[1]
41
Prof. Uwe Aßmann, Softwaretechnologie
Prof. Uwe Aßmann, Softwaretechnologie
sally:Child
42
Programmierparadigmen
Objektorientierte Programmierung
►
Funktionale Programmierung:
■
Funktionsdefinition und -komposition, Rekursion
Kein Zustandsbegriff
fac(n) = if n = 0 then 1 else n * fac(n-1) end
■
►
Imperative Programmierung:
Steuerfluß: Anweisungsfolgen, Schleifen, Prozeduren
Variablen, Attribute (Zustandsbegriff)
k := n; r := 1; while k > 0 do r := r*k; k := k-1 end;
■
My guess is that object-oriented programming will be in
the 1980's what structured programming was in the 1970's.
Everyone will be in favor of it.
Every manufacturer will promote his products as supporting it.
Every manager will pay lip service to it.
Every programmer will practice it (differently!).
And no one will know just what it is ..."
■
►
Formallogische Axiomensysteme (Hornklauseln)
Fakten, Deduktionsregeln, Invarianten
■
kein Zustandsbegriff
At the end of the day, you have to
■
Resolution
put your data and operations
fac(0,1).
somewhere.
fac(n+1, r) :- fac(n, r1),
Martin Odersky
mult(n+1, r1, r).
■
■
Tim Rentsch (1982)
Softwaretechnologie, © Prof. Uwe Aßmann
Logische Programmierung:
43
Prof. Uwe Aßmann, Softwaretechnologie
44
Strukturparadigmen
►
Orthogonalität
Unstrukturierte Programmierung:
Lineare Folge von Befehlen, Sprüngen, Marken (spaghetti code)
k:=n; r:=1; M: if k<=0 goto E; r:=r*k; k:=k-1; goto M; E:...
■
►
Strukturiert
Modular
––
ML
Pascal
Modula-2
Ada
Strukturierte Programmierung:
Blöcke, Prozeduren, Fallunterscheidung, Schleifen
Ein Eingang, ein Ausgang für jeden Block
k := n; r := 1; while k > 0 do r := r*k; k := k-1 end;
Objektorientiert
■
■
►
Funktional
Modulare Programmierung:
Sammlung von Typdeklarationen und Prozeduren
Klare Schnittstellen zwischen Modulen
DEFINITION MODULE F; PROCEDURE fac(n:CARDINAL):CARDINAL; ...
■
■
►
Haskell
Imperativ
Java
C++
Objektorientierte Programmierung:
Kapselung von Daten und Operationen in Objekte
Klassen, Vererbung und Polymorphie
public class CombMath extends Number { int fac(int n) ...
■
45
Prof. Uwe Aßmann, Softwaretechnologie
––
Logisch
■
OWL
46
Prof. Uwe Aßmann, Softwaretechnologie
Kooperative Ausführung durch
parallele Objekte (Sequenzdiagramm)
Funktion und Daten
• Separation von Funktion und Daten
Zeit
12. Projektbesprechung
M. Huber
(Teiln.1)
...
P. Fischer
(Teiln. n)
Raum
R12
Neu
Kollision?
Funktionshierarchie
Kollision?
Datenbasis
Reservierung
• Integration von Funktion und Daten
vormerken
vormerken
►
In den Strukturparadigmen:
■
strukturiert:
■
modular: Modul = (grosse) Funktionsgruppe + lokale Daten
■
objektorientiert:
Prof. Uwe Aßmann, Softwaretechnologie
Separation von Funktion und Daten
Objekt = (kleine) Dateneinheit + lokale Funktionen
47
Kooperierende Objekte mit lokaler Datenhaltung
Einfacher Übergang zu Parallelverarbeitung und Verteilung
Prof. Uwe Aßmann, Softwaretechnologie
48
Objektorientierte
Programmiersprachen
Geschichte der OO-Programmierung
ALGOL
Simula
C
Smalltalk
C++
Eiffel
Pascal
UCSD
Pascal
LISP
BASIC
CLOS
Visual
Basic
Object
Pascal
(Delphi)
Ada-95
Scheme
Java
C#
49
Die Programmiersprache Java
►
Allan Kay: The Reactive Engine, Dissertation, Univ. Utah, 1969
►
Smalltalk: Allan Kay, Adele Goldberg, H. H. Ingalls,
Xerox Palo Alto Research Center (PARC), 1976-1980
►
C++: Bjarne Stroustrup, Bell Labs (New Jersey), 1984
►
Eiffel: Bertrand Meyer, 1988
►
Java: Ken Arnold, James Gosling, Sun Microsystems, 1995
►
C#: Anders Heijlsberg, Microsoft (auch Schöpfer von Turbo Pascal)
Prof. Uwe Aßmann, Softwaretechnologie
Vorläufer von Java: OAK (First Person Inc.), 1991-1992
» Betriebssystem/Sprache für Geräte, u.a. interaktives Fernsehen
■
►
Java ist relativ einfach und konzeptionell klar.
►
Java vermeidet “unsaubere” (gefährliche) Konzepte.
■
Strenges Typsystem
» Java Applets für das World Wide Web
■
Kein Zugriff auf Speicheradressen (im Unterschied zu C)
» 1996: Netscape Browser (2.0) Java-enabled
■
Automatische Speicherbereinigung
1995: HotJava Internet Browser
■
2005: Java 1.5 mit Generizität
■
Weiterentwicklungen:
►
Java ist unabhängig von Hardware und Betriebssystem.
■
» Java als Applikationsentwicklungssprache (Enterprise Java)
►
» Java zur Gerätesteuerung (Embedded Java)
►
» Java Smartcards
sogenanntes multi-threading
Java bietet die Wiederbenutzung von Klassenbibliotheken (Frameworks,
Rahmenwerken) an
■
51
Java Swing Library
Java ermöglicht nebenläufige Programme.
■
►
Java Bytecode in der Java Virtual Machine
Java ist angepaßt an moderne Benutzungsoberflächen.
■
» Java Beans, Enterprise Java Beans (Software-Komponenten)
Prof. Uwe Aßmann, Softwaretechnologie
50
Warum gerade Java?
Java™ - Geschichte:
■
Ole-Johan Dahl + Krysten Nygaard, Norwegen, 1967
Scala
Prof. Uwe Aßmann, Softwaretechnologie
►
Simula:
Ada-83
Self
Groovy ObjectTeams
►
z.B. Java Collection Framework
Prof. Uwe Aßmann, Softwaretechnologie
52
Objektorientierte Klassenbibliotheken
(Frameworks, Rahmenwerke)
►
Klassenbibliotheken sind vorgefertigte Mengen von Klassen, die in eigenen
Programmen (Anwendungen) benutzt werden können
■
Java Development Kit (JDK)
.
Collections, Swing, ...
Test-Klassenbibliothek Junit
■
Praktikumsklassenbibliothek SalesPoint
■
►
►
■
■
►
Eine Anwendung besteht nur zu einem kleinen Prozentsatz aus eigenem Code
(Wiederverwendung bringt Kostenersparnis)
53
Warum ist das alles wichtig?
Übung: Starte die JVM mit dem –verbose flag
Grosse Bibliothek benötigt grossen Einarbeitungsaufwand
Prof. Uwe Aßmann, Softwaretechnologie
54
The End
Anfangsfrage: Wie können wir die Welt möglichst einfach beschreiben?
Antwort: durch Objekte
■
■
►
JVM startet langsam. Beim Start lädt sie zuerst alle Klassen (dynamic class
loading), anstatt sie statisch zu einem ausführbaren Programm zu binden
■
►
Anders in C#!
Man muss eine gewisse Zeit investieren, um die Klassenbibliothek
kennenzulernen
Man muss eine Menge von Klassenbibliotheken kennen
Prof. Uwe Aßmann, Softwaretechnologie
►
Keine konforme Vererbung: Man kann bei der Wiederbenutzung von
Bibliotheksklassen Fehler machen und den Bibliothekscode invalidieren
Basisdatentypen (int, char, boolean, array) sind keine Objekte
Nachteil: Klassenbibliotheken sind komplexe Programmkomponenten.
■
►
►
Durch Vererbung kann eine Klasse aus einer Bibliothek angepasst werden
■
►
Probleme von Java
..und ihre Klassen, die sie abstrahieren
.
... die Beziehungen der Klassen (Vererbung, Assoziation)
.. ihre Verantwortlichkeiten
Daher bietet Objektorientierung für Anwendungen, die mit der realen Welt zu
tun haben, eine oftmals adäquate Entwicklungsmethodik an
■
■
Die die Software einfach, d.h. analog zur Welt organisiert
Und daher viele Probleme vermeidet und die Entwicklung erleichtert
Prof. Uwe Aßmann, Softwaretechnologie
55
Prof. Uwe Aßmann, Softwaretechnologie
56
Herunterladen