-
Was ist OCL?
- Object Constraint Language ist deklarative Spezifikationssprache fuer die spezifikation der Constraints in UML
- Eine Invariante wird immer fuer eine Klasse erstellt. Klasse ist dann ein Context
- Constraints werden für Klassen definiert, jedoch für deren Instanzen (Objekte) ausgewertet
- Die Auswertung von OCL-Constraints ist nebenwirkungsfrei (keine Änderung der Modelle → man kann nichts aendern oder setzen)
- keine Kontrollflusskonstrukte
- keine Programmaufrufe
- starke Typisierung
-
Kurze OCL Syntax vs Standarde OCL Syntax fuer Mengenoperationen erklaeren
- Kurze Syntax: self.items → size() > 15
- Standarde Syntax: self.collect(items) → size() > 15
-
Ist OCl entscheidbar?
- In Allgemeinen OCL ist nicht entscheidbar
- Die Regeln für Statische Semantik müssen Entscheidbar definiert werden.
- Modellierer ist dafuer verantwortlich
-
Warum is die Wahl des Kontextes wichtig?
- Damit kann man definieren, für welche Objekt OCL geschrieben ist, wo die Invariante gelten muss
-
Worauf muss man bei OCL achten, wenn man gute OCLs schreiben will?
- Context fuer Constraint setzen
-
Wie wertet man die OCLs aus?
- Validation Engine
- It Parses OCLs and evaluates them against the model elements, checking for violations of the specified constraints
-
Mengenoperationen
- Syntax: inv self.lectures → size() ≥ 10 ODER inv self.collect(lectures) → size ≥ 10
- Operationen:
- size()
- sum()
- (=) Gleichheit
- (<>) ungleichheit
- Transformationen: asBag(), asSet(), asOrderedSet()
- flatten
- union(), intersection(), minus()
- first(), last(), indexOf()
-
Iterator Operationen
- select (aka filter) Set{1,2,3,4,5} → select(x | x > 2)
- any() - beliebiges element, nichtdeterministisch
- collect() - kann man fuer alle Instanzen aufrufen, um mapping zu implementieren
Set{reussner,koziolek} -> collect(firstName) = Bag{’Ralf’,’Anne’}
- isUnique()
- sortedBy()
- exists() - mindestens ein Element hat eine Eigenschaft
- one() - genau ein Element hat eine Eigenschaft
- forAll()
- includes()/includesAll()
-
ImperativeOCL vs Standard OCL? (#7) (Nebenwerkungsfreiheit) TODO
-
Beispiel fuer statische Semantik fuer jede Klassendiagram
OCL Theorie
Invarianten sind immer wahr.
Attribut-Zugriff mit self.
Methoden-Zugriff mit :: in Context
dann precondition and postconditions (JML-Like)