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

From Vigyanwiki
(Created page with "{{Short description|Declarative language}} {{Update|date=April 2018}} ऑब्जेक्ट कॉन्स्ट्रेंट लैंग्वेज (ओसीएल)...")
 
No edit summary
Line 1: Line 1:
{{Short description|Declarative language}}
{{Short description|Declarative language}}ऑब्जेक्ट कॉन्स्ट्रेंट लैंग्वेज (ओसीएल) एक [[घोषणात्मक भाषा]] है जो [[आईबीएम]] में विकसित [[ एकीकृत मॉडलिंग भाषा ]] (यूएमएल) मॉडल पर प्रयुक्त होने वाले नियमों का वर्णन करती है और अब यूएमएल मानक का हिस्सा है। प्रारंभ में ओसीएल यूएमएल के लिए केवल एक औपचारिक विनिर्देश भाषा विस्तार था।<ref>Object Management Group (OMG); ''Object Constraint Language Specification'', Chapter 7 of ''OMG Unified Modeling Language Specification'', Version 1.3, March 2000 (first edition)</ref> ओसीएल का उपयोग अब यूएमएल सहित किसी भी [[मेटा-ऑब्जेक्ट सुविधा]] (एमओएफ) [[ लक्ष्य प्रबंधन समूह ]] (ओएमजी) [[मेटामॉडलिंग]] या मेटा-मॉडल के साथ किया जा सकता है।<ref>Object Management Group (OMG); ''Object Constraint Language OMG Available Specification Version 2.0'', May 2006</ref> ऑब्जेक्ट बाधा भाषा एक स्पष्ट पाठ भाषा है जो किसी भी एमओएफ मॉडल या मेटा-मॉडल पर बाधा और ऑब्जेक्ट क्वेरी अभिव्यक्ति प्रदान करती है जिसे अन्यथा आरेखीय नोटेशन द्वारा व्यक्त नहीं किया जा सकता है। ओसीएल, मॉडलों को बदलने के लिए नई ओएमजी मानक अनुशंसा, क्वेरीज़/व्यू/ट्रांसफ़ॉर्मेशन ([[ QVT | क्यूवीटी]]) विनिर्देश का एक प्रमुख घटक है।
{{Update|date=April 2018}}
 
ऑब्जेक्ट कॉन्स्ट्रेंट लैंग्वेज (ओसीएल) एक [[घोषणात्मक भाषा]] है जो [[आईबीएम]] में विकसित [[ एकीकृत मॉडलिंग भाषा ]] (यूएमएल) मॉडल पर लागू होने वाले नियमों का वर्णन करती है और अब यूएमएल मानक का हिस्सा है। प्रारंभ में, ओसीएल यूएमएल के लिए केवल एक औपचारिक विनिर्देश भाषा विस्तार था।<ref>Object Management Group (OMG); ''Object Constraint Language Specification'', Chapter 7 of ''OMG Unified Modeling Language Specification'', Version 1.3, March 2000 (first edition)</ref> ओसीएल का उपयोग अब यूएमएल सहित किसी भी [[मेटा-ऑब्जेक्ट सुविधा]] (एमओएफ) [[ लक्ष्य प्रबंधन समूह ]] (ओएमजी) [[मेटामॉडलिंग]]|मेटा-मॉडल के साथ किया जा सकता है।<ref>Object Management Group (OMG); ''Object Constraint Language OMG Available Specification Version 2.0'', May 2006</ref> ऑब्जेक्ट बाधा भाषा एक सटीक पाठ भाषा है जो किसी भी एमओएफ मॉडल या मेटा-मॉडल पर बाधा और ऑब्जेक्ट क्वेरी अभिव्यक्ति प्रदान करती है जिसे अन्यथा आरेखीय नोटेशन द्वारा व्यक्त नहीं किया जा सकता है। ओसीएल, मॉडलों को बदलने के लिए नई ओएमजी मानक अनुशंसा, क्वेरीज़/व्यू/ट्रांसफ़ॉर्मेशन ([[ QVT ]]) विनिर्देश का एक प्रमुख घटक है।


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


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


# एक संदर्भ जो उस सीमित स्थिति को परिभाषित करता है जिसमें कथन मान्य है
# एक संदर्भ जो उस सीमित स्थिति को परिभाषित करता है जिसमें कथन मान्य है
Line 17: Line 14:


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


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


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


