Кіріспе

Декларативтік тіл

Объектік шектеу тілі (ОКЛ) – IBM компаниясында жасалған және қазір UML стандартының бөлігі болып табылатын Бірыңғай модельдеу тілі (UML) модельдеріне қатысты ережелерді сипаттайтын декларативтік тіл. Алғашқыда ОКЛ – UML үшін формалды спецификация тілінің кеңейтімі болды. Қазір ОКЛ кез келген Meta Object Facility (MOF) Объектік басқару тобы (OMG) мета-моделімен, соның ішінде UML-мен де қолданылуы мүмкін. Объектік шектеу тілі – диаграммалық нотация арқылы басқаша жазылмайтын кез келген MOF моделіне немесе мета-модельге шектеулер мен объектілерге сұраныс жасау өрнектерін ұсынатын нақты мәтіндік тіл. ОКЛ – модельдерді трансформациялау үшін жаңа OMG стандартының маңызды құралы, Сұраулар/Көріністер/Трансформациялар (QVT) спецификациясы.

ОКЛ және UML

OCL, UML-ді күрделі математика қолданудың қиындығына немесе табиғи тілдің анықсыздығына ұшырамаған өрнектермен толықтырады. OCL сондай-ақ, граф негізіндегі модельдер үшін навигация тілі болып табылады.

ОКЛ және МОФ

OCL мета-объектілік модельді мета-элементтерімен байланыстырылған талаптар арқылы дәлдейді.

ОКЛ және QVT

Модельдік басқару инженериясы (MDE) немесе модельдік басқару архитектурасы үшін модельдік трансформациялау ұғымы ерекше маңызды. OMG модельдік трансформациялау үшін MOF/QVT немесе қысқаша QVT деп аталатын арнайы стандартты анықтады. Қазіргі уақытта GReAT, VIATRA немесе Tefkat сияқты бірнеше модельдік трансформациялау тілдері қолданыста, олар QVT стандартына әртүрлі деңгейде сәйкес келеді. Осы тілдердің көпшілігі QVT стандартына сәйкестіктің негізгі бөлігі болып табылатын OCL негізінде құрылған.

Баламалар

Ережеге негізделген валидациялау тілі болғандықтан, Schematron OCL-ге балама ретінде қарастырылуы мүмкін. Алайда Schematron кеңейтілген таңбалау тілі (XML) ағаштары үшін жұмыс істейді, ал OCL MOF негізделген модельдер мен метамодельдерді (яғни XML метадеректер алмасуы (XMI) ағаштарын) пайдалануға мүмкіндік береді. Басқаша айтқанда, OCL UML немесе MOF-ке Схематроның XML-ге қатынасы сияқты қатысты. (Шематронда XML ағаштарында жүруге XPath қолданылады.) OCL модельді немесе метамодельді қосымша әсерсіз түсіндірмелермен безендіруге мүмкіндік беретін модельді сипаттау тілі болғандықтан, Alloy сияқты тілдермен алмастырылуы мүмкін. Табиғи тілден автоматты OCL генерациясы принципиалды түрде мүмкін.

+ Мысалдар
Кедергі OCL эквиваленті
Адамның жасы теріс емес.
контекст Person inv: self.age >= 0
Адам ата-анасынан жас.
контекст Person inv: self.parents > forAll(p | p.age > self.age)
Туған күннен кейін адам бір жасқа үлкен болады.
контекст Person::hasBirthday post: self.age = self.age@pre + 1
Адамның ең көп дегенде екі ата-анасы бар.
контекст Person inv: self.parents > size <= 2
Біреу бала туғаннан кейін оның балалар жиынтығы бос емес, және ол бұрынғыдан үлкен.
контекст Person::getsChild post: self.childs > notEmpty and self.childs > size > self.childs@pre > size
Автокөлік тек ересектерге ғана тиесілі болуы мүмкін.
контекст Person inv: self.age < 18 implies self.cars > isEmpty
Автокөліктің алғашқы тіркеуі оның құрастырылуынан бұрын болмайды.
контекст Auto inv: self.registration >= self.constructionYear
Автокөлігі бар әрбір адамның өзінен жас автокөлігі бар.
контекст Person inv: self.cars > notEmpty implies self.cars > exists(c | Calendar.YEAR c.constructionYear < self.age)
Ешкім өзінің ата-анасы бола алмайды.
контекст Person inv: self.parents > excludes(self)
Кем дегенде бір адам автокөлікке ие.
контекст Person inv: Person.allInstances > exists(p | p.cars > size > 0)

Ұзартулар

Eclipse OCL стандартты OCL-ді қосымша операторлармен және Карталар түрімен кеңейтеді. AgileUML стандартты OCL-ді Карта және Функция түрлерімен кеңейтеді. Бұл кеңейтулер Python және Swift сияқты қазіргі заманғы бағдарламалау тілдеріндегі карталар мен функциялар түрлерімен үйлесімді.