07.05.2013 Aufrufe

PTA_OO_Einfuehrung.pdf - PTA GmbH

PTA_OO_Einfuehrung.pdf - PTA GmbH

PTA_OO_Einfuehrung.pdf - PTA GmbH

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!