== विकल्प ==
== विकल्प ==
नियम-आधारित सत्यापन भाषा होने के कारण, [[स्कीमेट्रोन]] को OCL का एक विकल्प माना जा सकता है। हालाँकि स्कीमट्रॉन एक्स्टेंसिबल मार्कअप लैंग्वेज XML ट्री|(XML) ट्री के लिए काम करता है जबकि OCL मेटा-ऑब्जेक्ट सुविधा-आधारित मॉडल और मेटा-मॉडल (यानी [[एक्सएमएल मेटाडेटा इंटरचेंज]] (XML मेटाडेटा इंटरचेंज) ट्री) को नेविगेट करना संभव बनाता है। दूसरे शब्दों में, ओसीएल यूनिफाइड मॉडलिंग लैंग्वेज या एमओएफ से उसी तरह संबंधित है जैसे स्कीमट्रॉन [[एक्सएमएल]] से संबंधित है। (ध्यान दें कि स्कीमट्रॉन XML पेड़ों के अंदर नेविगेट करने के लिए [[XPath]] का उपयोग करता है।)<br>एक मॉडल विनिर्देश भाषा होने के नाते डिजाइनरों को एक मॉडल या मेटा-मॉडल को साइड-इफ़ेक्ट-मुक्त एनोटेशन के साथ सजाने की अनुमति मिलती है, OCL को [[मिश्र धातु भाषा]] जैसी भाषाओं द्वारा प्रतिस्थापित किया जा सकता है . स्वचालित OCL पीढ़ी सैद्धांतिक रूप से प्राकृतिक भाषा से संभव है।<ref name="NL2OCL">{{cite journal| author=Imran Sarwar Bajwa|title=OCL Constraints Generation from Natural Language Specification, 2010|publisher =[[IEEE]]|date=October 2010|doi=10.1109/EDOC.2010.33|s2cid=7495256}}</ref>
नियम-आधारित सत्यापन भाषा होने के कारण, [[स्कीमेट्रोन]] को ओसीएल का एक विकल्प माना जा सकता है। हालाँकि स्कीमट्रॉन एक्स्टेंसिबल मार्कअप लैंग्वेज एक्सएमएल ट्री|(एक्सएमएल) ट्री के लिए काम करता है जबकि ओसीएल मेटा-ऑब्जेक्ट सुविधा-आधारित मॉडल और मेटा-मॉडल (अथार्त [[एक्सएमएल मेटाडेटा इंटरचेंज]] (एक्सएमएल मेटाडेटा इंटरचेंज) ट्री) को नेविगेट करना संभव बनाता है। दूसरे शब्दों में, ओसीएल यूनिफाइड मॉडलिंग लैंग्वेज या एमओएफ से उसी तरह संबंधित है जैसे स्कीमट्रॉन [[एक्सएमएल]] से संबंधित है। (ध्यान दें कि स्कीमट्रॉन एक्सएमएल पेड़ों के अंदर नेविगेट करने के लिए [[XPath|एक्सपाथ]] का उपयोग करता है।)<br>एक मॉडल विनिर्देश भाषा होने के नाते डिजाइनरों को एक मॉडल या मेटा-मॉडल को साइड-इफ़ेक्ट-मुक्त एनोटेशन के साथ सजाने की अनुमति मिलती है ओसीएल को [[मिश्र धातु भाषा]] जैसी भाषाओं द्वारा प्रतिस्थापित किया जा सकता है . स्वचालित ओसीएल पीढ़ी सैद्धांतिक रूप से प्राकृतिक भाषा से संभव है।<ref name="NL2OCL">{{cite journal| author=Imran Sarwar Bajwa|title=OCL Constraints Generation from Natural Language Specification, 2010|publisher =[[IEEE]]|date=October 2010|doi=10.1109/EDOC.2010.33|s2cid=7495256}}</ref>


