Object Constraint Language

Object Constraint Language

Die Object Constraint Language (OCL) ist Bestandteil der Unified Modeling Language (UML) und dient unter anderem der textuellen Spezifikation von Invarianten in Klassendiagrammen, von Bedingungen in Sequenzdiagrammen oder der Formulierung von Vor- und Nachbedingungen für Methoden. Ihre Syntax ist an die Programmiersprache Smalltalk angelehnt. OCL ist seit der UML-Version 1.1 Bestandteil der UML.

Es werden 7 Arten von Constraints (Zusicherungen) unterschieden:

  • Invariants müssen zu jeder Zeit für eine Instanz oder Assoziation gelten.
  • Preconditions/Postconditions müssen zu dem Zeitpunkt gelten, an dem die Ausführung der zugehörigen Operation beginnt/endet.
  • Initial & derived Values stellen Bedingungen für Ausgangs- und abgeleitete Werte dar
  • Definition: es können Attribute und Operationen definiert werden, die nicht im Modell enthalten sind.
  • Body Definition von Operationen mit isQuery = true.
  • Guards müssen gelten, wenn ein Zustandsübergang beginnt.

Ein Constraint ist immer definiert im Rahmen eines Kontexts. Dies ist ein beliebiges Model Entity, wie beispielsweise eine Klasse, ein Typ, ein Interface oder eine Komponente. Man unterscheidet den Kontexttyp und die Kontextinstanz. Auf letztere beziehen sich die Angaben eines Constraints. Beispielsweise kann er festlegen, dass für eine Instanz der Klasse Banane der Wert des Attributs Krümmung nicht größer als X sein darf.

Object steht hier für eine Komponente eines beliebigen Systems, diese soll genauer spezifiziert, definiert oder beschrieben werden.

Constraint steht für eine Begrenzung oder Einschränkung; diese kann maximale oder minimale Werte annehmen, beispielsweise die maximale Anzahl gleichzeitiger Zugriffe auf eine Datenbank, oder die maximale Höhe eines Bauobjektes.

Language steht hier nicht für eine formale Computersprache, sondern vielmehr für eine auf jede Implementierung anwendbare weniger formale Sprache.

Ein wesentliches Einsatzgebiet der OCL besteht auch in der Modelltransformation. Hier ist OCL ein zentraler Bestandteil vieler Transformationssprachen, wie QVT oder ATL.

Inhaltsverzeichnis

OCL und UML

OCL versteht sich als Ergänzung zu UML und soll die Modellierung von Software noch präziser gestalten. Während in UML Strukturen, Abläufe und Beziehungen zwischen Objekten modelliert werden, werden in OCL zusätzlich die Randbedingungen eines Modells spezifiziert. Dabei kann es sich beispielsweise um die Beschränkung eines Attributs auf einen Wertebereich handeln, oder um einzuhaltende Restriktionen zwischen Objekten. OCL-Ausdrücke sind widerspruchsfrei und können von Programmen verarbeitet werden und tragen somit zur Code-Generierung bei, wobei sie nicht das Modell verändern, sondern überwachen.

UML eignet sich besser für die Entwicklung eines Modells, weil Diagramme leichter zu verstehen sind als eine textuelle Repräsentation des Modells. OCL alleine ist ungeeignet für die Modellierung von Software.

Beispiel

Das folgende UML-Klassendiagramm verdeutlicht die OCL und lässt verschiedene Bedingungen in OCL formulieren: Klassendiagramm

Bedingungen

  1. Das Alter einer Person ist nicht negativ.
  2. Eine Person ist jünger als ihre Eltern.
  3. Nach einem Geburtstag ist eine Person um genau 1 Jahr älter.
  4. Eine Person hat höchstens 2 Eltern.
  5. Wenn jemand ein Kind bekommen hat, ist die Menge seiner Kinder nicht leer und die Anzahl seiner Kinder ist größer als vorher.
  6. Nur eine erwachsene Person darf ein Auto besitzen.
  7. Die Erstzulassung eines Autos liegt nicht vor dem Baujahr.
  8. Jede Person, die mindestens ein Auto besitzt, hat mindestens ein Auto, das jünger ist als sie selbst.
  9. Niemand kann von sich selbst ein Elternteil sein.
  10. Es gibt mindestens eine Person, die ein Auto besitzt. (Bzw. von allen Personen gibt es mindestens eine Person, die mindestens ein Auto besitzt.)

OCL Constraints

  1. context Person inv: self.Alter >=0
  2. context Person inv: self.Eltern->forAll(e|e.Alter>self.Alter)
  3. context Person::hatGeburtstag() post: self.Alter=self.Alter@pre+1
  4. context Person inv: self.Eltern->size()<=2
  5. context Person::bekommtKind() post: self.Kinder->notEmpty() and self.Kinder->size() > self.Kinder@pre->size()
  6. context Person inv: self.Alter<18 implies autos->size()=0
  7. context Auto inv: self.Erstzulassung>=self.Baujahr
  8. context Person inv: self.autos->size()>0 implies self.autos->exists( a | Calendar.YEAR - a.baujahr < self.alter)
  9. context Person inv: not self.eltern->includes(self)
  10. context Person inv: Person.allInstances->exists(p | p.autos->size() > 0)

Links


Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Object Constraint Language — The Object Constraint Language (OCL) is a declarative language for describing rules that apply to Unified Modeling Language (UML) models developed at IBM and now part of the UML standard. Initially, OCL was only a formal specification language… …   Wikipedia

  • Object Constraint Language — OCL (Object Constraint Language) est un langage informatique d expression des contraintes utilisé par UML. C est une contribution d IBM à UML 1.1. Ce langage formel est volontairement simple d accès et représente un juste milieu entre langage… …   Wikipédia en Français

  • Object-oriented programming — Programming paradigms Agent oriented Automata based Component based Flow based Pipelined Concatenative Concurrent computing …   Wikipedia

  • Constraint programming — Programming paradigms Agent oriented Automata based Component based Flow based Pipelined Concatenative Concurrent computin …   Wikipedia

  • Constraint logic programming — Programming paradigms Agent oriented Automata based Component based Flow based Pipelined Concatenative Concurrent computing …   Wikipedia

  • Object database — Example of an object oriented model.[1] An object database (also object oriented database management system) is a database management system in which information is represented in the form of objects as used in object oriented programming. Object …   Wikipedia

  • Glossary of Unified Modeling Language terms — This glossary of Unified Modeling Language terms covers all versions of UML. Individual entries will point out any distinctions that exist between versions.A* Abstract An indicator applied to a classifier (e.g., actor, class, use case) or to some …   Wikipedia

  • Unified Modeling Language — Die Unified Modeling Language (Vereinheitlichte Modellierungssprache), kurz UML, ist eine graphische Modellierungssprache zur Spezifikation, Konstruktion und Dokumentation von Software Teilen und anderen Systemen[1]. Sie wird von der Object… …   Deutsch Wikipedia

  • Unified Modeling Language — (UML) is a standardized general purpose modeling language in the field of software engineering. UML includes a set of graphical notation techniques to create abstract models of specific systems, referred to as UML model. Overview The Unified… …   Wikipedia

  • Query language — Query languages are computer languages used to make queries into databases and information systems. Broadly, query languages can be classified according to whether they are database query languages or information retrieval query languages. The… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”