OOA, OOD, OOE und OO Modellierung meinen alle verschiedene Aspekte des gleichen Prozesses,
vgl. CRC(Class Responsibility Collaboration), nämlich der Formung eines Objektmodells,
das letztenendes die Grundlage oder das Gerüst einer Software bilden soll.
Bevor auf die genannten Konzepte und die Unified Modelling Language als bisherigen Stand der
Dinge einer Vereinbarung von Terminologien, Symbolen und Verfahrensweisen im Einzelnen eingegangen
werden kann, geht es hier zunächst um eine Klärung der Arten und Eigenschaften von Objekten
und Klassen und deren Beziehungen untereinander.
Objekte
Lebensdauer : transient, persistent
Objekte sind entweder transient(vorübergehend), oder persistent(dauerhaft).
Erzeugung : statisch - frühe Bindung,
Compile - Time
dynamisch - späte Bindung
Laufzeit, Run - Time
Aktivität : aktiv : eigener Thread, eigener Stack
sendet selbst Nachrichten
passiv : ist aktiver Einheit
ständig oder temporär zugeordnet
shared protected object : nicht fest zugeordnet
Struktur : einfach - d.h. das Objekt existiert alleine
zusammengesetzt - das Objekt enthält Komponenten - Objekte
komplex - es enthält Objekte und Beziehungen zu anderen
Objekten, die ebenfalls komplex sein können.
Rolle (d.i. die Rolle, die ein Objekt semantisch gesehen spielt) :
individuell - z.B. meinKto
repräsentativ oder prototypisch - z.B. einKto
Klassen
Abstraktion
Die Abstraktion sagt bei Klassen aus, dass eine Klasse eine Abstraktion ihrer Instanzen ist,
insofern die Instanzen eine Konkretisierung der Klasse sind. Bezüglich der Vererbung sollte man auch so modellieren,
dass eine abgeleitete Klasse eine Konkretisierung ihrer Basisklasse ist, somit die Basisklasse
eine Abstraktion ihrer abgeleiteten Klasse(n). Dieses Modell ist umso besser realisiert, je mehr
die Syntax des Quellcodes (in vereinfachter Form) der Semantik des Problems entspricht, das
mit der geplanten Software gelöst werden soll.
Klassen sind 2 teilig:
Deklaration - in einer .h - Datei
Ausführung - in einer .cpp - Datei
(Methoden)
Demnach sind Klassen ein logisches Modell, eine Schablone und ein Datentyp.
UML Syntax für Funktionen
UML besitzt eine eigene Syntax, mit der sich Quellcode umschreiben lässt. Um Verwechslungen zu
vermeiden, unterscheidet sie sich von der Syntax der bekannteren Programmiersprachen :
NameOperation([NameParameter : NameTyp[ : =Defaultwert],...])[ : NameErgebnistyp]
Was auf den ersten Blick recht kompliziert aussieht, lässt sich anhand eines Beispiels
gut erläutern:
Wir haben eine Funktion, "Wurzel", deren Deklaration in C++ so aussieht:
double Wurzel(double eingabe = 1.0);
In UML sieht dieselbe Funktionsdeklaration so aus:
Wurzel(eingabe : double : = 1.0) : double
Erläuterung: das Zeichen ": =" steht hier für den Zuweisungsoperator.
statische Beziehungen zwischen Klassen
- Vererbungsbeziehung(Generalisierung / Spezialisierung)
- Nutzungsbeziehung(Assoziierung)
lässt sich z.B. durch soetwas, wie "ZObj *LiNf ;" realisieren.
- Importbeziehung
bei Vererbung
homogene Klassenstruktur <--> Typstruktur
| |
Unterklassen typkompatibel Unterklassen spezialisieren
zu allen Oberklassen die Oberklassen
bei Nutzung / Assoziation

In der Mitte auf der Verbindung der beiden Einheiten steht in diesem Fall ein aktives Verb,
hier können auch sogenannte Rollen stehen, wie Besitzer, Fahrer, Kommandant etc.
Multiplizität

In UML schreibt man statt des " n " gerne ein " * "(Asterisk).
Assoziationen können unidirektional (in eine Richtung) oder bidirektional (in beide Richtungen) sein.
Assoziationsklassen sind ganze Klassen, die nur den Inhalt einer Assoziation enthalten,
also Datenelemente in der Regel als Zeiger, die in den beiden assoziierten Klassen nicht mehr
vorkommen, da sie ja in die Assoziationsklasse ausgelagert wurden.

"Vokabel" ist hier eine Assoziationsklasse. Die Klasse "Deutsch" enthält Referenzen auf n Objekte
der Klasse Vokabel, die ihrerseits wieder jeweils eine Referenz auf ein bestimmtes Objekt der Klasse
"Englisch" enthalten. Das Beispiel hinkt ein bisschen an der Stelle, wo bestimmte Vokabeln
mehrere Entsprechungen in der anderen Sprache haben.
Zusätzlich zu Klassennamen und Multiplizität kann man in der grafischen Darstellung einer Assoziation
auch noch einen Qualifizierer angeben :

Auch restriktive Bedingungen, bzw. Constraints werden hier angegeben:
Bsp 1 :

Bsp 2 :
