Object Constraint Language
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:
- kontextus, amely meghatározza azt a korlátozott helyzetet, amelyben az állítás érvényes
- 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)
- művelet (pl. aritmetikai, halmazorientált), amely manipulál vagy minősít egy tulajdonságot, és
- 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]
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]- ↑ 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]- OMG OCL-specifikáció
- OCL portál – Az OCL-rel kapcsolatos információk központja
- A CSUSB Számítástechnikai Tanszékének OCL-oldala Archiválva 2022. július 8-i dátummal a Wayback Machine-ben (rövid OCL 2.0 szintaxis)
- Octopus: OCL-eszköz a precíz UML-specifikációkhoz (OCL-ellenőrző)
- Dresden OCL Toolkit Archiválva 2017. augusztus 12-i dátummal a Wayback Machine-ben (OCL Toolkit, különféle OCL-hez kapcsolódó kiadványok)
- HOL-OCL (Interaktív tételellenőrző környezet OCL-hez, különféle OCL-hez kapcsolódó publikációk)
- OCL for Java oktatóanyag a ParlezUML-on
- Cikk az EMF OCL használatáról Java-kódban
- UML hivatkozási oldal a cetus-links.org oldalon
- USE (UML-alapú specifikációs környezet) (OCL-eszköz a modellellenőrzéshez, különféle OCL-hez kapcsolódó kiadványok)
- OCL-oktatóanyag
- NL2OCL (OCL-eszköz invariáns generáláshoz NL-ből)