Object Constraint Language

A Wikipédiából, a szabad enciklopédiából

Az Object Constraint Language (OCL) egy deklaratív nyelv, amely az IBM-nél kifejlesztett Unified Modeling Language-modellekre alkalmazandó szabályokat írja le, és most az UML-szabvány része.

Kezdetben az OCL az UML formális specifikációs nyelvi kiterjesztése volt. Az OCL mostantól[mikor?] bármely Meta-Object Facility (MOF) Object Management Group (OMG) metamodelljével használható, beleértve az UML-t is. Az Object Constraint Language egy precíz szövegnyelv, amely olyan kényszer- és objektumlekérdezési kifejezéseket biztosít bármely MOF-modellhez vagy metamodellhez, amelyet egyébként nem lehet diagramos jelöléssel kifejezni. Az OCL kulcsfontosságú eleme az új OMG szabványos modellek átalakítására vonatkozó ajánlásának, a Queries/Views/Transformations (QVT) specifikációnak.

Leírás[szerkesztés]

Az OCL a Syntropy leszármazottja, egy második generációs objektumorientált elemzési és tervezési módszer. Az OCL 1.4 definíciója egy kényszernyelvet adott meg. Az OCL 2.0-ban a definíciót kiterjesztették az általános objektumlekérdezési nyelvi definíciókra.

Az OCL-utasítások négy részből állnak:

  1. kontextus, amely meghatározza azt a korlátozott helyzetet, amelyben az állítás érvényes
  2. egy tulajdonság, amely a kontextus néhány jellemzőjét képviseli (pl. ha a kontextus egy osztály, akkor egy tulajdonság lehet attribútum)
  3. művelet (pl. aritmetikai, halmazorientált), amely manipulál vagy minősít egy tulajdonságot, és
  4. kulcsszavak (pl. if, then, else, és, or, not, implies), amelyek feltételes kifejezések megadására szolgálnak.

Kapcsolat[szerkesztés]

OCL és UML[szerkesztés]

Az OCL kiegészíti az UML-t azáltal, hogy olyan kifejezéseket biztosít, amelyek nem rendelkeznek sem a természetes nyelv kétértelműségeivel, sem az összetett matematika használatának velejáró nehézségeivel. Az OCL egy navigációs nyelv is a grafikonalapú modellekhez.

OCL és MOF[szerkesztés]

Az OCL precízebbé teszi a Meta-Object Facility-modellt azáltal, hogy állításokat társít metaelemeihez.

OCL és QVT[szerkesztés]

A Model Driven Engineering (MDE) vagy a modellvezérelt architektúra szempontjából különösen fontos a modelltranszformáció fogalma. Az OMG meghatározott szabványt definiált a modelltranszformációhoz MOF/QVT vagy röviden QVT néven. Jelenleg számos modelltranszformációs nyelv érhető el, például a GReAT, a VIATRA vagy a Tefkat, a QVT-szabványnak való megfelelőség különböző szintjével. Ezen nyelvek közül sok az OCL-re épül, amely a QVT- kompatibilitás fő része.

Szabályalapú érvényesítési nyelvként a Schematron az OCL alternatívájának tekinthető. A Schematron azonban az Extensible Markup Language (XML) fákhoz működik, míg az OCL lehetővé teszi a MOF-alapú modellek és metamodellek (pl. XML metaadatcsere (XMI) fák). Más szavakkal, az OCL az UML-hez vagy a MOF-hoz hasonlóan kapcsolódik, mint a Schematron az XML-hez. (A Schematron XPath segítségével navigál az XML-fákon belül.)

Mivel egy modellspecifikációs nyelv, amely lehetővé teszi a tervezők számára, hogy egy modellt vagy metamodellt mellékhatásmentes annotációkkal díszítsenek, az OCL helyettesíthető olyan nyelvekkel, mint az Alloy. Az automatikus OCL-generálás elvileg lehetséges természetes nyelvből.[1]

Példák
Kényszer OCL ekvivalens
Az ember életkora nem negatív. context Person inv : self.age >=0
Az ember fiatalabb a szüleinél. context Person inv : self.parents->forAll(p|p.age>self.age)
Egy születésnap után az ember egy évvel idősebb lesz. context Person::hasBirthday() post : self.age=self.age@pre+1
Egy személynek maximum 2 szülője van. context Person inv : self.parents->size()<=2
Miután valakinek gyereke van, a gyerekkészlete nem üres, és nagyobb, mint korábban. context Person::getsChild() post : self.childs->notEmpty() and self.childs->size() > self.childs@pre->size()
Csak nagykorú lehet autó tulajdonosa. context Person inv : self.age<18 implies self.cars->isEmpty()
Az autó első regisztrációja nem lehet megépítése előtt. context Auto inv : self.registration>=self.constructionYear
Minden személynek, akinek van autója, van legalább egy autója, amely fiatalabb, mint a személy. context Person inv : self.cars->notEmpty() implies self.cars->exists( c | Calendar. YEAR - c.constructionYear < self.age)
Senki sem lehet a saját szülője. context Person inv : self.parents->excludes(self)
Legalább egy személynek van autója. context Person inv : Person.allInstances()->exists(p | p.cars->size() > 0)

Jegyzetek[szerkesztés]

  1. Imran Sarwar Bajwa (2010. október 1.). „OCL Constraints Generation from Natural Language Specification, 2010”, Kiadó: IEEE. DOI:10.1109/EDOC.2010.33.  

Fordítás[szerkesztés]

Ez a szócikk részben vagy egészben az Object Constraint Language című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

További információk[szerkesztés]

Kapcsolódó szócikkek[szerkesztés]