PTA_OO_Einfuehrung.pdf - PTA GmbH
PTA_OO_Einfuehrung.pdf - PTA GmbH
PTA_OO_Einfuehrung.pdf - PTA GmbH
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
seit 1969<br />
Beratung<br />
Organisation<br />
Softwareentwicklung<br />
Einführung Einführung in in die die Objektorientierung<br />
Objektorientierung
Schulung<br />
Einführung in die Objektorientierung<br />
Einführung<br />
• Objektorientierung betrifft alle Prozesse der Software-Entwicklung<br />
(Analyse, Design, Implementierung..).<br />
• Objekte bilden den Mittelpunkt der Modellierung.<br />
• Eine Vereinheitlichung der Modellierung erfolgte durch die Unified<br />
Modeling Language (UML).<br />
• Eine Vereinheitlichung des Vorgehensmodells erfolgte durch den<br />
Unified Process (UP).<br />
• Sprachen sind: C++, Java, Smalltalk, Eiffel, Forté ...<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 2
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
• Das <strong>OO</strong>-Vorgehensmodell ist der Unified Process.<br />
• Drei wesentliche Säulen kennzeichnen den UP:<br />
– Use-Case getriebene Entwicklung.<br />
– Architekturzentrierte Entwicklung.<br />
– Iterative und inkrementelle Entwicklung.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 3
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Use Cases<br />
• Use Case Modelle sind Kernbestandteil des UP.<br />
• Use Case Modelle beruhen auf zwei Komponenten:<br />
– Use Case (Anwendungsfall): „A use case specifies a sequence<br />
of actions, including variants, that the system performs and that<br />
yields an observable result of value to a particular actor.“<br />
(Jacobson 1999, S. 41)<br />
– Actor (Akteur): „An actor is someone or something outside the<br />
system that interacts with the system.“(Kruchten 1998, S. 94)<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 4
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Use Cases<br />
• Use Cases beinhalten die Beschreibung des Ablaufs eines<br />
Geschäftsprozesses, einer Anwendungsfunktion usw. aus Sicht der<br />
Akteure.<br />
• Akteure sind Benutzergruppen (Rollen), die einen Ablauf im System<br />
initiieren und das Ergebnis der Aktion zurückerhalten.<br />
• In der UML werden Use Case Diagramme genutzt, um diese<br />
Anwendungsfälle zu spezifizieren.<br />
• Die nachfolgenden Folien zeigen Beispiele für diese Diagramme:<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 5
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
• Elemente eines Use Case-Modells<br />
– Akteure<br />
– Use Cases<br />
– Beziehungen (extends, includes)<br />
User1<br />
Use Case 1<br />
Use Case 2<br />
<br />
<br />
Use Case 3<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 6<br />
User2
Schulung<br />
• Beispiel für Use Case Modell:<br />
Administrator<br />
Fahrplanbearbeiter<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Administriere Zugdaten<br />
Verwalte Fahrpläne<br />
<br />
<br />
Speichere Daten<br />
<br />
Verwalte Trassenbestellungen<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 7
Schulung<br />
• Beispiel für Use Case-Modell:<br />
Bankkunde<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Use Cases<br />
Geld abheben<br />
Geld einzahlen<br />
Geld transferieren<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 8
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Use Cases<br />
• Beispiel für Use Case-Beschreibung:<br />
• Anwendungsfall Geld abheben<br />
– Der Bankkunde identifiziert sich gegenüber dem System.<br />
– Der Bankkunde wählt das Konto aus, von dem er Geld abheben<br />
will und gibt den abzuhebenden Betrag ein.<br />
– Das System zieht den Betrag von dem angegebenen Konto ab<br />
und gibt das Geld aus.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 9
Schulung<br />
• Aufgabe 1:<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Use Cases<br />
– Entwerfen Sie die Akteure und Anwendungsfälle für die Beispiel-<br />
Anwendung Arbeitsgruppen-Zuteilung. Beschreiben Sie jeden<br />
Anwendungsfall kurz.<br />
– Nutzen Sie Rational Rose zur Modellierung.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 10
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Architektur<br />
• Eine Software-Architektur beinhaltet:<br />
– Entscheidungen über die Organisation des Systems,<br />
– Struktur und Verhalten der wichtigsten Elemente des Systems,<br />
– funktionale und Performance-Aspekte, ‚ästhetische‘<br />
Entscheidungen usw.<br />
• Die Architektur basiert auf den wichtigsten Anwendungsfällen.<br />
• „Architecture is what remains when you cannot take away any more<br />
things and still understand the system and explain how it works“<br />
(Kruchten 1998, S. 78)<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 11
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Architektur<br />
• Eine Software-Architektur wird repräsentiert durch:<br />
– ‚Multiple Views‘ oder<br />
– ‚4 + 1 view model of architecture‘ (Kruchten):<br />
Logical View<br />
Use-Case View<br />
Implementation View<br />
Process View Deployment View<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 12
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Iterativ und inkrementell<br />
• UP unterscheidet zwei Dimensionen:<br />
– Prozesse (logische Aktivitäten, Workflows).<br />
– Phasen (zeitlich, Lebenszyklus).<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 13
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Iterativ und inkrementell<br />
• „A process describes who is doing what, how and when“ (Kruchten<br />
1998, S. 35)<br />
• Daraus leiten sich folgende Modellelemente ab:<br />
– Workers: ‚Wer tut etwas‘.<br />
– Activities: ,Wie wird etwas getan‘.<br />
– Artifacts: ‚Was wird getan - das Produkt‘.<br />
– Workflows: ‚Wann wird etwas getan‘.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 14
Schulung<br />
• Worker können sein:<br />
– System Analyst<br />
– Designer<br />
– Project Manager<br />
– Architect<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Iterativ und inkrementell<br />
– ...<br />
• Worker sind Rollen, beschreiben ein Bündel von Verantwortlichkeiten.<br />
• Der gleiche Projektmitarbeiter kann mehrere Worker darstellen.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 15
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Iterativ und inkrementell<br />
• Activities sind Operationen, die ein Worker ausführen muss, um ein<br />
Artifact zu erstellen.<br />
• Beispiele sind:<br />
– Planen einer Iteration.<br />
– Ermitteln von Anwendungsfällen und Akteuren.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 16
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Iterativ und inkrementell<br />
• Workflows beschreiben eine Sequenz von Activities, die ein Artifact<br />
hervorbringen.<br />
• Workflow Analysis & Design<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 17
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Iterativ und inkrementell<br />
• Der UP ist eine Alternative zum 'klassischen' Wasserfallmodell der<br />
Entwicklung:<br />
System feasibility<br />
Validation<br />
Software plans and<br />
requirements Validation<br />
Product design<br />
Verification<br />
Detailed design<br />
Verification<br />
Code<br />
Unit test<br />
Integration<br />
Product verification<br />
Implementation<br />
System test<br />
Operation and<br />
maintanence Revalidation<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 18
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Iterativ und inkrementell<br />
• Das Wasserfallmodell beruht auf falschen Annahmen:<br />
• ‚Einfrieren der Anforderungen‘ - aber<br />
– Probleme und Benutzerwünsche ändern sich,<br />
– Technologien ändern sich,<br />
– vollständige Spezifikationen sind nicht möglich.<br />
• ‚Richtiges Design, dann realisieren‘ - aber<br />
– Prüfung der ‚Richtigkeit‘ des Designs (noch) nicht möglich.<br />
– Erfahrung zeigt, dass Design oft fehlerhaft.<br />
– Risiken sind schwer abzuschätzen ohne Realisierung.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 19
Schulung<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Iterativ und inkrementell<br />
• Lösung durch UP:<br />
– Pro Phase kann es mehrere Iterationen geben.<br />
– alle Prozesse werden (in unterschiedlicher Ausprägung) je<br />
Iteration durchgeführt.<br />
– Eine Iteration wird mit einem Internal Release beendet.<br />
– Das erstmalige Durchlaufen aller Phasen ist der Development<br />
Cycle.<br />
– Jeder weitere Durchlauf ist der Evolution Cycle.<br />
– Ergebnis eines jeden Durchlaufs: ein Produkt mit mehreren<br />
Artifacts und einem Final Release.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 20
Schulung<br />
• Mehrere Iterationen pro Phase<br />
Inception Elaboration<br />
Requirements<br />
Analysis<br />
Design<br />
Coding<br />
Unit Testing<br />
Integration<br />
Test<br />
Einführung in die Objektorientierung<br />
Vorgehensmodell<br />
Iterativ und inkrementell<br />
Eine Iteration<br />
Requirements<br />
Analysis<br />
Design<br />
Zeit<br />
Coding<br />
Unit Testing<br />
Integration<br />
Test<br />
Requirements<br />
Analysis<br />
Design<br />
Coding<br />
Unit Testing<br />
Integration<br />
Test<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 21
Schulung<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
• Bei daten- bzw. funktionsorientierter Modellierung werden Daten<br />
und Funktionen getrennt behandelt.<br />
D a t e n F u n k t io n e n<br />
S c h ü le r<br />
_ _ _ _ _ _ _ _ _ _ _<br />
n a m e<br />
a d re s s e<br />
k la s s e<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 22<br />
1<br />
w ä h le<br />
A G<br />
M in i-S p e c<br />
1 w ä h le A G<br />
A rb e its g ru p p e<br />
W u n s c h<br />
A rb e its g ru p p e<br />
E s w e rd e n a lle A rb e its g ru p p e n<br />
z u r A u s w a h l a n g e b o te n .<br />
A u s d ie s e n A rb e its g ru p p e n<br />
w e rd e n b is z u 3 A rb e its g ru p p e n<br />
a ls W u n s c h -A g s a u s g e w ä h lt.<br />
....
Schulung<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
• Bei objektorientierter Modellierung werden Daten und Funktionen<br />
als Einheit behandelt.<br />
• Ein Objekt ist immer eine Einheit von Daten und Funktionen.<br />
• Ein Objekt hat einen Zustand (Daten) und ein Verhalten<br />
(Funktionen).<br />
• Beispiel: ein Auto hat bestimmte Maße, bestimmte Eigenschaften,<br />
aber auch bestimmte Verhaltensweisen: Es kann bremsen,<br />
beschleunigen usw.<br />
• Beispiel: Ein Schüler hat bestimmte Eigenschaften wie einen<br />
Nachnamen, einen Vornamen usw. Und er zeigt bestimmte<br />
Verhaltensweisen: er wählt bestimmte Fächer, bestimmte<br />
Arbeitsgruppen usw.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 23
Schulung<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
• Eigenschaften (Attribute) eines Objekts und seine Funktionen<br />
(Operationen, Methoden) werden in der UML wie folgt dargestellt<br />
(Beispiel Schueler):<br />
einSchueler : Schueler<br />
nachname = Meier<br />
vorname = Klaus<br />
wunschAGs = #(Deutsch Mathe)<br />
waehleAG(eineArbeitsgruppe : Arbeitsgruppe)<br />
Name des Objekts<br />
Eigenschaften<br />
Attribute<br />
Operationen<br />
Methoden<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 24
Schulung<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
• Attribute und Operationen eines Objekts können gekapselt werden.<br />
• Kapselung bedeutet: bestimmte Operationen und Attribute sind<br />
öffentlich, andere privat; die letzteren können von außen nicht<br />
manipuliert werden.<br />
• Dabei werden Schnittstelle nach außen und Implementierung<br />
voneinander getrennt; Implementierungsdetails werden vor dem<br />
Nutzer der Schnittstelle verborgen.<br />
• Vergleichbare Konzepte in der daten- bzw. funktionsorientierten<br />
Modellierung sind: Modularisierung, abstrakte Datentypen,<br />
information hiding.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 25
Schulung<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
• Klassen sind Verallgemeinerungen gleichartiger Objekte<br />
(Klassifizierung)<br />
• Gemäß UML werden Klassen wie folgt dargestellt:<br />
a ttribut1<br />
a ttribut2<br />
Kla s s e 1<br />
ope ra tion1 () : String<br />
ope ra tion2 (a rgum e nt1 : String = '') : Kla s s e 2<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 26
Schulung<br />
• Beispiel für Klasse: Kreis<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
Kre is<br />
ra d iu s : Flo a t<br />
m itte lp u nkt : P o in t = (1 0,1 0)<br />
a n ze ig e n ()<br />
e n tfe rn e n ()<br />
s e tP o s itio n (p o s : P o in t = (10,1 0))<br />
s e tR a d iu s (n e u e rR a d iu s : Flo a t = 0)<br />
ra d iu s > 0<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 27
Schulung<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
• Beispiel für Klassen: Schueler in Arbeitsgruppen-Zuteilung<br />
Schueler<br />
nachname : String<br />
v orname : String<br />
wunschAGs : Collection<br />
waehleAG(eineArbeitsgruppe : Arbeitsgruppe)<br />
Klassenname<br />
Operationen<br />
Methoden<br />
Eigenschaften<br />
Attribute<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 28
Schulung<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
• Klassen stellen Baupläne für konkrete Objekte dar.<br />
• Das Erzeugen konkreter Objekte nennt man Instanziierung oder<br />
Exemplarbildung.<br />
• In den jeweiligen Programmiersprachen stehen Mechanismen zur<br />
Verfügung, um Instanzen einer Klasse zu erzeugen.<br />
• In Smalltalk gibt es z.B. eine Klassenmethode new, die an die<br />
Klasse geschickt wird und eine neue Instanz zurückliefert.<br />
• In C++ und Java gibt es sog. Konstruktoren, die neue Instanzen zur<br />
Verfügung stellen.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 29
Schulung<br />
• Beispiel in Smalltalk:<br />
| einSchueler |<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
einSchueler := Schueler new. "Erzeuge neues Exemplar von Schueler"<br />
einSchueler name: 'Klaus‘<br />
• Beispiel in Java<br />
public static void main(String[] args)<br />
{ //Erzeuge Exemplar von Schueler<br />
}<br />
Schueler einSchueler = new Schueler();<br />
einSchueler.setNachname("Meier“);<br />
...<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 30
Schulung<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
• Die Instanziierungsmechanismen können individuell angepasst<br />
werden.<br />
• z.B. werden Konstruktoren in Java genutzt, um Objekte zu<br />
initialisieren.<br />
• Beispiel: Konstruktor für Schueler<br />
public Schueler(Integer id, String nachname, String klasse)<br />
{<br />
this.id = id;<br />
this.nachname = nachname;<br />
this.klasse = klasse;<br />
}<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 31
Schulung<br />
Einführung in die Objektorientierung<br />
Objekte und Klassen<br />
• Der Begriff Typ bezeichnet ebenfalls eine Verallgemeinerung<br />
gleichartiger Objekte.<br />
• Typ meint aber nur die allgemeinen Charakteristika dieser Objekte,<br />
i.B. deren Schnittstelle nach außen, nicht aber die Implementierungsdetails.<br />
• Generell gilt: Eine Klasse ist die Implementierung eines Typs.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 32
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Attribute legen die Struktur und die Eigenschaften eines Objekts<br />
fest.<br />
• Attribute können jeder Instanz oder der Klasse zugeordnet sein.<br />
• Attribute einer Instanz sind Datenelemente, die in jedem Objekt<br />
einer Klasse vorhanden sind und dort mit einem individuellen Wert<br />
belegt werden können.(Instanzvariablen)<br />
• Attribute einer Klasse sind Datenelemente, deren Wert allen<br />
Instanzen einer Klasse zukommt. (Klassenvariablen, static<br />
Variablen)<br />
• Ein Attribut hat einen Namen, einen Typ und kann Merkmale und<br />
Zusicherungen enthalten.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 33
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Attribute werden in der UML nach folgender Syntax vereinbart:<br />
attribut : Klasse {Zusicherung} {Merkmal}<br />
• Mit '+' oder '-' vor dem Attribut-Namen wird deklariert, ob es sich um<br />
ein public oder private Attribut handelt.<br />
• Beispiel:<br />
+ rechnungsDatum : Date = Date today<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 34
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Beispiel: Attribute mit Zusicherung<br />
Kreis<br />
radius : Integer<br />
mittelpunkt : Point = (10,10)<br />
radius > 0<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 35
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Beispiel: Attribute von Schueler<br />
Schueler<br />
nachname : String<br />
vorname : String<br />
wunschAGs : Collection<br />
waehleAG(eineArbeitsgruppe : Arbeitsgruppe)<br />
nachname ist vom Typ String<br />
vorname ist vom Typ String<br />
wunschAGs ist Collection mit Objekten<br />
vom Typ Arbeitsgruppe<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 36
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Erläuterungen zu dem Beispiel:<br />
• Typen können skalar sein: char, float, int usw.<br />
• Typen können auch durch Klassen repräsentiert werden: z.B.<br />
eineCollection ist ein Exemplar der Klasse OrderedCollection (in<br />
Smalltalk) bzw. von Vector, Set oder List (in Java).<br />
• Zusicherungen sind Constraints für Attribute, Operationen, Klassen<br />
usw.; in der UML werden sie gewöhnlich als Notizen dargestellt.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 37
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Operationen sind Dienstleistungen, die von einem Objekt<br />
angefordert werden können.<br />
• Operationen sind charakterisiert durch ihre Signatur:<br />
– Operationsname<br />
– Parameter, Argumente<br />
– ggf. Rückgabewert<br />
• Methoden sind Implementierungen einer Operation.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 38
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Operationen werden in der UML nach folgender Syntax vereinbart:<br />
operationsname(argument : Argumenttyp = Initialwert, ...) :<br />
Rückgabetyp {Merkmal} {Zusicherung}<br />
• Mit '+' oder '-' vor dem Operations-Namen wird deklariert, ob es sich<br />
um eine public oder private Operation handelt.<br />
• Beispiel:<br />
+ setPosition(x : Integer = 1, y : Integer = 1) : Boolean {abstrakt} {(x<br />
> 0) and ( y > 0 )}<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 39
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Beispiel Operationen: Schueler<br />
Schueler<br />
nachname : String<br />
vorname : String<br />
wunschAGs : Collection<br />
waehleAG(eineArbeitsgruppe : Arbeitsgruppe)<br />
wunschAGs() : Collection<br />
public Vector wunschAGs()<br />
{ return wunschAGs; }<br />
public void waehleAG(Arbeitsgruppe eineArbeitsgruppe)<br />
{ wunschAGs. add( eineArbeitsgruppe);}<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 40
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Objekte kommunizieren miteinander indem sie Nachrichten<br />
(Messages) austauschen.<br />
• Eine Nachricht besteht aus einem Selektor (einem Namen) und<br />
ggbf. einem oder mehreren Argumenten.<br />
• Die Nachricht selektiert eine Operation (gleichen Namens) beim<br />
Objekt, an das die Nachricht geschickt wird.<br />
• Das sendende Objekt erhält ggbf. ein Ergebnis zurück<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 41
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Beispiel in Smalltalk:<br />
vorhandeneAGs<br />
| ag ags |<br />
ag := Arbeitsgruppe new.<br />
ags := ag alleArbeitsgruppen.<br />
^ags<br />
• Beispiel in Java:<br />
private Vector vorhandeneAGs()<br />
{<br />
Arbeitsgruppe ag = new Arbeitsgruppe();<br />
Vector alleArbeitsgruppen = ag.alleArbeitsgruppen();<br />
return alleArbeitsgruppen;<br />
}<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 42
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• In der UML kann das Senden von Nachrichten in einem Sequenzoder<br />
Interaktionsdiagramm dargestellt werden:<br />
• Beispiel für Sequenzdiagramm<br />
Starte Zuteilung<br />
fuer alle Schueler<br />
Ermittle WunschAGs<br />
....<br />
starter : Starter<br />
starteZuteilung<br />
zuteilung :<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 43<br />
Zuteilung<br />
wunschAGs( )<br />
einSchueler :<br />
Schueler
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Erläuterungen zum Sequenzdiagramm<br />
Beschreibung<br />
des Ablaufs<br />
Starte Zuteilung<br />
fuer alle Schueler<br />
Ermittle WunschAGs<br />
....<br />
starter : Starter :Zuteilung<br />
: :<br />
starteZuteilung<br />
Lebenslinie<br />
des Objekts<br />
Nachricht<br />
Return<br />
Objekt und Klasse<br />
Beliebiges Objekt<br />
einer Klasse<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 44
Schulung<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
• Beispiel für Sequenzdiagramm<br />
: Bankkunde<br />
insertCard( )<br />
specifyPinCode( )<br />
: CardReader : Display : KeyPad<br />
showRequest( )<br />
cardInserted(Integer)<br />
askForPinCode( )<br />
pinCode(String)<br />
: Client<br />
Manager<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 45
Schulung<br />
• Aufgabe 2:<br />
Einführung in die Objektorientierung<br />
Attribute, Operationen und Nachrichten<br />
– Modellieren Sie die Attribute und Operationen aller Objekte der<br />
Beispielapplikation Arbeitsgruppen-Zuteilung.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 46
Schulung<br />
Einführung in die Objektorientierung<br />
Beziehungen zwischen Objekten<br />
• Permanente Beziehungen zwischen Objekten können vor allem sein<br />
– Assoziation<br />
– Aggregation/Komposition<br />
– Vererbung<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 47
Schulung<br />
Einführung in die Objektorientierung<br />
Beziehungen zwischen Objekten<br />
• Assoziationen sind permanente Beziehungen zwischen Objekten,<br />
die einen Namen tragen können.<br />
• Assoziationen werden als Linie zwischen zwei Klassen dargestellt.<br />
• Auf jeder Seite der Assoziation wird die Multiplizität (Kardinalität)<br />
eingetragen; sie gibt an, mit wie vielen Objekten ein Objekt<br />
assoziiert sein kann.<br />
• Auf jeder Seite der Assoziation kann eine Rolle definiert werden, die<br />
die Funktion des jeweiligen Objekts in der Beziehung angibt.<br />
• Eine Assoziation kann unidirektional (gerichtet) sein; dies wird durch<br />
einen Pfeil auf einer Seite der Linie ausgedrückt. Die Assoziation ist<br />
dann nur in diese Richtung navigierbar.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 48
Schulung<br />
Einführung in die Objektorientierung<br />
Beziehungen zwischen Objekten<br />
• Beispiel Assoziation: Schueler - Arbeitsgruppe<br />
Schueler<br />
nachname : String<br />
vorname : String<br />
wunschAGs : Collection<br />
waehleAG()<br />
wunschAGs()<br />
+Entscheider<br />
0..*<br />
bevorzugt<br />
+WunschAG<br />
Arbeitsgruppe<br />
name : String<br />
beschreibung : String<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 49<br />
1..*
Schulung<br />
• Erläuterungen zum Beispiel:<br />
Einführung in die Objektorientierung<br />
Beziehungen zwischen Objekten<br />
– Die Implementierung erfolgt in aller Regel dadurch, dass auf<br />
einer oder auf beiden Seiten der Assoziation Attribute<br />
vorgesehen werden, die die Objekte aufnehmen können.<br />
– Im Beispiel existiert das Attribut wunschAGs, das alle Exemplare<br />
des Typs Arbeitsgruppe aufnimmt.<br />
– Umgekehrt könnte das Attribut schueler in der Arbeitsgruppe den<br />
zugeordneten Schüler halten.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 50
Schulung<br />
Einführung in die Objektorientierung<br />
Beziehungen zwischen Objekten<br />
• Eine Aggregation ist eine permanente Beziehung zwischen<br />
Objekten, die eine Teile-Ganzes-Hierarchie bilden (‚ist-Teil-von‘,<br />
‚besteht aus‘, ‚setzt sich zusammen aus‘).<br />
• Beispiele: Ein Auto besteht aus Rädern, dem Motor, dem Gehäuse;<br />
ein Unternehmen besteht aus Abteilungen, Abteilungen bestehen<br />
aus Gruppen usw.<br />
• Ist ein Teil existenzabhängig vom Ganzen, handelt es sich um eine<br />
Komposition.<br />
• Existenzabhängigkeit bedeutet, dass die Teile nicht ohne das Ganze<br />
existieren können (Beispiel: Rechnungspositionen machen ohne<br />
Rechnungskopf keinen Sinn.)<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 51
Schulung<br />
Einführung in die Objektorientierung<br />
Beziehungen zwischen Objekten<br />
• Beispiel Aggregation: Zuteilung - Arbeitsgruppe - Schueler<br />
Arbeitsgruppe<br />
name : String<br />
beschreibung : String<br />
Zuteilung<br />
agSchuelerZuteilung : Dictionary<br />
teileZu()<br />
1..*<br />
0..1<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 52<br />
0..1<br />
1..*<br />
Schueler<br />
nachname : String<br />
vorname : String<br />
wunschAGs : Collection<br />
waehleAG()<br />
wunschAGs()
Schulung<br />
Einführung in die Objektorientierung<br />
Beziehungen zwischen Objekten<br />
• Erläuterungen zum Beispiel:<br />
– Die Zuteilung kann in Form eines Dictionaries (Map) modelliert<br />
werden, das zu jeder Arbeitsgruppe die zugeordneten Schüler<br />
enthält.<br />
– Arbeitsgruppe(key) Collection of: Schueler (value)<br />
eineArbeitsgruppe('Mathe') #(einSchueler('Meier') einSchueler('Müller') einSchueler('Schulz'))<br />
eineArbeitsgruppe('Deutsch') #(einSchueler('Vogel') einSchueler('Taube'))<br />
– In diesem Fall existieren Aggregationen zu den Objekten<br />
Schueler und Arbeitsgruppe.<br />
– Schueler und Arbeitsgruppe werden nicht gelöscht, wenn die<br />
Zuordnung gelöscht wird (keine Existenzabhängigkeit!)<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 53
Schulung<br />
• Aufgabe 3:<br />
Einführung in die Objektorientierung<br />
Beziehungen zwischen Objekten<br />
– Entwerfen Sie ein allgemeines Klassenmodell für die<br />
Beispielapplikation Arbeitsgruppen-Zuteilung.<br />
– Entwerfen Sie ein grobes Modell für den Zuteilungs-Algorithmus.<br />
Stellen Sie dies in Form eines Sequenz-Diagramms dar.<br />
– Entwerfen Sie ein Klassendiagramm für die Arbeitgeber-<br />
Arbeitnehmer-Beziehung.<br />
– Entwerfen Sie ein Klassendiagramm für ein Unternehmen, das<br />
aus verschiedenen Firmen und Abteilungen besteht.<br />
– Entwerfen Sie das Klassendiagramm für eine Auftragsabwicklung,<br />
in der Kunden, Aufträge, Auftragspositionen und –<br />
unterpositionen vorkommen.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 54
Schulung<br />
Einführung in die Objektorientierung<br />
Vererbung<br />
• Die Vererbung basiert auf einer Generalisierungs-/Spezialisierungsbeziehung.<br />
• Allgemeinere Attribute und Operationen werden in Oberklassen,<br />
speziellere in Unterklassen modelliert.<br />
• Die Eigenschaften der Oberklassen werden an Unterklassen<br />
vererbt.<br />
• Das Kriterium der Spezialisierung wird durch einen Diskriminator<br />
ausgedrückt.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 55
Schulung<br />
Einführung in die Objektorientierung<br />
Vererbung<br />
• Beispiel Vererbung: Person - Lehrer - Schueler<br />
Schueler<br />
wunschAGs : Collection<br />
klasse : Schulklasse<br />
Person<br />
nachname : String<br />
vorname : String<br />
id : Integer<br />
vorname() : String<br />
setzeVorname(einVorname : String)<br />
nachname() : String<br />
setzeNachname(einNachname : String)<br />
id() : Integer<br />
setzeId(eineId : Integer)<br />
<br />
Typ<br />
waehleAG(eineArbeitsgruppe : Arbeitsgruppe)<br />
wunschAGs() : Collection<br />
setzeWunschAGs(wunschAGs : Collection)<br />
klasse() : Schulklasse<br />
setzeKlasse(eineSchulklasse : Schulklasse)<br />
<br />
Lehrer<br />
funktion : String<br />
funktion() : String<br />
setzeFunktion(eineFunktion : String)<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 56<br />
Typ
Schulung<br />
Einführung in die Objektorientierung<br />
Vererbung<br />
• Private Attribute bzw. Operationen sind nur innerhalb der Klasse<br />
verfügbar.<br />
• Werden Attribute oder Operationen als protected definiert, so sind<br />
sie in der Klasse und in den Unterklassen ansprechbar.<br />
• Werden Attribute oder Operationen als public vereinbart, sind sie<br />
von jeder Klasse nutzbar.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 57
Schulung<br />
Einführung in die Objektorientierung<br />
Vererbung<br />
• Beispiel Vererbung: Person - Lehrer - Schueler<br />
einSchueler<br />
nachname: 'Meier' "in Klasse Person"<br />
vorname: 'Klaus' "in Klasse Person"<br />
klasse: '4e' "in Klasse Schueler"<br />
wunschAGs:<br />
#( eineArbeitsgruppe('Mathe') eineArbeitsgruppe('Deutsch')) "in Klasse Schueler"<br />
• Sendet man an das Objekt einSchueler die Nachricht nachname(),<br />
so wird der Wert 'Meier' selektiert, obwohl das Attribut nachname<br />
und die Operation nachname() nicht in der Klasse Schueler,<br />
sondern in der Klasse Person vereinbart sind.<br />
• Die Operation nachname() wird vererbt und ist in der Instanz<br />
einSchueler verfügbar.<br />
• Der Wert ‚Meier‘ ist im Kontext der Instanz einSchueler gespeichert.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 58
Schulung<br />
Einführung in die Objektorientierung<br />
Vererbung<br />
• Es muss zwischen Einfach- und Mehrfachvererbung unterschieden<br />
werden:<br />
Einfach-Vererbung Mehrfach-Vererbung<br />
A<br />
B<br />
(AB)<br />
C<br />
(AC)<br />
E<br />
(AE)<br />
D<br />
(ACD)<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 59<br />
A<br />
B<br />
(AB)<br />
C<br />
(AFC)<br />
E<br />
(AE)<br />
F<br />
D<br />
(AFCD)
Schulung<br />
Einführung in die Objektorientierung<br />
Vererbung<br />
• Man muss zwischen Implementierungs- und Schnittstellenvererbung<br />
unterscheiden.<br />
• Bei Implementierungsvererbung können Attribute und Operationen<br />
einer Oberklasse von Unterklassen direkt genutzt werden.<br />
• Bei Schnittstellenvererbung definiert das Interface nur die<br />
allgemeine Signatur von Operationen; die implementierende Klasse<br />
muss die spezifizierten Operationen implementieren.<br />
• Diese Signatur von Operationen stellt für die implementierende<br />
Klasse eine Schnittstelle (Interface) dar.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 60
Schulung<br />
Einführung in die Objektorientierung<br />
Vererbung<br />
• Beispiel Schnittstellenvererbung: Person - Lehrer - Schueler<br />
Schueler1<br />
vorname : String<br />
nachname : String<br />
wunschAGs : Collection<br />
klasse : Schulklasse<br />
vorname() : String<br />
setzeVorname(einVorname : String)<br />
nachname() : String<br />
setzeNachname(einNachname : String)<br />
wunschAGs() : Collection<br />
klasse() : Schulklasse<br />
waehleAG(eineArbeitsgruppe : Arbeitsgruppe)<br />
setzeKlasse(eineKlasse : Schulklasse)<br />
<br />
AbstraktePerson<br />
vorname() : String<br />
setzeVorname(einVorname : String)<br />
nachname() : String<br />
setzeNachname(einNachname : String)<br />
Lehrer1<br />
vorname : String<br />
nachname : String<br />
funktion : String<br />
vorname() : String<br />
setzeVorname(einVorname : String)<br />
nachname() : String<br />
setzeNachname(einNachname : String)<br />
funktion() : String<br />
setzeFunktion(eineFunktion : String)<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 61
Schulung<br />
• Aufgabe 4:<br />
Einführung in die Objektorientierung<br />
Vererbung<br />
– Entwerfen Sie ein Klassendiagramm für die Beziehung zwischen<br />
verschiedenen Typen von Fahrzeugen. Der Diskriminator soll im<br />
einen Fall die Antriebsart, im zweiten Fall das Fortbewegungsmedium<br />
(Luft, Wasser usw.) sein.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 62
Schulung<br />
Einführung in die Objektorientierung<br />
Polymorphie<br />
• Polymorphie (Vielförmigkeit) bedeutet, dass Operationen gleichen<br />
Namens in unterschiedlichen Klassen unterschiedliches Verhalten<br />
zeigen, also unterschiedlich implementiert sein können.<br />
• Eine Variante der Polymorphie besteht in der Variation der Schnittstelle<br />
von Operationen: der Operationsname ist gleich, die Struktur<br />
der Argumente ist unterschiedlich.<br />
• Beispiel:<br />
waehleAG(eineArbeitsgruppe : Arbeitsgruppe)<br />
waehleAG(eineCollection : Collection)<br />
• In diesem Fall spricht man von Überladen (Overloading) von<br />
Operationen<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 63
Schulung<br />
Einführung in die Objektorientierung<br />
Polymorphie<br />
• Die Mächtigkeit der Polymorphie zeigt sich vor allem in Verbindung<br />
mit der Vererbung:<br />
• Operationen werden in Oberklassen abstrakt vereinbart oder<br />
implementiert; in der Unterklasse wird die Operation aber<br />
überschrieben.<br />
• Dadurch wird erreicht, dass gleichnamige Operationen in verschiedenen<br />
Klassen einer Klassenhierarchie unterschiedliche<br />
Ergebnisse liefern.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 64
Schulung<br />
Einführung in die Objektorientierung<br />
Polymorphie<br />
• Beispiel Polymorphie: Person - Lehrer - Schueler<br />
<br />
PersonAllgemein<br />
vorname : String<br />
nachname : String<br />
vorname() : String<br />
setzeVorname(einVorname : String)<br />
nachname() : String<br />
setzeNachname(einNachname : String)<br />
istGleich(einePerson : Person) : Boolean<br />
fachSchluessel() : String<br />
<br />
typ<br />
Schueler1<br />
wunschAGs : Collection<br />
klasse : Schulklasse<br />
wunschAGs() : Collection<br />
klasse() : Schulklasse<br />
waehleAG(eineArbeitsgruppe : Arbeitsgruppe)<br />
setzeKlasse(eineKlasse : Schulklasse)<br />
fachSchluessel() : String<br />
fachSchluessel<br />
return nachname + vorname + klasse<br />
fachSchluessel<br />
return null<br />
istGleich: einePerson<br />
fachSchluessel == einePerson.fachSchluessel<br />
<br />
typ<br />
Lehrer1<br />
funktion : String<br />
funktion() : String<br />
setzeFunktion(eineFunktion : String)<br />
fachSchluessel() : String<br />
fachSchluessel<br />
return nachname + vorname + funktion<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 65
Schulung<br />
Einführung in die Objektorientierung<br />
Polymorphie<br />
• Beispiel: Nutzung Polymorphie in Java<br />
Schueler s1 = new Schueler();<br />
s1.setId(new Integer(1));<br />
s1.setVorname("Klaus");<br />
s1.setNachname("Meier");<br />
s1.setKlasse("Klasse1");<br />
Schueler s2 = new Schueler();<br />
s2.setId(new Integer(2));<br />
s2.setVorname("Klaus");<br />
s2.setNachname("Meier");<br />
s2.setKlasse("Klasse2");<br />
s2.istGleich(s1); // liefert false, da Attribut ‚Klasse‘ unterschiedlich.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 66
Schulung<br />
• Erläuterungen zum Beispiel:<br />
Einführung in die Objektorientierung<br />
Polymorphie<br />
– Die Operation fachschluessel() ist in Person abstrakt vereinbart.<br />
– In Schueler und Lehrer ist diese Operation jeweils unterschiedlich<br />
implementiert.<br />
– Sie liefert den Inhalt der Attribute, die das jeweilige Objekt aus<br />
fachlicher Sicht eindeutig definieren.<br />
– Dadurch kann z.B. eine Operation istGleich() in der Oberklasse<br />
generisch implementiert werden.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 67
Schulung<br />
Einführung in die Objektorientierung<br />
Polymorphie<br />
• Erläuterungen zum Beispiel (Fortsetzung):<br />
– istGleich(einePerson : Person) wird an das jeweils konkrete<br />
Objekt (Schueler oder Lehrer) geschickt.<br />
– Das übergebene Argument ist ebenfalls eine Instanz von<br />
Schueler oder Lehrer.<br />
– Die Prüfung referenziert das jeweils konkrete Objekt und<br />
vergleicht über die Methode fachSchluessel mit dem<br />
übergebenen Objekt.<br />
– Das Ergebnis der Prüfung ist entweder true oder false.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 68
Schulung<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
• Persistenz bedeutet: Speicherung von Objekten, um ihr Weiterleben<br />
nach Beendigung des Programms zu sichern.<br />
• Die Speicherung kann erfolgen in ein:<br />
– File System<br />
– Relationales DBMS (RDBMS)<br />
– Objektorientiertes DBMS.<br />
• Zur Zeit erfolgt in aller Regel die Persistenzgewährleistung durch<br />
RDBMS.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 69
Schulung<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
• Prinzipien von RDBMS sind:<br />
– Das DBMS präsentiert sich dem Benutzer als Gesamtheit von<br />
Tabellen (Relationen);<br />
– Eine Tabelle besteht aus Zeilen (Rows) und Spalten (Columns);<br />
– Jede Zeile in einer Tabelle wird über einen eindeutigen<br />
Schlüssel identifiziert (primary key);<br />
– In jeder Spalte werden nur atomare Attribute gespeichert<br />
(einfache Datentypen);<br />
– Die Relationen sind normalisiert, d.h. redundanzfrei;<br />
– Die Beziehungen zwischen Tabellen werden durch Verbindung<br />
(Join) von Spalteninhalten dargestellt;<br />
– Das DBMS unterstützt die relationale Abfragesprache SQL -<br />
Structured Query Language.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 70
Schulung<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
• Objekte eines Objektmodells müssen auf die Tabellen des<br />
relationalen Modells abgebildet werden.<br />
• Allgemeine Abbildungsregeln sind:<br />
– Klasse → Tabelle<br />
– Objekt / Instanz der Klasse → Zeile der Tabelle<br />
– Attribut des Objekts → Spalte der Tabelle<br />
• Das nachfolgende Beispiel zeigt diese Abbildung für das Objekt<br />
Arbeitsgruppe:<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 71
Schulung<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
• Beispiel Abbildung: Arbeitsgruppe:<br />
Arbeitsgruppe<br />
name : String<br />
beschreibung : String<br />
groesse : Integer = 12<br />
id : Integer<br />
name() : String<br />
setzeName(einName : String)<br />
beschreibung() : String<br />
setzeBeschreibung(eineBeschreibung : String)<br />
groesse() : Integer<br />
setzeGroesse(eineGroesse : Integer)<br />
fuegeHinzu(einSchueler : Schueler)<br />
id() : Integer<br />
setzeId(eineId : Integer)<br />
Arbeitsgruppe id<br />
name beschreibung groesse<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 72
Schulung<br />
• Erläuterungen zum Beispiel:<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
– Jedes elementare Attribut des Objekt-Modells wird auf eine<br />
Tabellenspalte abgebildet.<br />
– Das Objekt enthält ein Attribut id.<br />
– Das id-Attribut ist die Implementierung eines eindeutigen Objekt-<br />
Identifizierers (OID).<br />
– Ein OID ist eine bessere Lösung als über einen Fachschlüssel<br />
die Eindeutigkeit eines Objekts zu gewährleisten.<br />
– Die OID kann als systemweit eindeutig vereinbart werden, oder<br />
es kann vereinbart werden, dass sie innerhalb einer Klasse<br />
eindeutig ist.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 73
Schulung<br />
• Aufgabe 5:<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
– Bilden Sie die Klassen Ihres Klassenmodells auf Tabellen eines<br />
relationalen Modells ab. Problem: Wie lassen sich die Wunsch-<br />
AGs in einer relationalen Struktur abbilden?<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 74
Schulung<br />
Einführung in die Objektorientierung<br />
• Beispiel Abbildung: Schueler:<br />
Schueler1<br />
vorname : String<br />
nachname : String<br />
wunschAGs : Collection<br />
klasse : Schulklasse<br />
vorname() : String<br />
setzeVorname(einVorname : String)<br />
nachname() : String<br />
setzeNachname(einNachname : String)<br />
wunschAGs() : Collection<br />
klasse() : Schulklasse<br />
waehleAG(eineArbeitsgruppe : Arbeitsgruppe)<br />
setzeKlasse(eineKlasse : Schulklasse)<br />
Persistenz<br />
Schueler1 na chname kla sse<br />
vorname<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 75
Schulung<br />
• Erläuterungen zum Beispiel:<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
– Das Attribut wunschAGs aus dem Objekt-Modell kann nicht<br />
direkt auf das relationale Modell abgebildet werden.<br />
– Es handelt sich um ein komplexes Objekt, das mehrere Einträge<br />
enthält. Attribute im relationalen Modell müssen aber elementar<br />
sein (keine Wert-Wiederholungen, keine Wiederholgruppen).<br />
– Die Abbildung auf das relationale Modell müsste durch eine<br />
eigene Tabelle geschehen, die in Schueler1 referenziert wird.<br />
– Eine Alternative wäre die Nutzung objekt-relationaler Erweiterungen<br />
von RDBMS: dann wäre die Abbildung der wunschAGs<br />
auf eine nested table möglich.<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 76
Schulung<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
• Die Abbildung von Klassenhierarchien auf Tabellen kann in<br />
unterschiedlicher Form erfolgen:<br />
– Eine Tabelle für die gesamte Hierarchie,<br />
– Eine Tabelle für jede konkrete Klasse der Hierarchie,<br />
– Eine Tabelle für jede Klasse der Hierarchie.<br />
• Das folgende Beispiel demonstriert die verschiedenen<br />
Möglichkeiten:<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 77
Schulung<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
• Beispiel Abbildung Klassenhierarchie: Person:<br />
Eine Tabelle für<br />
Hierarchie<br />
Person<br />
id<br />
name<br />
vorname<br />
funktion<br />
klasse<br />
Eine Tabelle für jede<br />
konkrete Klasse<br />
Schueler<br />
id<br />
name<br />
vorname<br />
klasse<br />
Lehrer<br />
id<br />
name<br />
vorname<br />
funktion<br />
Eine Tabelle für jede Klasse<br />
Person<br />
id<br />
vorname<br />
nachname<br />
(1,1) (1,1)<br />
Schueler<br />
id(fk)<br />
klasse<br />
Lehrer<br />
id(fk)<br />
funktion<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 78<br />
(1,0)<br />
(1,0)
Schulung<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
• Die Gewährleistung der Persistenz erfolgt in aller Regel durch<br />
entsprechende Frameworks.<br />
• Ein Framework besteht aus einer Anzahl kooperierender Klassen,<br />
die die Lösung eines oder mehrerer Anwendungsprobleme (in<br />
diesem Falle das der Persistenz) sicherstellen.<br />
• Die folgende Abb. zeigt ein rudimentäres Modell eines solchen<br />
Frameworks:<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 79
Schulung<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
• Beispiel Persistency-Framework<br />
PersistenceMechnism<br />
processSQL(sqlStatement : String)<br />
1..1<br />
process<br />
PersistentObject<br />
store()<br />
retrieve()<br />
delete()<br />
0..1<br />
maps<br />
Lehrer Schueler Arbeitsgruppe<br />
buildSQL<br />
1..1<br />
0..1<br />
1..*<br />
ClassMap<br />
newId<br />
neue Id := .nextval<br />
SQLStatement<br />
insertForObject(anObject : PersistentObject) : SQLString<br />
updateForObject(anObject : PersistentObject) : SQLString<br />
deleteForObject(anObject : PersistentObject) : SQLString<br />
newId(argname) : Integer<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 80<br />
1..1<br />
createdFrom<br />
0..1<br />
SQLStatementOracle<br />
newId()<br />
newId<br />
neue Id := max(Id) + 1
Schulung<br />
Einführung in die Objektorientierung<br />
Persistenz<br />
• Erläuterungen zum Beispiel:<br />
– Domänen-Klassen (Schueler usw.) sind Unterklassen von<br />
PersistentObject. Dadurch können die Operationen store(),<br />
retrieve() und delete() geerbt werden.<br />
– PersistentObject kennt eine ClassMap. Diese enthält die<br />
Abbildung von Klassen auf Tabellen.<br />
– Mit Hilfe der Klasse SQLStatement und ihrer konkreten<br />
Unterklassen kann ein spezifisches SQL-Statement erzeugt<br />
werden. So können herstellerspezifische Erweiterungen effektiv<br />
genutzt werden (Beispiel: nextId() in der Standard-Implementierung<br />
und in RDBMS Oracle).<br />
12.02.2007 <strong>PTA</strong> <strong>GmbH</strong>, Unternehmensberatung 81