अन्य लोगों ने भाषाओं के उदाहरणों के साथ "नहीं" का सही उत्तर दिया है। मुझे लगा कि मैं एक उदाहरण जोड़कर विस्तार कर सकता हूं कि कैसे ओओपी को शामिल किए बिना किसी भाषा में अपवादों को जोड़ा जाए।
मैं OZ के DSKL (घोषणात्मक अनुक्रमिक कर्नेल भाषा) के मामले में ऐसा करूंगा , एक भाषा जो इस तरह से अकादमिक सामान के लिए उपयुक्त है। DSKL (या DKL) को यहां (रैंडम सर्च रिजल्ट), स्टेटमेंट और वैल्यू भाग में देखा जा सकता है । सटीक परिभाषा महत्वपूर्ण नहीं है, इसके अलावा यह बहुत सरल भाषा है जिसमें कोई परिवर्तनीय चर नहीं हैं (वे घोषित किए गए हैं और बाद में बाध्य हैं), और कोई ओओपी नहीं बनाया गया है।
OOP को इस कर्नेल भाषा में भाषाई अमूर्त के रूप में भी नहीं जोड़ा जा सकता है। कर्नेल भाषा (न्यूनाम) में अद्वितीय नाम जोड़कर और स्थानीय स्कोपिंग का उपयोग करके, एनकैप्सुलेशन प्राप्त किया जा सकता है। या कर्नेल भाषा (न्यूसेल) के लिए एक परस्पर अवस्था को जोड़कर और स्थानीय स्कूपिंग का उपयोग करके उचित ओओपी के साथ एनकैप्सुलेशन प्राप्त किया जा सकता है। लेकिन इसे केवल निर्दिष्ट कर्नेल भाषा के साथ प्राप्त नहीं किया जा सकता है।
यदि हम कर्नेल भाषा में अपवाद जोड़ते हैं, तो हमारे पास कोई भी ओओपी-समर्थन वाली भाषा नहीं होगी, लेकिन अपवाद हैं। मुझे दिखाओ कैसे:
स्टैक और स्टोरेज के साथ एक अमूर्त मशीन को परिभाषित करते हुए, हम परिभाषित कर सकते हैं कि हमारी भाषा में प्रत्येक कथन ( कथन के शब्दार्थ ) को क्या करना चाहिए । उदाहरण के लिए skip
, स्टैक में कुछ भी नहीं करना चाहिए, A = 3
स्टैक में 3 से ए / (/) को बाइंड (एक करना) करना चाहिए।
हम अपने अपवाद को कैसे परिभाषित किया जाना चाहिए, इसका सिंटैक्स जोड़कर शुरू करते हैं । हम <statement>
DKL में एक और दो खंड जोड़कर ऐसा करते हैं ।
<statement> ::== ... (old stuff)
| try <statement> catch <id> then <statement> end
| raise <id> end
यहाँ ज्ञात प्रयास / पकड़ है, और अपवादों को बढ़ाने / फेंकने का एक तरीका है।
हम उनके शब्दार्थ को परिभाषित करते हैं कि उन्हें अमूर्त मशीन पर कैसे काम करना चाहिए:
शब्दार्थ कथन का प्रयास करें : (try <statement1> catch <id> then <statement2> end)
करें:
- स्टैक को सिमेंटिक स्टेटमेंट पर पुश करें
(catch <id> then <statement2> end)
- स्टैक को सिमेंटिक स्टेटमेंट पर पुश करें
(<statement1>)
ध्यान दें कि स्टेटमेंट 1 स्टैक के शीर्ष पर होगा, और पहले निष्पादित करने की कोशिश की जाएगी।
उठाएँ
अर्थ कथन है: (raise <id> end)
कार्य करें:
- यदि स्टैक पर अधिक कुछ नहीं है, तो रोकें और एक अनकहा अपवाद की रिपोर्ट करें।
- एल्स, स्टैक से पहला सिमेंटिक स्टेटमेंट पॉप करें। यदि यह कैच स्टेटमेंट नहीं है, तो चरण 1 पर जाएं।
- हम एक पकड़ प्राप्त कर चुके हैं, फॉर्म में स्टैक पर
(catch <id> then <statement> end)
पुश (<statement>)
करें।
कैच
यदि हम सामान्य निष्पादन के दौरान कैच-स्टेटमेंट देखते हैं, तो इसका मतलब है कि जो कुछ भी इस स्तर तक अपवादों को उठाए बिना निष्पादित किया गया था। इस प्रकार हम केवल catch
स्टैक के पॉप करते हैं और कुछ भी नहीं करते हैं।
QED, हमारे पास अपवादों वाली भाषा है और OOP की कोई संभावना नहीं है।
मैंने अमूर्त मशीन से पर्यावरण के हिस्से को सरल बनाने के लिए हटा दिया है।