Software-Technik: (fortgeschrittene) Klassendiagramme Geoinformation III Vorlesung 6b Software-Technik: (fortgeschrittene) Klassendiagramme
OCL: Invarianten - Beispiel II 1 OCL: Invarianten - Beispiel II Auftrag Ware: String Wert: int Kunde Alter: int Bonität: String vorbestraft: bool 0..* 1..* Auftragnehmer Menge von Kunden context Auftrag inv: Ware = "Waffen" implies Auftragnehmer -> forAll( k | k.vorbestraft = false and k.Alter >= 18) context Auftrag inv: Wert > 1000 implies Auftragnehmer -> exists( k | k.Bonität = "gut") A 3x
2 OCL: Invarianten II Invarianten können sich auch auf eine Klasse beziehen, die mit einer mengenwertigen Assoziation zu der Klasse in Verbindung steht Multiplizität nicht 1, z.B. * oder 1..* Bedingung: Assoziationsname -> forAll(B) Assoziationsname -> exists(B) B ist Bedingung an die Klasse, zu der die Assoziation besteht forAll: Bedingung B muss für alle Objekte gelten exists: es reicht aus, wenn Bedingung B für ein Objekt gilt
Invarianten für Landkarten: Beispiel III 3 Invarianten für Landkarten: Beispiel III Landkarten-Axiom: Jede Masche wird von mindestens 3 Kanten begrenzt. Idee Wie sieht die Darstellung im UML-Diagramm aus? Masche Kante wird begrenzt von 2 3..* A 2x
Invarianten für Landkarten: Beispiel III 4 Invarianten für Landkarten: Beispiel III Landkarten-Axiom: Jede Masche wird von mindestens 3 gerichteten Kanten begrenzt. Hmm? Masche Kante auf linker Seite auf rechter Seite 1 3..* A 7x
size liefert Anzahl der Objekte 4 Invarianten für Landkarten: Beispiel III Landkarten-Axiom: Jede Masche wird von mindestens 3 gerichteten Kanten begrenzt. Hmm? Masche Kante auf linker Seite auf rechter Seite 1 0..* context Masche inv: auf_linker_Seite -> size + auf_rechter_Seite -> size >= 3 size liefert Anzahl der Objekte A 7x
Alle Instanzen der Klasse "Flurstueck" 5 Invarianten in ALKIS: Beispiel IV Flurstueck ID: int ..... intersects(Fläche): boolean zwei Flurstücke dürfen sich nicht überlagern Alle Instanzen der Klasse "Flurstueck" context Flurstueck inv: Flurstueck.allInstances->forAll (p1, p2 | p1.ID != p2.ID implies p1.intersects(p2) = false) A 1x
OCL-Syntax: Invarianten 6 OCL-Syntax: Invarianten context <Klassenname> inv: <OCL-Ausdruck>
OCL-Syntax (vereinfacht) 7 OCL-Syntax (vereinfacht) <OCL-Ausdruck> ist ein boolescher Operator (=,>,<,..) angewendet auf zwei arithmetischen Ausdrücke (Konstanten/Attribute/Methoden, die integer- oder real-Wert zurückliefern; auch mit Navigation, wenn eindeutig) ein boolesches Attribut/Methode (auch mit Navigation, wenn eindeutig) eine mengenwertige Navigation mit forAll(<OCL-Ausdruck>) exists(<OCL-Ausdruck>) <Klassenname>.allInstances(<OCL-Ausdruck>) Kombination mehrerer <OCL-Ausdruck> mit not, and, or, implies
Operatoren für Mengen (Collections) 8 Operatoren für Mengen (Collections) Operator Ergebnis-typ Beschreibung size integer Anzahl d. Elemente isEmpty boolean wahr, wenn Menge leer ist forAll(Bed.) wahr, wenn Bed. für jedes Element gilt exists(Bed.) wahr, wenn Bed. für mind. ein Element gilt select(Bed.) Menge Teilmenge, für die Bed. gilt includesAll (Menge2) wahr, wenn alle Elemente der Menge Menge2 enthalten sind
Ariane 5 Schaden: ca. 500 Mio. $ Ursache: Software-Fehler 9 Ariane 5 Schaden: ca. 500 Mio. $ Ursache: Software-Fehler Wiederverwendung eines Moduls von Ariane 4 Modul war korrekt für Ariane 4 nicht jedoch für Ariane 5, da Neigungswinkel größer Start am 4. Juni 1996 40 Sekunden später....
10 Problem bei Ariane 5 Eine Methode wurde verwendet, ohne deren Voraussetzungen zu beachten Lösung in UML: Explizite Formulierung der Vor- und Nachbedingungen von Methoden Formulierung: ebenfalls mit OCL Beispiel ...
5. Vor- und Nachbedingungen 11 5. Vor- und Nachbedingungen Bsp.: Methode zur Verschmelzung zweier Flurstücke: context Flurstück::verschmelze_mit(f: Flurstück) pre : Eigentümer = f.Eigentümer post : Fläche = Fläche@pre + f.Fläche Vorbedingung (pre) muss vor Ausführung der Methode gelten Nachbedingung (post) muss nach Ausführung der Methode gelten Fläche@pre: Wert des Attributs Fläche vor dem Aufruf der Methode
"Programmieren durch Vertrag" 12 "Programmieren durch Vertrag" Beteiligte: Klasse: bietet Methode an Kunde: nutzt Methode Vertragspflichten des Kunden: vor Ausführung der Methode gilt die Vorbedingung Vertragspflichten der Klasse: wenn Methode bei gültiger Vorbedingung aufgerufen wurde, so gilt nach Ausführung die Nachbedingung Klare, exakte Verteilung von Verantwortlichkeiten Keine redundanten Prüfungen (vermindert Komplexität des Programmcodes)
Zusicherungen Oberbegriff für Invarianten und Vor-/ Nachbedingungen 13 Zusicherungen Oberbegriff für Invarianten und Vor-/ Nachbedingungen Formulierung in OCL Invarianten: gelten jederzeit für eine Klasse Vor-/Nachbedingungen: gelten für eine Methode Vorbedingung muss vor dem Aufruf gelten Nachbedingung gilt nach dem Aufruf Invarianten der Klasse ergänzen (implizit) die Vor- und Nachbedingungen der entsprechenden Methoden
14 Zurück zu Ariane 5 Vermeidung des Unfalls: explizite Spezifikation der Vorbedingung des wiederverwendeten Moduls: pre: Neigungswinkel <= maximaler_Neigungswinkel Start am 4. Juni 1996 40 Sekunden später....
Zusammenfassung: neue UML-Konzepte 15 Zusammenfassung: neue UML-Konzepte abstrakte Klassen rekursive Aggregation abgeleitete Attribute und Assoziationen Einschränkungen Zusicherungen Invarianten Vor- und Nachbedingungen Object Constraint Language OCL
Vielen Dank für die Aufmerksamkeit. Fragen? 16 Vielen Dank für die Aufmerksamkeit. Fragen?
Formuliert OCL-Ausdrücke für folgende Bedingungen: 18 Übungsaufgabe 1 Flurstück Nutzung Eigentümer Flächeninhalt Formuliert OCL-Ausdrücke für folgende Bedingungen: Der Flächeninhalt darf nicht negativ oder Null sein Straßen (Nutzung=Verkehr) müssen der Gemeinde gehören
Formuliert OCL-Ausdrücke für folgende Bedingungen: 18 Übungsaufgabe 2 0 .. * benachbart_zu Flurstück Nutzung Flächeninhalt Formuliert OCL-Ausdrücke für folgende Bedingungen: Straßen (Nutzung=Verkehr) müssen der Gemeinde gehören Baugrundstücke (Nutzung=Wohnen) müssen an einer Straße (Nutzung=Verkehr) liegen 0 .. * 0 .. * gehört 1 .. * Eigentümer Name
Formuliert OCL-Ausdrücke für folgende Bedingungen: 18 Übungsaufgabe 3 0 .. * benachbart_zu Flurstück Nutzung Flächeninhalt Formuliert OCL-Ausdrücke für folgende Bedingungen: Flurstücke mit Gebäuden müssen an einer Straße (Nutzung=Verkehr) liegen 0 .. * 1 liegt_auf 0 .. * Gebäude Name
Formuliert OCL-Ausdrücke für folgende Bedingungen: 18 Übungsaufgabe 4 0 .. * benachbart_zu Flurstück Nutzung Flächeninhalt Formuliert OCL-Ausdrücke für folgende Bedingungen: Flurstücke mit Gebäuden und einer Fläche von mind. 500 m² müssen an einer Straße (Nutzung=Verkehr) liegen 0 .. * 1 liegt_auf 0 .. * Gebäude Name
Übungsaufgabe 5 besteht_aus 0 .. * Stellen Sie im nebenstehenden UML- 17 Übungsaufgabe 5 besteht_aus 0 .. * Stellen Sie im nebenstehenden UML- Diagramm durch OCL-Ausdrücke sicher, dass ein ZUSO entweder nur durch REOs repräsentiert wird (mindestens eines) oder nur aus ZUSOs (mindestens einem) besteht. Nicht passieren darf also, dass ein ZUSO aus gar nichts besteht, oder dass ein ZUSO aus REO und ZUSO besteht. Raum- bezogenes zusammen- gesetztes Objekt (ZUSO) 0..1 1 Repräsen- tation 0 ..* Raum- bezogenes Elementar- objekt (REO)
Übungsaufgabe 5 Instanzendiagramm 18 Übungsaufgabe 5 Instanzendiagramm besteht_aus 0 .. * REO ZUSO Raum- bezogenes zusammen- gesetztes Objekt (ZUSO) NRW 0..1 Reg. Bez. Köln Reg. Bez. D‘dorf 1 Repräsen- tation 0 ..* Kreis Rhein - Sieg Kreis Euskirchen Raum- bezogenes Elementar- objekt (REO) Flurst. 12 Flurst. 1 Flurst. 21 Flurst. 444