Dark Mode

Ugras a tartalomhoz

Object Constraint Language

Ellenorzott
A Wikipediabol, a szabad enciklopediabol

Valtozat allapota

Ez a lap egy ellenorzott valtozata

Ez a kozzetett valtozat, ellenorizve: 2023. majus 13.

Pontossagellenorzott

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:

  1. kontextus, amely meghatarozza azt a korlatozott helyzetet, amelyben az allitas ervenyes
  2. egy tulajdonsag, amely a kontextus nehany jellemzojet kepviseli (pl. ha a kontextus egy osztaly, akkor egy tulajdonsag lehet attributum)
  3. muvelet (pl. aritmetikai, halmazorientalt), amely manipulal vagy minosit egy tulajdonsagot, es
  4. 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]

Peldak
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]
  1. | 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]

Kapcsolodo szocikkek

[szerkesztes]