मेरा सुझाव है कि ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की सबसे महत्वपूर्ण विशेषता जटिलता प्रबंधन है ।
मानव मस्तिष्क केवल एक समय में इतनी सारी अवधारणाएं धारण कर सकता है - 7 +/- 2 स्वतंत्र वस्तुओं को याद रखने की अक्सर उद्धृत सीमा मन में आती है।
जब मैं काम पर एक 600kloc प्रणाली पर काम कर रहा हूं, तो मैं एक ही बार में पूरी चीज को अपने सिर में नहीं रख सकता। अगर मुझे ऐसा करना होता, तो मैं बहुत छोटे सिस्टम पर काम करने तक सीमित रहता ।
सौभाग्य से, मेरे पास नहीं है। विभिन्न डिजाइन पैटर्न और अन्य संरचनाएं जो हमने उस परियोजना पर उपयोग की हैं, का मतलब है कि मुझे एक ही बार में पूरी प्रणाली से निपटने की ज़रूरत नहीं है - मैं व्यक्तिगत टुकड़े उठा सकता हूं और उन पर काम कर सकता हूं, यह जानकर कि वे व्यापक अनुप्रयोग में फिट होते हैं अच्छी तरह से परिभाषित तरीकों में।
सभी महत्वपूर्ण ओओ अवधारणाएं जटिलता का प्रबंधन करने के तरीके प्रदान करती हैं।
एनकैप्सुलेशन - मुझे एक बाहरी एपीआई से निपटने दें जो मुझे विभिन्न सेवाओं के साथ प्रदान करता है, बिना यह चिंता किए कि उन सेवाओं को कैसे लागू किया जाता है।
अमूर्तता - मुझे आवश्यक विशेषताओं पर ध्यान केंद्रित करने और जो प्रासंगिक नहीं है उसे अनदेखा करें।
रचना - मुझे उन घटकों का पुन: उपयोग करने दें जो पहले से ही नए संयोजनों में बनाए गए हैं
बहुरूपता - मुझे इस बारे में चिंता किए बिना एक सेवा के लिए पूछें कि विभिन्न वस्तुओं को विभिन्न तरीकों से कैसे प्रदान किया जा सकता है।
वंशानुक्रम - मुझे एक अंतरफलक या कार्यान्वयन का पुन: उपयोग करने दें, केवल वही टुकड़े प्रदान करें जो पहले चले गए से अलग हैं।
सिंगल रिस्पांसिबिलिटी प्रिंसिपल - प्रत्येक ऑब्जेक्ट के उद्देश्य को स्पष्ट और संक्षिप्त रखने देता है, इसलिए इसके बारे में तर्क करना आसान है
लिसकोव प्रतिस्थापन प्रधान - चलो एक-दूसरे के लिए अजीब निर्भरता शुरू करके जाल नहीं बिछाते
ओपन / बंद सिद्धांत - आइए उन तरीकों में विस्तार और संशोधन की अनुमति दें जिनसे हमें मौजूदा कोड को तोड़ने का जोखिम न उठाना पड़े
निर्भरता इंजेक्शन - चलो अगले स्तर पर रचना लेते हैं और घटकों को एक साथ बहुत बाद में इकट्ठा करते हैं।
इंटरफ़ेस उन्मुख विकास - चलो अगले स्तर पर अमूर्तता लेते हैं और केवल अमूर्तता पर निर्भर करते हैं, कभी भी एक ठोस कार्यान्वयन पर नहीं।