{| class="wikitable"
{| class="wikitable"
|+ Examples
|+ उदाहरण
!Constraint
!बाध्यता
!OCL Equivalent
!ओसीएल Equivalent
|-
|-
|The age of a person is not negative.
|किसी व्यक्ति की उम्र नकारात्मक नहीं होती.
|<code>'''context''' Person '''inv''': self.age >=0</code>
|<code>'''context''' Person '''inv''': self.age >=0</code>
|-
|-
|A person is younger than its parents.
|एक व्यक्ति अपने माता-पिता से छोटा है।
|<code>'''context''' Person '''inv'''<nowiki>: self.parents->forAll(p|p.age>self.age)</nowiki></code>
|<code>'''context''' Person '''inv'''<nowiki>: self.parents->forAll(p|p.age>self.age)</nowiki></code>
|-
|-
|After a birthday, a person becomes one year older.
|जन्मदिन के बाद व्यक्ति एक वर्ष का हो जाता है।
|<code>'''context''' Person::hasBirthday() '''post''': self.age=self.age@pre+1</code>
|<code>'''context''' Person::hasBirthday() '''post''': self.age=self.age@pre+1</code>
|-
|-
|A Person has 2 parents at max.
|एक व्यक्ति के अधिकतम 2 माता-पिता होते हैं।
|<code>'''context''' Person '''inv''': self.parents->size()<=2</code>
|<code>'''context''' Person '''inv''': self.parents->size()<=2</code>
|-
|-
|After somebody has a child, his/her child-set is not empty, and it is larger than before.
|किसी के बच्चा होने के बाद उसका बच्चा-सेट खाली नहीं रहता और वह पहले से बड़ा हो जाता है।
|<code>'''context''' Person::getsChild() '''post''': self.childs->notEmpty() and self.childs->size() > self.childs@pre->size()</code>
|<code>'''context''' Person::getsChild() '''post''': self.childs->notEmpty() and self.childs->size() > self.childs@pre->size()</code>
|-
|-
|Only an adult can be owner of a car.
|केवल एक वयस्क ही कार का मालिक हो सकता है।
|<code>'''context''' Person '''inv''': self.age<18 '''implies''' self.cars->isEmpty()</code>
|<code>'''context''' Person '''inv''': self.age<18 '''implies''' self.cars->isEmpty()</code>
|-
|-
|The first registration of a car can not be before it is built.
|किसी कार का पहला पंजीकरण उसके बनने से पहले नहीं हो सकता।
|<code>'''context''' Auto '''inv''': self.registration>=self.constructionYear</code>
|<code>'''context''' Auto '''inv''': self.registration>=self.constructionYear</code>
|-
|-
|Every Person that has a car has at least one car which is younger than the Person.
|प्रत्येक व्यक्ति जिसके पास कार है उसके पास कम से कम एक कार है जो उस व्यक्ति से छोटी है।
|<code>'''context''' Person '''inv''': self.cars->notEmpty() '''implies'''<nowiki> self.cars->exists( c | </nowiki>'''Calendar.YEAR''' - c.constructionYear < self.age)</code>
|<code>'''context''' Person '''inv''': self.cars->notEmpty() '''implies'''<nowiki> self.cars->exists( c | </nowiki>'''Calendar.YEAR''' - c.constructionYear < self.age)</code>
|-
|-
|Nobody can be his/her own parent.
|कोई भी अपना माता-पिता नहीं हो सकता.
|<code>'''context''' Person '''inv''': self.parents->excludes(self)</code>
|<code>'''context''' Person '''inv''': self.parents->excludes(self)</code>
|-
|-
|There's at least one Person which owns a car.
|कम से कम एक व्यक्ति ऐसा है जिसके पास कार है।
|<code style="white-space: nowrap">'''context''' Person '''inv'''<nowiki>: Person.allInstances()->exists(p | p.cars->size() > 0)</nowiki></code>
|<code style="white-space: nowrap">'''context''' Person '''inv'''<nowiki>: Person.allInstances()->exists(p | p.cars->size() > 0)</nowiki></code>
|}
|}
Line 67: Line 64:
== एक्सटेंशन ==
== एक्सटेंशन ==


