Software wird im allgemeinen nach folgendem Verfahren entwickelt:
Anmerkungen:
Der dritte Pfeil ("Test") stellt eine Art "Feedback" mit der Aufgabenstellung dar: Durch Abgleichen der entstandenen Ergebnisse mit der Umgebung kann das Modell und die anschließende Implementation verbessert werden.
Programmiersprachen stellen sind allgemeinen kein adequates Mittel zur Modellierung.
Objektorientierte Modellierung lässt sich gut mit UML darstellen.
In der objektorientierten Modellierung wird die Welt in "Objekten" modelliert, die durch "Nachrichten" miteinander kommunizieren:
Jedes Objekt kann aus Daten und Operationen bestehen.
Daten werden nach Möglichkeit "gekapselt", d.h. ihre eigentliche Darstellung als Variable bleibt verborgen, man greift nur über Prozeduren oder Funktionen auf sie zu. Vorteil: Solange die entsprechenden Prozeduren und Funktionen noch existieren, lässt sich das Objekt völlig neu strukturieren.
Objekte kommunizieren über Nachrichten, das sind Botschaften, die das Ausführen einer Operation bewirken.
Bestimmte Objekte haben viele Eigenschaften gemeinsam, z.B. haben Busse, Züge und Schiffe in einer Transportsimulation eine Geschwindigkeit, eine Transportkapazität, einen Fahrplan, ...
Objekte, die exakt die gleiche Zahl an Eigenschaften haben (z.B. die Busse in der Transportsimulation) fasst man zu einer Klasse zusammen, denn jeder Bus der Simulation besitzt folgende Eigenschaften:
Maximalgeschwindigkeit
Haltestellenliste
Fahrplan
Fahrgastkapazität
Farbe
Fahrpreis
Eine Klasse wird in UML-Notation durch einen Namen gekennzeichnet. Es folgt die Liste aller Attribute und dann die Liste aller Methoden. Attribute sind "Variablen" der Klasse, Methoden sind "Unterprogramme" der Klasse.
Eine Instanz(ein Exemplar) der Klasse ist ein konkretes Objekt. Im obigen Beispiele existieren die Busse b1, b2 und b3. Da sie sich nur in ihren Attributen unterscheiden können, werden auch nur die Belegungen der jeweiligen Attribute aufgelistet.
Ein wichtiger Bestandteil in der Modellierung ist die Betrachtung eines Problems aus der Metaebene.
Im letzten Teil betrachteten wir die Frage: "Wie kann man mehrere Objekte zusammenfassen?". Eine Ebene höher stellt sich die Frage: "Wie kann man mehrere Klassen zusammenfassen?".
Auch hierfür gibt es ein Modellierungsmittel. Im Beispiel Planetensystem fällt das Objekt "Sonne" nicht unter die Planeten, denn sie "umkreist" die Sonne nicht, hat keine Geschwindigkeit (in diesem Modell) und ist selbstleuchtend. Es handelt sich um eine andere Objektklasse, die allerdings viel mit der Klasse "Planet" gemeinsam hat. Deshalb lässt sich die UML-Modellierung des Planetensystems folgendermaßen erweitern:
Unter Generalisierung versteht man das Zusammenfassen ähnlicher Klassen zu einer Superklasse, indem gemeinsame Eigenschaften in die Superklasse ausgelagert werden.
Unter Ableitung versteht man das Erzeugen einer Unterklasse aus einer Superklasse mit Vererbung (Weiterverwendung) der in der Superklasse definierten Eigenschaften.
Tipp: Bei der Überlegung, welches die Superklasse ist, hilft häufig die Verwendung der Worte "ist ein". Im obigen Beispiel: Sowohl ein Planet, als auch ein Stern ist ein Himmelskörper.
Betrachten Sie noch einmal das Modell Schule: Erstellen Sie ein UML-Schema für die Klasse "Lehrer" und die Klasse "Schüler", stellen sie jeweils auch eine Instanz in ihrem Diagram dar und erweitern sie es um die Superklasse "Person".
Gesucht ist eine Fahrzeugmodellierung. Entwickeln Sie ein UML-Diagramm für folgende Fahrzeugtypen: PKW, LKW, Fahrrad, Motorroller, Motorrad, Dreirad, Omnibus.
Wie schaut eine Klassendefinition für die Räume im Schulhaus aus?
Entwickeln Sie ein UML-Diagramm zur Transportsimulation.
Gegeben sind folgende geometrischen Figuren: Dreieck, Viereck, Quadrat, Kreis und Rechteck. Versuchen(!) Sie eine UML-Modellierung in verschiedenen Klassen mit Generalisierung.
Setzen Sie eines der oben genannten UML-Modelle in Java um.