Object Constraint Language
Valtozat allapota
Ez a lap egy ellenorzott valtozata
Az Object Constraint Language (OCL) egy deklarativ nyelv, amely az IBM-nel kifejlesztett Unified Modeling Language-modellekre alkalmazando szabalyokat irja le, es most az UML-szabvany resze.
Kezdetben az OCL az UML formalis specifikacios nyelvi kiterjesztese volt. Az OCL mostantol[mikor?] barmely Meta-Object Facility (MOF) Object Management Group (OMG) metamodelljevel hasznalhato, beleertve az UML-t is. Az Object Constraint Language egy preciz szovegnyelv, amely olyan kenyszer- es objektumlekerdezesi kifejezeseket biztosit barmely MOF-modellhez vagy metamodellhez, amelyet egyebkent nem lehet diagramos jelolessel kifejezni. Az OCL kulcsfontossagu eleme az uj OMG szabvanyos modellek atalakitasara vonatkozo ajanlasanak, a Queries/Views/Transformations (QVT) specifikacionak.
Leiras
[szerkesztes]Az OCL a Syntropy leszarmazottja, egy masodik generacios objektumorientalt elemzesi es tervezesi modszer. Az OCL 1.4 definicioja egy kenyszernyelvet adott meg. Az OCL 2.0-ban a definiciot kiterjesztettek az altalanos objektumlekerdezesi nyelvi definiciokra.
Az OCL-utasitasok negy reszbol allnak:
- kontextus, amely meghatarozza azt a korlatozott helyzetet, amelyben az allitas ervenyes
- egy tulajdonsag, amely a kontextus nehany jellemzojet kepviseli (pl. ha a kontextus egy osztaly, akkor egy tulajdonsag lehet attributum)
- muvelet (pl. aritmetikai, halmazorientalt), amely manipulal vagy minosit egy tulajdonsagot, es
- kulcsszavak (pl. if, then, else, es, or, not, implies), amelyek felteteles kifejezesek megadasara szolgalnak.
Kapcsolat
[szerkesztes]OCL es UML
[szerkesztes]Az OCL kiegesziti az UML-t azaltal, hogy olyan kifejezeseket biztosit, amelyek nem rendelkeznek sem a termeszetes nyelv ketertelmusegeivel, sem az osszetett matematika hasznalatanak velejaro nehezsegeivel. Az OCL egy navigacios nyelv is a grafikonalapu modellekhez.
OCL es MOF
[szerkesztes]Az OCL precizebbe teszi a Meta-Object Facility-modellt azaltal, hogy allitasokat tarsit metaelemeihez.
OCL es QVT
[szerkesztes]A Model Driven Engineering (MDE) vagy a modellvezerelt architektura szempontjabol kulonosen fontos a modelltranszformacio fogalma. Az OMG meghatarozott szabvanyt definialt a modelltranszformaciohoz MOF/QVT vagy roviden QVT neven. Jelenleg szamos modelltranszformacios nyelv erheto el, peldaul a GReAT, a VIATRA vagy a Tefkat, a QVT-szabvanynak valo megfeleloseg kulonbozo szintjevel. Ezen nyelvek kozul sok az OCL-re epul, amely a QVT- kompatibilitas fo resze.
Szabalyalapu ervenyesitesi nyelvkent a Schematron az OCL alternativajanak tekintheto. A Schematron azonban az Extensible Markup Language (XML) fakhoz mukodik, mig az OCL lehetove teszi a MOF-alapu modellek es metamodellek (pl. XML metaadatcsere (XMI) fak). Mas szavakkal, az OCL az UML-hez vagy a MOF-hoz hasonloan kapcsolodik, mint a Schematron az XML-hez. (A Schematron XPath segitsegevel navigal az XML-fakon belul.)
Mivel egy modellspecifikacios nyelv, amely lehetove teszi a tervezok szamara, hogy egy modellt vagy metamodellt mellekhatasmentes annotaciokkal diszitsenek, az OCL helyettesitheto olyan nyelvekkel, mint az Alloy. Az automatikus OCL-generalas elvileg lehetseges termeszetes nyelvbol.[1]
| Kenyszer | OCL ekvivalens |
|---|---|
| Az ember eletkora nem negativ. | context Person inv : self.age >=0
|
| Az ember fiatalabb a szuleinel. | context Person inv : self.parents->forAll(p|p.age>self.age)
|
| Egy szuletesnap utan az ember egy evvel idosebb lesz. | context Person::hasBirthday() post : self.age=self.age@pre+1
|
| Egy szemelynek maximum 2 szuloje van. | context Person inv : self.parents->size()<=2
|
| Miutan valakinek gyereke van, a gyerekkeszlete nem ures, es nagyobb, mint korabban. | context Person::getsChild() post : self.childs->notEmpty() and self.childs->size() > self.childs@pre->size()
|
| Csak nagykoru lehet auto tulajdonosa. | context Person inv : self.age<18 implies self.cars->isEmpty()
|
| Az auto elso regisztracioja nem lehet megepitese elott. | context Auto inv : self.registration>=self.constructionYear
|
| Minden szemelynek, akinek van autoja, van legalabb egy autoja, amely fiatalabb, mint a szemely. | context Person inv : self.cars->notEmpty() implies self.cars->exists( c | Calendar. YEAR - c.constructionYear < self.age)
|
| Senki sem lehet a sajat szuloje. | context Person inv : self.parents->excludes(self)
|
| Legalabb egy szemelynek van autoja. | context Person inv : Person.allInstances()->exists(p | p.cars->size() > 0)
|
Jegyzetek
[szerkesztes]- | Imran Sarwar Bajwa (2010. oktober 1.). ,,OCL Constraints Generation from Natural Language Specification, 2010", Kiado: IEEE. DOI:10.1109/EDOC.2010.33.
Forditas
[szerkesztes]Ez a szocikk reszben vagy egeszben az Object Constraint Language cimu angol Wikipedia-szocikk forditasan alapul. Az eredeti cikk szerkesztoit annak laptortenete sorolja fel. Ez a jelzes csupan a megfogalmazas eredetet es a szerzoi jogokat jelzi, nem szolgal a cikkben szereplo informaciok forrasmegjelolesekent.
Tovabbi informaciok
[szerkesztes]- OMG OCL-specifikacio
- OCL portal - Az OCL-rel kapcsolatos informaciok kozpontja
- A CSUSB Szamitastechnikai Tanszekenek OCL-oldala Archivalva 2022. julius 8-i datummal a Wayback Machine-ben (rovid OCL 2.0 szintaxis)
- Octopus: OCL-eszkoz a preciz UML-specifikaciokhoz (OCL-ellenorzo)
- Dresden OCL Toolkit Archivalva 2017. augusztus 12-i datummal a Wayback Machine-ben (OCL Toolkit, kulonfele OCL-hez kapcsolodo kiadvanyok)
- HOL-OCL (Interaktiv tetelellenorzo kornyezet OCL-hez, kulonfele OCL-hez kapcsolodo publikaciok)
- OCL for Java oktatoanyag a ParlezUML-on
- Cikk az EMF OCL hasznalatarol Java-kodban
- UML hivatkozasi oldal a cetus-links.org oldalon
- USE (UML-alapu specifikacios kornyezet) (OCL-eszkoz a modellellenorzeshez, kulonfele OCL-hez kapcsolodo kiadvanyok)
- OCL-oktatoanyag
- NL2OCL (OCL-eszkoz invarians generalashoz NL-bol)