मैं आमतौर पर वास्तविक दुनिया के उदाहरणों का उपयोग करके ऑब्जेक्ट-ओरिएंटेड-प्रोग्रामिंग की कोशिश करता हूं और वर्णन करता हूं।
उदाहरण के लिए, मैं कह सकता हूं कि एक वर्ग Vehicle
जो न्यूनतम चीजों का वर्णन करता है वह एक वाहन है। मैं उस व्यक्ति से पूछूंगा कि वह मुझे बताए कि वह एक वाहन है या नहीं। कभी-कभी वे कहते हैं, "ठीक है, जैसे कि एक कार या ट्रक", और मैं उनसे सहमत हूं और उनसे सहमत हूं। फिर मैं पूछता हूँ कि कार और ट्रक के बीच क्या अंतर हैं। कभी-कभी वे आकार, कभी-कभी उद्देश्य और अन्य चीजों का उल्लेख करते हैं।
फिर मैं उन्हें कार, या ट्रक के बारे में भूल जाने के लिए कहूँगा और बस एक वाहन का वर्णन करना जारी रखने के लिए कहूँगा:
"ओह, यह अच्छी तरह से चलता है"
"इसमें एक ऑपरेटर, या एक ड्राइवर है"
आदि...
जल्द ही, हम जानते हैं कि एक वाहन क्या है और मैंने कहा कि ओओपी में हम एक वाहन को परिभाषित करेंगे, और तर्क के लिए कहें कि यह चल सकता है, और इसे एक चालक का रूप दे सकता है। फिर मैं पूछता हूँ, ठीक है, तो एक कार के पास क्या है?
"दरवाजे"
"खिड़कियाँ"
और फिर एक ट्रक ...।
"दरवाजे" "खिड़कियां" "अधिक पहियों!"
जल्द ही, बहुत चर्चा के बाद, दूसरे व्यक्ति ने आम तौर पर पहचान की है:
1) एक वाहन का गठन क्या है
2) एक कार का गठन क्या है
3) ट्रक का निर्माण क्या होता है
४) हवाई जहाज का निर्माण क्या होता है।
सभी बिना किसी तकनीकी जानकारी के। हमने प्रत्येक के गुणों को सही क्षेत्रों में विभाजित किया है। वे विरासत को समझते हैं ("हाँ, एक कार एक वाहन है, एक ट्रक एक वाहन है, लेकिन एक कार एक ट्रक नहीं है, यह सरल है, डुह!")।
वे भी बहुरूपता को समझते हैं, "निश्चित रूप से, वे मूल रूप से ऐसा ही करते हैं, लेकिन यह थोड़ा अलग हो सकता है।" हम व्यवहार के बारे में बात कर सकते हैं और जहां हमारे वस्तुओं के पेड़ में रहना चाहिए।
उनकी शिक्षा और पृष्ठभूमि के आधार पर, कुछ इसे दूसरों की तुलना में तेजी से प्राप्त करते हैं। लेकिन जब मैं ओओपी की वास्तविक जीवन की वस्तुओं से तुलना करता हूं, तो ज्यादातर लोग हमेशा इसे प्राप्त करते हैं। वास्तव में, मैंने गैर-तकनीकी लोगों के साथ बातचीत में पाया है जो मैंने कभी नहीं सोचा था। उदाहरण के लिए (ड्रोन) वाहनों को मेनटेन नहीं करना है, लेकिन क्या किसी प्रोग्रामर ने वाहन के ऑपरेटर को इसकी संपत्ति माना होगा? मैं यह नहीं कह रहा हूं कि एक ऑपरेटर का उल्लेख करना सही या गलत है, लेकिन यह हमें इस बारे में सोचने का कारण बनाता है कि हम क्या मॉडलिंग कर रहे हैं और जब हम सॉफ्टवेयर विकसित करते हैं तो हम क्या हासिल करने की कोशिश कर रहे हैं।
अब, आंशिक टेम्पलेट विशेषज्ञता, दूसरी ओर .... :)