UML: Unterschied zwischen den Versionen
Aus Das Sopra Wiki
Keine Bearbeitungszusammenfassung |
|||
| Zeile 10: | Zeile 10: | ||
=== UML as sketch === | === UML as sketch === | ||
Hier steht der Aspekt einer gemeinsamen Sprache für die Kommunikation innerhalb des Entwicklerteams und mit den Auftraggebern im Vordergrund. Die UML Modelle werden hierbei nur so genau formuliert wie es die Kommunikation erfordert. | Hier steht der Aspekt einer gemeinsamen Sprache für die Kommunikation innerhalb des Entwicklerteams und mit den Auftraggebern im Vordergrund. Die UML Modelle werden hierbei nur so genau formuliert wie es die Kommunikation erfordert. | ||
=== UML as blueprint === | === UML as blueprint === | ||
Bei dieser Anwendung von UML werden die UML Modelle direkt als Grundlage des Entwicklungsprozesses angesehen und müssen daher ausreichend spezifiziert sein um den Entwicklern eine genaue Umsetzung zu ermöglichen. Die Struktur des Modells sollte vollständig Formal spezifiziert sein, während das Verhalten durch textuelle Annotationen beschrieben werden kann. Diese Modelle können auch als Eingabe fuer Codegeneratoren verwendet werden, der entstandene Code muss jedoch anschließend noch von Hand überarbeitet werden. | Bei dieser Anwendung von UML werden die UML Modelle direkt als Grundlage des Entwicklungsprozesses angesehen und müssen daher ausreichend spezifiziert sein um den Entwicklern eine genaue Umsetzung zu ermöglichen. Die Struktur des Modells sollte vollständig Formal spezifiziert sein, während das Verhalten durch textuelle Annotationen beschrieben werden kann. Diese Modelle können auch als Eingabe fuer Codegeneratoren verwendet werden, der entstandene Code muss jedoch anschließend noch von Hand überarbeitet werden. | ||
=== UML as programming language === | === UML as programming language === | ||
{{BA|Greitschus|"ausspezifizierte"... Gibt's das Wort überhaupt?}} | {{BA|Greitschus|"ausspezifizierte"... Gibt's das Wort überhaupt?}} | ||
Diese Nutzung erfordert vollkommen ausspezifizierte UML Modelle, was sowohl Struktur als auch Verhalten angeht. Bei diesem Ansatz ist es Ziel, die Modelle ausführbar zu machen und somit als Eingabe für Codegeneratoren zu benutzen, die dann wiederum vollständige Programme generieren. | Diese Nutzung erfordert vollkommen ausspezifizierte UML Modelle, was sowohl Struktur als auch Verhalten angeht. Bei diesem Ansatz ist es Ziel, die Modelle ausführbar zu machen und somit als Eingabe für Codegeneratoren zu benutzen, die dann wiederum vollständige Programme generieren. | ||
== Das Klassendiagramm == | == Das Klassendiagramm == | ||
Das Klassendiagramm ist eine Darstellung der Modellstruktur auf grafischer Ebene mit den von UML zur Verfügung gestellten Mitteln. Formell gesehen ist ein Klassendiagramm eine Mischung aus einem gerichteten und ungerichteten Graphen, deren Knoten Klassen und deren Kanten Beziehungen zwischen diesen Klassen beschreiben. | Das Klassendiagramm ist eine Darstellung der Modellstruktur auf grafischer Ebene mit den von UML zur Verfügung gestellten Mitteln. Formell gesehen ist ein Klassendiagramm eine Mischung aus einem gerichteten und ungerichteten Graphen, deren Knoten Klassen und deren Kanten Beziehungen zwischen diesen Klassen beschreiben. | ||
| Zeile 22: | Zeile 25: | ||
==== Syntax der Klassen ==== | ==== Syntax der Klassen ==== | ||
<!-- | <!-- | ||
The graphviz plugin has issues, so we just keep the code here for reference | The graphviz plugin has issues, so we just keep the code here for reference. | ||
I just generated the classes with https://dreampuf.github.io/GraphvizOnline annd uploaded the .svg | |||
<graphviz> | <graphviz> | ||
digraph KlasseUnbestimmt { | digraph KlasseUnbestimmt { | ||
| Zeile 47: | Zeile 51: | ||
==== Beispielklasse ==== | ==== Beispielklasse ==== | ||
<!-- | |||
The graphviz plugin has issues, so we just keep the code here for reference. | |||
I just generated the classes with https://dreampuf.github.io/GraphvizOnline and uploaded the .svg | |||
<graphviz> | <graphviz> | ||
digraph KlasseBestimmt { | digraph KlasseBestimmt { | ||
| Zeile 63: | Zeile 70: | ||
] | ] | ||
AutoKlasse [ | AutoKlasse [ | ||
label = "{DB::Auto| | label = "{DB::Auto| mColor : int\lmSpeed : float\l| Accelerate(int speed) : void\lBreak() : bool\l}" | ||
] | ] | ||
} | } | ||
</graphviz> | </graphviz> | ||
==== | --> | ||
Bei abstrakten Klassen wird der Klassenname einfach | [[File:KlasseBestimmt.svg|200px|bestimmte Klasse]] | ||
==== Vererbung ==== | |||
Bei abstrakten Klassen wird der Klassenname einfach ''kursiv'' geschrieben. | |||
<!-- | |||
The graphviz plugin has issues, so we just keep the code here for reference. | |||
I just generated the classes with https://dreampuf.github.io/GraphvizOnline and uploaded the .svg | |||
<graphviz> | <graphviz> | ||
digraph | digraph Vererbung{ | ||
node [ | node [ | ||
fontsize = 8 | fontsize = 8 | ||
shape = " | shape = "none" | ||
] | ] | ||
| Zeile 81: | Zeile 94: | ||
] | ] | ||
AutoKlasse [ | AutoKlasse [ | ||
fontname = "Bitstream Vera | fontname = "Bitstream Vera Sans" | ||
label = " | label = <<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" PORT="tab"> | ||
<TR><TD ALIGN="center" WIDTH="30"><I>Car</I></TD></TR> | |||
<TR><TD ></TD></TR> | |||
<TR><TD ></TD></TR> | |||
</TABLE>> | |||
] | ] | ||
FordKlasse [ | FordKlasse [ | ||
fontname = "Bitstream Vera Sans" | fontname = "Bitstream Vera Sans" | ||
label = " | label = <<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" PORT="tab"> | ||
<TR><TD ALIGN="center" WIDTH="30">Ford</TD></TR> | |||
<TR><TD ></TD></TR> | |||
<TR><TD ></TD></TR> | |||
</TABLE>> | |||
] | ] | ||
BMWKlasse [ | BMWKlasse [ | ||
fontname = "Bitstream Vera Sans" | fontname = "Bitstream Vera Sans" | ||
label = " | label = <<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" PORT="tab"> | ||
<TR><TD ALIGN="center" WIDTH="30">BMW</TD></TR> | |||
<TR><TD ></TD></TR> | |||
<TR><TD ></TD></TR> | |||
</TABLE>> | |||
] | ] | ||
edge [ | edge [ | ||
| Zeile 97: | Zeile 122: | ||
] | ] | ||
FordKlasse -> AutoKlasse | FordKlasse:tab -> AutoKlasse:tab | ||
BMWKlasse -> AutoKlasse | BMWKlasse:tab -> AutoKlasse:tab | ||
} | } | ||
</graphviz> | </graphviz> | ||
--> | |||
[[File:Vererbung.svg|200px|Vererbung und abstrakte Klasse]] | |||
==== Schnittstellen ==== | ==== Schnittstellen ==== | ||
Schnittstellen (Interfaces) können folgendermaßen dargestellt werden: | Schnittstellen (Interfaces) können folgendermaßen dargestellt werden: | ||
<!-- | |||
The graphviz plugin has issues, so we just keep the code here for reference. | |||
I just generated the classes with https://dreampuf.github.io/GraphvizOnline and uploaded the .svg | |||
<graphviz> | <graphviz> | ||
digraph InterfaceDiagramm | digraph InterfaceDiagramm | ||
| Zeile 117: | Zeile 147: | ||
fontsize = 8 | fontsize = 8 | ||
] | ] | ||
IVehicle [ | |||
label = "{\<\<interface\>\>\ | label = "{\<\<interface\>\>\lIVehicle| \l| \l}" | ||
] | ] | ||
CarClass [ | |||
label = "{ | label = "{Car| \l| \l}" | ||
] | ] | ||
edge [ | edge [ | ||
| Zeile 131: | Zeile 161: | ||
] | ] | ||
CarClass -> IVehicle | |||
} | } | ||
</graphviz> | </graphviz> | ||
--> | |||
In diesem Fall würde die | [[File:Interface.svg|200px|Interface]] | ||
In diesem Fall würde die <code>Car</code> Klasse also das Interface <code>IVehicle</code> implementieren. | |||
==== Attribute ==== | ==== Attribute ==== | ||
| Zeile 157: | Zeile 188: | ||
Die Generalisierung stellt die klassiche Vererbungsrelation zwischen zwei Klassen her. Es handelt sich hierbei um eine "is a" Beziehung, wie es sie auch bei semantischen Netzwerken gibt. Eine Generalisierung gebraucht man immer dann, wenn man von einer generelleren Klasse eine speziellere ableiten möchte. Diese speziellere Klasse erbt dann alle Merkmale (Attribute & Operationen) der Superklasse. Im folgenden Beispiel ist also '''Animal''' die Superklasse von '''Horse''' und '''Cat'''. | Die Generalisierung stellt die klassiche Vererbungsrelation zwischen zwei Klassen her. Es handelt sich hierbei um eine "is a" Beziehung, wie es sie auch bei semantischen Netzwerken gibt. Eine Generalisierung gebraucht man immer dann, wenn man von einer generelleren Klasse eine speziellere ableiten möchte. Diese speziellere Klasse erbt dann alle Merkmale (Attribute & Operationen) der Superklasse. Im folgenden Beispiel ist also '''Animal''' die Superklasse von '''Horse''' und '''Cat'''. | ||
<!-- | |||
The graphviz plugin has issues, so we just keep the code here for reference. | |||
I just generated the classes with https://dreampuf.github.io/GraphvizOnline and uploaded the .svg | |||
<graphviz> | <graphviz> | ||
digraph Vererbung { | digraph Vererbung { | ||
| Zeile 193: | Zeile 227: | ||
} | } | ||
</graphviz> | </graphviz> | ||
--> | |||
[[File:Vererbung-2.svg|200px|Vererbung]] | |||
==== Assoziation ==== | ==== Assoziation ==== | ||
| Zeile 198: | Zeile 234: | ||
Assoziationen modellieren Beziehungen zwischen zwei oder mehr Klassen und können mit Multiplizitäten am jeweiligen Ende der Assoziation versehen werden um klarzumachen, wieviele Objekte in Relation zu den anderen Objekten stehen. Im folgenden Beispiel sagen die Multiplizitäten, dass jedem '''Fahrer''' beliebig viele '''Autos''' zugeordnet sein können, mindestens jedoch eines und ausserdem, dass jedes '''Auto''' entweder keinen oder genau einen '''Fahrer''' hat. | Assoziationen modellieren Beziehungen zwischen zwei oder mehr Klassen und können mit Multiplizitäten am jeweiligen Ende der Assoziation versehen werden um klarzumachen, wieviele Objekte in Relation zu den anderen Objekten stehen. Im folgenden Beispiel sagen die Multiplizitäten, dass jedem '''Fahrer''' beliebig viele '''Autos''' zugeordnet sein können, mindestens jedoch eines und ausserdem, dass jedes '''Auto''' entweder keinen oder genau einen '''Fahrer''' hat. | ||
<!-- | |||
The graphviz plugin has issues, so we just keep the code here for reference. | |||
I just generated the classes with https://dreampuf.github.io/GraphvizOnline and uploaded the .svg | |||
<graphviz> | <graphviz> | ||
digraph Association { | digraph Association { | ||
| Zeile 227: | Zeile 266: | ||
} | } | ||
</graphviz> | </graphviz> | ||
--> | |||
[[File:Assoc.svg|200px|Assoziationen]] | |||
{{BA|Greitschus|"Im Regelfall werden diese Beziehungen durch Felder in den Klassen realisiert, bei "0..1" hat man genau diesen Fall, ein Feld kann entweder einen Wert haben oder nicht." Der Satz ergibt für mich grammatikalisch keinen Sinn. Vielleicht entweder in zwei bis drei Sätze aufteilen, oder komplett umschreiben, oder?}} | {{BA|Greitschus|"Im Regelfall werden diese Beziehungen durch Felder in den Klassen realisiert, bei "0..1" hat man genau diesen Fall, ein Feld kann entweder einen Wert haben oder nicht." Der Satz ergibt für mich grammatikalisch keinen Sinn. Vielleicht entweder in zwei bis drei Sätze aufteilen, oder komplett umschreiben, oder?}} | ||
| Zeile 236: | Zeile 277: | ||
UML erlaubt wiederum eine grafische Repräsentation dieses Konzepts. Die jeweiligen Enden einer '''Assoziation''' können mit Symbolen versehen werden, die Aussagen über die '''Navigierbarkeit''' der Klassen machen: | UML erlaubt wiederum eine grafische Repräsentation dieses Konzepts. Die jeweiligen Enden einer '''Assoziation''' können mit Symbolen versehen werden, die Aussagen über die '''Navigierbarkeit''' der Klassen machen: | ||
<!-- | |||
The graphviz plugin has issues, so we just keep the code here for reference. | |||
I just generated the classes with https://dreampuf.github.io/GraphvizOnline and uploaded the .svg | |||
<graphviz> | <graphviz> | ||
digraph Navigation { | digraph Navigation { | ||
| Zeile 289: | Zeile 333: | ||
} | } | ||
</graphviz> | </graphviz> | ||
--> | |||
[[File:Nav.svg|200px|Navigierbarkeit]] | |||
Von | Von links nach rechts haben wir im obigen Beispiel folgende drei Fälle: | ||
# Keine Aussage über die Navigierbarkeit | # Keine Aussage über die Navigierbarkeit | ||
# Navigieren vom Auto zum Fahrer möglich | # Navigieren vom Auto zum Fahrer möglich | ||
