ऑब्जेक्ट कॉन्स्ट्रेंट लैंग्वेज

From Vigyanwiki
Revision as of 11:05, 10 July 2023 by alpha>Indicwiki (Created page with "{{Short description|Declarative language}} {{Update|date=April 2018}} ऑब्जेक्ट कॉन्स्ट्रेंट लैंग्वेज (ओसीएल)...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

ऑब्जेक्ट कॉन्स्ट्रेंट लैंग्वेज (ओसीएल) एक घोषणात्मक भाषा है जो आईबीएम में विकसित एकीकृत मॉडलिंग भाषा (यूएमएल) मॉडल पर लागू होने वाले नियमों का वर्णन करती है और अब यूएमएल मानक का हिस्सा है। प्रारंभ में, ओसीएल यूएमएल के लिए केवल एक औपचारिक विनिर्देश भाषा विस्तार था।[1] ओसीएल का उपयोग अब यूएमएल सहित किसी भी मेटा-ऑब्जेक्ट सुविधा (एमओएफ) लक्ष्य प्रबंधन समूह (ओएमजी) मेटामॉडलिंग|मेटा-मॉडल के साथ किया जा सकता है।[2] ऑब्जेक्ट बाधा भाषा एक सटीक पाठ भाषा है जो किसी भी एमओएफ मॉडल या मेटा-मॉडल पर बाधा और ऑब्जेक्ट क्वेरी अभिव्यक्ति प्रदान करती है जिसे अन्यथा आरेखीय नोटेशन द्वारा व्यक्त नहीं किया जा सकता है। ओसीएल, मॉडलों को बदलने के लिए नई ओएमजी मानक अनुशंसा, क्वेरीज़/व्यू/ट्रांसफ़ॉर्मेशन (QVT ) विनिर्देश का एक प्रमुख घटक है।

विवरण

ओसीएल सिंट्रॉपी (सॉफ्टवेयर) का वंशज है, जो दूसरी पीढ़ी की वस्तु-उन्मुख विश्लेषण और डिजाइन पद्धति है। OCL 1.4 परिभाषा एक बाधा भाषा निर्दिष्ट करती है। OCL 2.0 में, सामान्य ऑब्जेक्ट क्वेरी भाषा परिभाषाओं को शामिल करने के लिए परिभाषा का विस्तार किया गया है।

OCL स्टेटमेंट चार भागों में बनाए गए हैं:

  1. एक संदर्भ जो उस सीमित स्थिति को परिभाषित करता है जिसमें कथन मान्य है
  2. एक संपत्ति जो संदर्भ की कुछ विशेषताओं का प्रतिनिधित्व करती है (उदाहरण के लिए, यदि संदर्भ एक वर्ग है, तो एक संपत्ति एक विशेषता हो सकती है)
  3. एक ऑपरेशन (उदाहरण के लिए, अंकगणित, सेट-उन्मुख) जो किसी संपत्ति में हेरफेर या योग्यता प्राप्त करता है, और
  4. कीवर्ड (उदाहरण के लिए, यदि, फिर, अन्यथा, और, या, नहीं, तात्पर्य) जिनका उपयोग सशर्त अभिव्यक्तियों को निर्दिष्ट करने के लिए किया जाता है।

संबंध

ओसीएल और यूएमएल

ओसीएल एकीकृत मॉडलिंग भाषा को उन अभिव्यक्तियों को प्रदान करके पूरक करता है जिनमें न तो प्राकृतिक भाषा की अस्पष्टता है और न ही जटिल गणित का उपयोग करने की अंतर्निहित कठिनाई है। OCL ग्राफ़-आधारित मॉडलों के लिए एक नेविगेशन भाषा भी है।

ओसीएल और एमओएफ

ओसीएल अपने मेटा-तत्वों के साथ अभिकथनों को जोड़कर मेटा-ऑब्जेक्ट सुविधा मॉडल को अधिक सटीक बनाता है।

ओसीएल और क्यूवीटी

मॉडल संचालित इंजीनियरिंग (एमडीई) या मॉडल-संचालित वास्तुकला के लिए विशेष महत्व मॉडल परिवर्तन की धारणा है। ऑब्जेक्ट मैनेजमेंट ग्रुप ने मॉडल परिवर्तन के लिए एक विशिष्ट मानक परिभाषित किया है जिसे MOF/QVT या संक्षेप में QVT कहा जाता है। QVT मानक के अनुपालन के विभिन्न स्तरों के साथ GReAT, VIATRA, या Tefkat जैसी कई मॉडल परिवर्तन भाषाएँ वर्तमान में उपलब्ध हैं। इनमें से कई भाषाएँ OCL के शीर्ष पर बनाई गई हैं, जो QVT-अनुपालन का मुख्य भाग है।

विकल्प

नियम-आधारित सत्यापन भाषा होने के कारण, स्कीमेट्रोन को OCL का एक विकल्प माना जा सकता है। हालाँकि स्कीमट्रॉन एक्स्टेंसिबल मार्कअप लैंग्वेज XML ट्री|(XML) ट्री के लिए काम करता है जबकि OCL मेटा-ऑब्जेक्ट सुविधा-आधारित मॉडल और मेटा-मॉडल (यानी एक्सएमएल मेटाडेटा इंटरचेंज (XML मेटाडेटा इंटरचेंज) ट्री) को नेविगेट करना संभव बनाता है। दूसरे शब्दों में, ओसीएल यूनिफाइड मॉडलिंग लैंग्वेज या एमओएफ से उसी तरह संबंधित है जैसे स्कीमट्रॉन एक्सएमएल से संबंधित है। (ध्यान दें कि स्कीमट्रॉन XML पेड़ों के अंदर नेविगेट करने के लिए XPath का उपयोग करता है।)
एक मॉडल विनिर्देश भाषा होने के नाते डिजाइनरों को एक मॉडल या मेटा-मॉडल को साइड-इफ़ेक्ट-मुक्त एनोटेशन के साथ सजाने की अनुमति मिलती है, OCL को मिश्र धातु भाषा जैसी भाषाओं द्वारा प्रतिस्थापित किया जा सकता है . स्वचालित OCL पीढ़ी सैद्धांतिक रूप से प्राकृतिक भाषा से संभव है।[3]

Examples
Constraint OCL Equivalent
The age of a person is not negative. context Person inv: self.age >=0
A 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+1
A Person has 2 parents at max. context Person inv: self.parents->size()<=2
After 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.constructionYear
Every 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)