ग्रहण ओसीएल <ref>{{cite web | url=https://projects.eclipse.org/projects/modeling.mdt.ocl | title=Eclipse OCL™ (Object Constraint Language) | date=31 January 2013 }}</ref> अतिरिक्त ऑपरेटरों और मैप्स के लिए एक प्रकार के साथ मानक OCL का विस्तार करता है। AgileUML मानचित्र और फ़ंक्शन प्रकारों के साथ मानक OCL का विस्तार करता है।<ref>{{cite book | chapter-url=https://link.springer.com/chapter/10.1007/978-3-030-89247-0_8 | doi=10.1007/978-3-030-89247-0_8 | chapter=Extending OCL with Map and Function Types | title=सॉफ्टवेयर इंजीनियरिंग के बुनियादी सिद्धांत| series=Lecture Notes in Computer Science | year=2021 | last1=Lano | first1=Kevin | last2=Kolahdouz-Rahimi | first2=Shekoufeh | volume=12818 | pages=108–123 | isbn=978-3-030-89246-3 | s2cid=239029860 }}</ref> ये एक्सटेंशन आधुनिक प्रोग्रामिंग भाषाओं जैसे पायथन और स्विफ्ट में मौजूद मैप और फ़ंक्शन प्रकारों के अनुरूप हैं।
ग्रहण ओसीएल <ref>{{cite web | url=https://projects.eclipse.org/projects/modeling.mdt.ocl | title=Eclipse OCL™ (Object Constraint Language) | date=31 January 2013 }}</ref> अतिरिक्त ऑपरेटरों और मैप्स के लिए एक प्रकार के साथ मानक ओसीएल का विस्तार करता है। एजाइलयूएमएल मानचित्र और फ़ंक्शन प्रकारों के साथ मानक ओसीएल का विस्तार करता है।<ref>{{cite book | chapter-url=https://link.springer.com/chapter/10.1007/978-3-030-89247-0_8 | doi=10.1007/978-3-030-89247-0_8 | chapter=Extending OCL with Map and Function Types | title=सॉफ्टवेयर इंजीनियरिंग के बुनियादी सिद्धांत| series=Lecture Notes in Computer Science | year=2021 | last1=Lano | first1=Kevin | last2=Kolahdouz-Rahimi | first2=Shekoufeh | volume=12818 | pages=108–123 | isbn=978-3-030-89246-3 | s2cid=239029860 }}</ref> ये एक्सटेंशन आधुनिक प्रोग्रामिंग भाषाओं जैसे पायथन और स्विफ्ट में उपस्थित मैप और फ़ंक्शन प्रकारों के अनुरूप हैं।


== यह भी देखें ==
== यह भी देखें ==
Line 74: Line 71:
* [[डोमेन विशिष्ट भाषा]] (डीएसएल)
* [[डोमेन विशिष्ट भाषा]] (डीएसएल)
* [[डोमेन-विशिष्ट मॉडलिंग]] (डीएसएम)
* [[डोमेन-विशिष्ट मॉडलिंग]] (डीएसएम)
* [[ग्रहण (सॉफ्टवेयर)]] [https://web.archive.org/web/20060407092135/http://www.eclipse.org/gmt/ GMT प्रोजेक्ट]
* [[ग्रहण (सॉफ्टवेयर)]] [https://web.archive.org/web/20060407092135/http://www.eclipse.org/gmt/ जीएमटी प्रोजेक्ट]
* [[गेलो अभिव्यक्ति भाषा]]
* [[गेलो अभिव्यक्ति भाषा]]
* एकीकृत [[मॉडलिंग भाषा]] शब्दों की शब्दावली
* एकीकृत [[मॉडलिंग भाषा]] शब्दों की शब्दावली
* [[जानबूझकर प्रोग्रामिंग]] (आईपी)
* [[जानबूझकर प्रोग्रामिंग]] (आईपी)
* [[यूएमएल उपकरण]]ों की सूची
* [[यूएमएल उपकरण]] की सूची
* [[मेटा-मॉडलिंग]]
* [[मेटा-मॉडलिंग]]
* [[मेटा-मॉडलिंग तकनीक]]
* [[मेटा-मॉडलिंग तकनीक]]
Line 86: Line 83:
* मॉडल-संचालित वास्तुकला (एमडीए)
* मॉडल-संचालित वास्तुकला (एमडीए)
* मॉडल संचालित इंजीनियरिंग (एमडीई)
* मॉडल संचालित इंजीनियरिंग (एमडीई)
* [[मॉडल [[परिवर्तन भाषा]]]] (MTL)
* [[मॉडल [[परिवर्तन भाषा]]]] (एमटीएल)
* मॉडलिंग भाषा
* मॉडलिंग भाषा
* मॉडलिंग परिप्रेक्ष्य
* मॉडलिंग परिप्रेक्ष्य
Line 104: Line 101:


== बाहरी संबंध ==
== बाहरी संबंध ==
* [http://www.omg.org/spec/OCL/ OMG OCL specification]
* [http://www.omg.org/spec/OCL/ OMG ओसीएल specification]
* [http://www-st.inf.tu-dresden.de/ocl/ OCL Portal - The center for OCL related information]
* [http://www-st.inf.tu-dresden.de/ocl/ ओसीएल Portal - The center for ओसीएल related information]
* [http://www.csci.csusb.edu/dick/samples/ocl.html OCL page of Computer Science Dept. of CSUSB] (brief OCL 2.0 syntax)
* [http://www.csci.csusb.edu/dick/samples/ocl.html ओसीएल page of Computer Science Dept. of CSUSB] (brief ओसीएल 2.0 syntax)
* [http://octopus.sourceforge.net/ Octopus: OCL Tool for Precise Uml Specifications] (OCL checker)
* [http://octopus.sourceforge.net/ Octopus: ओसीएल Tool for Precise Uml Specifications] (ओसीएल checker)
* [http://www.dresden-ocl.org/index.php/DresdenOCL Dresden OCL Toolkit] (OCL Toolkit, various OCL related publications)
* [http://www.dresden-ocl.org/index.php/DresdenOCL Dresden ओसीएल Toolkit] (ओसीएल Toolkit, various ओसीएल related publications)
* [http://www.brucker.ch/projects/hol-ocl/ HOL-OCL] (An interactive theorem proof environment for OCL, various OCL related publications)
* [http://www.brucker.ch/projects/hol-ocl/ HOL-]ओसीएल (An interactive theorem proof environment for OCL, various ओसीएल related publications)
* [https://web.archive.org/web/20060220003552/http://www.parlezuml.com/tutorials/umlforjava/java_ocl.pdf OCL for Java tutorial on ParlezUML]  
* [https://web.archive.org/web/20060220003552/http://www.parlezuml.com/tutorials/umlforjava/java_ocl.pdf ओसीएल for Java tutorial on ParlezUML]
* [http://www.eclipse.org/articles/article.php?file=Article-EMF-Codegen-with-OCL/index.html Article on using EMF's OCL in Java code]
* [http://www.eclipse.org/articles/article.php?file=Article-EMF-Codegen-with-OCL/index.html Article on using EMF's ओसीएल in Java code]
* [https://web.archive.org/web/20060831031409/http://www.cetus-links.org/oo_uml.html UML link page on cetus-links.org]
* [https://web.archive.org/web/20060831031409/http://www.cetus-links.org/oo_uml.html UML link page on cetus-links.org]
* [http://sourceforge.net/projects/useocl/ USE (UML-based Specification Environment)] (OCL Tool for model validation, various OCL related publications)
* [http://sourceforge.net/projects/useocl/ USE (UML-based Specification Environment)] (ओसीएल Tool for model validation, various ओसीएल related publications)
* [http://modeling-languages.com/ocl-tutorial/ OCL tutorial]
* [http://modeling-languages.com/ocl-tutorial/ ओसीएल tutorial]
* [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5630350/ NL2OCL] (OCL Tool for invariant generation from NL)
* [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5630350/ NL2]ओसीएल (ओसीएल Tool for invariant generation from NL)


{{Query languages}}
{{Query languages}}

Revision as of 09:13, 18 July 2023

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

विवरण

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

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

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

संबंध

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

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

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

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

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

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

विकल्प

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

उदाहरण
बाध्यता ओसीएल Equivalent
किसी व्यक्ति की उम्र नकारात्मक नहीं होती. context Person inv: self.age >=0
एक व्यक्ति अपने माता-पिता से छोटा है। context Person inv: self.parents->forAll(p|p.age>self.age)
जन्मदिन के बाद व्यक्ति एक वर्ष का हो जाता है। context Person::hasBirthday() post: self.age=self.age@pre+1
एक व्यक्ति के अधिकतम 2 माता-पिता होते हैं। context Person inv: self.parents->size()<=2
किसी के बच्चा होने के बाद उसका बच्चा-सेट खाली नहीं रहता और वह पहले से बड़ा हो जाता है। context Person::getsChild() post: self.childs->notEmpty() and self.childs->size() > self.childs@pre->size()
केवल एक वयस्क ही कार का मालिक हो सकता है। context Person inv: self.age<18 implies self.cars->isEmpty()
किसी कार का पहला पंजीकरण उसके बनने से पहले नहीं हो सकता। context Auto inv: self.registration>=self.constructionYear
प्रत्येक व्यक्ति जिसके पास कार है उसके पास कम से कम एक कार है जो उस व्यक्ति से छोटी है। context Person inv: self.cars->notEmpty() implies self.cars->exists( c | Calendar.YEAR - c.constructionYear < self.age)
कोई भी अपना माता-पिता नहीं हो सकता. context Person inv: self.parents->excludes(self)
कम से कम एक व्यक्ति ऐसा है जिसके पास कार है। context Person inv: Person.allInstances()->exists(p | p.cars->size() > 0)


एक्सटेंशन

ग्रहण ओसीएल [4] अतिरिक्त ऑपरेटरों और मैप्स के लिए एक प्रकार के साथ मानक ओसीएल का विस्तार करता है। एजाइलयूएमएल मानचित्र और फ़ंक्शन प्रकारों के साथ मानक ओसीएल का विस्तार करता है।[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.


बाहरी संबंध