Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Декларативтік тіл
Declarative language
Объектік шектеу тілі (ОКЛ) – IBM компаниясында жасалған және қазір UML стандартының бөлігі болып табылатын Бірыңғай модельдеу тілі (UML) модельдеріне қатысты ережелерді сипаттайтын декларативтік тіл. Алғашқыда ОКЛ – UML үшін формалды спецификация тілінің кеңейтімі болды. Қазір ОКЛ кез келген Meta Object Facility (MOF) Объектік басқару тобы (OMG) мета-моделімен, соның ішінде UML-мен де қолданылуы мүмкін. Объектік шектеу тілі – диаграммалық нотация арқылы басқаша жазылмайтын кез келген MOF моделіне немесе мета-модельге шектеулер мен объектілерге сұраныс жасау өрнектерін ұсынатын нақты мәтіндік тіл. ОКЛ – модельдерді трансформациялау үшін жаңа OMG стандартының маңызды құралы, Сұраулар/Көріністер/Трансформациялар (QVT) спецификациясы.
The Object Constraint Language (OCL) is a declarative language describing rules applying to Unified Modeling Language (UML) models developed at IBM and is now part of the UML standard. Initially, OCL was merely a formal specification language extension for UML. OCL may now be used with any Meta Object Facility (MOF) Object Management Group (OMG) meta model, including UML. The Object Constraint Language is a precise text language that provides constraint and object query expressions on any MOF model or meta model that cannot otherwise be expressed by diagrammatic notation. OCL is a key component of the new OMG standard recommendation for transforming models, the Queries/Views/Transformations (QVT) specification.
ОКЛ және UML
OCL, UML-ді күрделі математика қолданудың қиындығына немесе табиғи тілдің анықсыздығына ұшырамаған өрнектермен толықтырады. OCL сондай-ақ, граф негізіндегі модельдер үшін навигация тілі болып табылады.
OCL supplements UML by providing expressions that have neither the ambiguities of natural language nor the inherent difficulty of using complex mathematics. OCL is also a navigation language for graph based models.
ОКЛ және МОФ
OCL мета-объектілік модельді мета-элементтерімен байланыстырылған талаптар арқылы дәлдейді.
OCL makes a Meta Object Facility model more precise by associating assertions with its meta elements.
ОКЛ және QVT
Модельдік басқару инженериясы (MDE) немесе модельдік басқару архитектурасы үшін модельдік трансформациялау ұғымы ерекше маңызды. OMG модельдік трансформациялау үшін MOF/QVT немесе қысқаша QVT деп аталатын арнайы стандартты анықтады. Қазіргі уақытта GReAT, VIATRA немесе Tefkat сияқты бірнеше модельдік трансформациялау тілдері қолданыста, олар QVT стандартына әртүрлі деңгейде сәйкес келеді. Осы тілдердің көпшілігі QVT стандартына сәйкестіктің негізгі бөлігі болып табылатын OCL негізінде құрылған.
Of particular importance to Model Driven Engineering (MDE) or model driven architecture is the notion of Model transformation. The OMG has defined a specific standard for model transformation called MOF/QVT or in short QVT. Several model transformation languages like GReAT, VIATRA, or Tefkat are presently available, with different levels of compliance with the QVT standard. Many of these languages are built on top of OCL, which is the main part of the QVT compliance.
Баламалар
Ережеге негізделген валидациялау тілі болғандықтан, Schematron OCL-ге балама ретінде қарастырылуы мүмкін. Алайда Schematron кеңейтілген таңбалау тілі (XML) ағаштары үшін жұмыс істейді, ал OCL MOF негізделген модельдер мен метамодельдерді (яғни XML метадеректер алмасуы (XMI) ағаштарын) пайдалануға мүмкіндік береді. Басқаша айтқанда, OCL UML немесе MOF-ке Схематроның XML-ге қатынасы сияқты қатысты. (Шематронда XML ағаштарында жүруге XPath қолданылады.) OCL модельді немесе метамодельді қосымша әсерсіз түсіндірмелермен безендіруге мүмкіндік беретін модельді сипаттау тілі болғандықтан, Alloy сияқты тілдермен алмастырылуы мүмкін. Табиғи тілден автоматты OCL генерациясы принципиалды түрде мүмкін.
Being a rule based validation language, Schematron may be considered an alternative to OCL. However Schematron works for Extensible Markup Language (XML) trees while OCL makes it possible to navigate MOF based models and meta models (i. e. XML Metadata Interchange (XMI) trees). In other words, OCL relates to UML or MOF similarly to how Schematron relates to XML. (Note that Schematron uses XPath to navigate inside the XML trees. )Being a model specification language permitting designers to decorate a model or a meta model with side effect free annotations, OCL could be replaced by languages like Alloy. Automated OCL generation is in principle possible from natural language. + ExamplesConstraintOCL EquivalentThe age of a person is not negative. context Person inv: self. age >=0A person is younger than its parents. context Person inv: self. parents >forAll(p|p. age>self. age)After a birthday, a person becomes one year older. context Person::hasBirthday post: self. age=self. age@pre+1A Person has 2 parents at max. context Person inv: self. parents >size <=2After somebody has a child, his/her child set is not empty, and it is larger than before. context Person::getsChild post: self. childs >notEmpty and self. childs >size > self. childs@pre >size Only an adult can be owner of a car. context Person inv: self. age<18 implies self. cars >isEmpty The first registration of a car can not be before it is built. context Auto inv: self. registration>=self. constructionYearEvery Person that has a car has at least one car which is younger than the Person. context Person inv: self. cars >notEmpty implies self. cars >exists( c | Calendar. YEAR c. constructionYear < self. age)Nobody can be his/her own parent. context Person inv: self. parents >excludes(self)There's at least one Person which owns a car. context Person inv: Person. allInstances >exists(p | p. cars >size > 0)
+ Мысалдар
Кедергі 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)
Being a rule based validation language, Schematron may be considered an alternative to OCL. However Schematron works for Extensible Markup Language (XML) trees while OCL makes it possible to navigate MOF based models and meta models (i. e. XML Metadata Interchange (XMI) trees). In other words, OCL relates to UML or MOF similarly to how Schematron relates to XML. (Note that Schematron uses XPath to navigate inside the XML trees. )Being a model specification language permitting designers to decorate a model or a meta model with side effect free annotations, OCL could be replaced by languages like Alloy. Automated OCL generation is in principle possible from natural language. + ExamplesConstraintOCL EquivalentThe age of a person is not negative. context Person inv: self. age >=0A person is younger than its parents. context Person inv: self. parents >forAll(p|p. age>self. age)After a birthday, a person becomes one year older. context Person::hasBirthday post: self. age=self. age@pre+1A Person has 2 parents at max. context Person inv: self. parents >size <=2After somebody has a child, his/her child set is not empty, and it is larger than before. context Person::getsChild post: self. childs >notEmpty and self. childs >size > self. childs@pre >size Only an adult can be owner of a car. context Person inv: self. age<18 implies self. cars >isEmpty The first registration of a car can not be before it is built. context Auto inv: self. registration>=self. constructionYearEvery Person that has a car has at least one car which is younger than the Person. context Person inv: self. cars >notEmpty implies self. cars >exists( c | Calendar. YEAR c. constructionYear < self. age)Nobody can be his/her own parent. context Person inv: self. parents >excludes(self)There's at least one Person which owns a car. context Person inv: Person. allInstances >exists(p | p. cars >size > 0)
Ұзартулар
Eclipse OCL стандартты OCL-ді қосымша операторлармен және Карталар түрімен кеңейтеді. AgileUML стандартты OCL-ді Карта және Функция түрлерімен кеңейтеді. Бұл кеңейтулер Python және Swift сияқты қазіргі заманғы бағдарламалау тілдеріндегі карталар мен функциялар түрлерімен үйлесімді.
Eclipse OCL extends Standard OCL with additional operators and a type for Maps. AgileUML extends Standard OCL with Map and Function types. These extensions are consistent with the map and function types present in modern programming languages such as Python and Swift.