एक्सटेंशन

ग्रहण ओसीएल [4] अतिरिक्त ऑपरेटरों और मैप्स के लिए एक प्रकार के साथ मानक OCL का विस्तार करता है। AgileUML मानचित्र और फ़ंक्शन प्रकारों के साथ मानक OCL का विस्तार करता है।[5] ये एक्सटेंशन आधुनिक प्रोग्रामिंग भाषाओं जैसे पायथन और स्विफ्ट में मौजूद मैप और फ़ंक्शन प्रकारों के अनुरूप हैं।

यह भी देखें

संदर्भ

  1. Object Management Group (OMG); Object Constraint Language Specification, Chapter 7 of OMG Unified Modeling Language Specification, Version 1.3, March 2000 (first edition)
  2. Object Management Group (OMG); Object Constraint Language OMG Available Specification Version 2.0, May 2006
  3. Imran Sarwar Bajwa (October 2010). "OCL Constraints Generation from Natural Language Specification, 2010". IEEE. doi:10.1109/EDOC.2010.33. S2CID 7495256. {{cite journal}}: Cite journal requires |journal= (help)
  4. "Eclipse OCL™ (Object Constraint Language)". 31 January 2013.
  5. Lano, Kevin; Kolahdouz-Rahimi, Shekoufeh (2021). "Extending OCL with Map and Function Types". सॉफ्टवेयर इंजीनियरिंग के बुनियादी सिद्धांत. Lecture Notes in Computer Science. Vol. 12818. pp. 108–123. doi:10.1007/978-3-030-89247-0_8. ISBN 978-3-030-89246-3. S2CID 239029860.


बाहरी संबंध