हाल ही में मैंने सुना है कि ओओपी (जावा) के लिए 9 नियम हैं। मैं केवल चार को एब्स्ट्रक्शन, पॉलिमॉर्फिज्म, विरासत और Encapsulation के रूप में जानता हूँ। क्या ओओपी के लिए कोई और नियम हैं?क्या ओओपी के लिए कोई नियम हैं?
उत्तर
ऐसा लगता है कि आप जो देख रहे हैं वह Principles of Object-Oriented Design है।
Agile Software Development Principles, Patterns, and Practices से सारांशित। ये सिद्धांत सॉफ़्टवेयर इंजीनियरिंग में दशकों के अनुभव के कठिन-उत्पादित उत्पाद हैं। वे एक ही दिमाग का उत्पाद नहीं हैं, लेकिन वे बड़ी संख्या में सॉफ्टवेयर डेवलपर्स और शोधकर्ताओं के एकीकरण और लेखन का प्रतिनिधित्व करते हैं। यद्यपि वे ऑब्जेक्ट उन्मुख डिजाइन के सिद्धांतों के रूप में प्रस्तुत किए जाते हैं, वे वास्तव में सॉफ्टवेयर इंजीनियरिंग के दीर्घकालिक सिद्धांतों के विशेष मामले हैं।
एसआरपी एकल उत्तरदायित्व सिद्धांत एक वर्ग में बदलने का केवल एक कारण होना चाहिए।
ओसीपी ओपन-क्लोज़ड सिद्धांत सॉफ्टवेयर इकाइयों (कक्षाएं, पैकेज, विधियां इत्यादि) विस्तार के लिए खुला होना चाहिए, लेकिन संशोधन के लिए बंद होना चाहिए।
एलएसपी लिस्कोव सबस्टिशन सिद्धांत उपप्रकारों को उनके मूल प्रकारों के लिए प्रतिस्थापन योग्य होना चाहिए।
डीआईपी निर्भरता उलटा सिद्धांत अवशोषण विवरणों पर निर्भर नहीं होना चाहिए।विवरण अवशोषण पर निर्भर होना चाहिए।
आईएसपी इंटरफेस पृथक्करण सिद्धांत ग्राहकों को उन विधियों पर निर्भर रहने के लिए मजबूर नहीं किया जाना चाहिए जिन्हें वे उपयोग नहीं करते हैं। इंटरफेस ग्राहकों से संबंधित है, पदानुक्रमों के लिए नहीं।
REP रिलीज-पुन: उपयोग समानक सिद्धांत पुन: उपयोग की ग्रेन्युल रिलीज के ग्रेन्युल है।
सीसीपी आम क्लोजर सिद्धांत पैकेज में कक्षाओं को उसी प्रकार के परिवर्तनों के साथ एक साथ बंद किया जाना चाहिए। एक परिवर्तन जो एक बंद पैकेज को प्रभावित करता है उस पैकेज में सभी वर्गों को प्रभावित करता है और कोई अन्य पैकेज नहीं करता है।
सीआरपी आम पुनरुत्थान सिद्धांत पैकेज में कक्षाओं का एक साथ उपयोग किया जाता है। यदि आप किसी पैकेज में कक्षाओं में से किसी एक का पुन: उपयोग करते हैं, तो आप उनका पुन: उपयोग करते हैं।
एडीपी ऐलिसिक निर्भरता सिद्धांत निर्भरता ग्राफ में कोई चक्र अनुमति न दें।
एसडीपी स्थिर निर्भरता सिद्धांत स्थिरता की दिशा में निर्भर करता है।
एसएपी स्थिर सार तत्व सिद्धांत एक पैकेज स्थिर होने के रूप में सार होना चाहिए।
ये अवधारणाएं हैं, नियम नहीं। वास्तव में कोई नियम नहीं है, केवल कुछ निर्णय हैं, कुछ डिज़ाइन दूसरों की तुलना में बेहतर हैं, कुछ दूसरों की तुलना में बेहतर हैं :-)
हालांकि बहुत सारे दिशानिर्देश हैं :-) कुछ भाषा विशिष्ट हैं (सी ++ उनके साथ झुका हुआ है) अन्य ओओ विशिष्ट हैं। बहुत हालांकि :-)
मेरे सिर के ऊपर बंद सूची में कई, महत्वपूर्ण होते हैं:
- ढीला युग्मन, उच्च सामंजस्य
- परीक्षण योग्य वर्गों लिखें, जो आप inheritence
- उपयोग किफ़ायत का परीक्षण और केवल जहां यह समझ में आता है (रचना पसंद करते हैं)
- खुले/बंद सिद्धांत पर चिपकने का प्रयास करें।
- (सबसे महत्वपूर्ण) KISS
खूब उनका विस्तार और :-) जोड़ने के लिए
संपादित करें: मैं जोड़ने चाहिए, नियम है जो आप सूचीबद्ध नहीं
के बारे में सुनिश्चित नहीं हैं कि ऊ के लिए अद्वितीय हैं कोई नियम इन सभी उल्लिखित चीजें मेरे लिए ओओ प्रतिमानों की तरह अधिक हैं। कुछ सलाह हम की तरह पालन करें,
- चिंता का पृथक्करण
- कक्षा प्रति एकल जिम्मेदारी
- विरासत से अधिक पसंद करते हैं संरचना
- प्रोग्रामिंग इंटरफेस को
- प्लस सभी Billybob से उल्लेख किया है, पहले से ही
ये OO सिद्धांतों Head First Design Patterns से सीधे कर रहे हैं:
- समाहित क्या, एक अंतरफलक के लिए
- कार्यक्रम अनुसार भिन्न बल्कि एक कार्यान्वयन
- फ़ेवर संरचना विरासत से अधिक
- A वर्ग केवल एक ही कारण होना चाहिए की तुलना में बदलने के लिए (एकल उत्तरदायित्व सिद्धांत)
- उप-प्रकारों को थीई के लिए प्रतिस्थापन योग्य होना चाहिए आर बेस (Liskov Substitition सिद्धांत)
- कक्षा विस्तार के लिए खुला होना shoule, लेकिन बंद संशोधन के लिए (ओपन बंद सिद्धांत)
व्यावहारिक प्रोग्रामर्स के अनुसार - नियम हैं:
- रखें यह सूखी (खुद को दोहराना नहीं)
- रखें यह शर्म (सुनिश्चित करें कि आपका कक्षाएं उच्च एकता और कम युग्मन है)
- और अन्य आदमी (चिंताओं का पृथक्करण)
बता कोई "नियम" OOP करने के लिए कर रहे हैं।
4 भाषा गुण हैं जो एक भाषा ऑब्जेक्ट उन्मुख बनाते हैं या नहीं (ये वे चीजें हैं जिन्हें आपने अपने प्रश्न में सूचीबद्ध किया है)।
बाकी सामग्री वहां दिशानिर्देश हैं। मैंने पढ़ा है कि सबसे अच्छे/सबसे उपयोगी दिशानिर्देश GRASP
कई सुझाव लेमेन (गैर-सीएस प्रमुख) द्वारा आसानी से समझ में नहीं आते हैं। मैंने सोचा कि GRASP व्यावहारिक और पहुंच योग्य था।
मुझे लगता है कि GRASP अच्छा है क्योंकि यह ओओ के सबसे महत्वपूर्ण भाग को इसके नाम पर सुझाता है - उत्तरदायित्व का असाइनमेंट (ऑब्जेक्ट्स प्रोग्रामर नहीं)।
दो सबसे महत्वपूर्ण GRASP अवधारणाएं जिनसे अन्य सभी चीजें मिलती हैं और जोड़ती हैं। ये दो अवधारणाएं/प्रधानाचार्य सभी अन्य पैटर्न और दृष्टिकोण चलाते हैं।
बीटीडब्ल्यू - क्या मैंने अभी साक्षात्कार किया था? आपने गलत तरीके से प्रश्न लिखा है ...
- 1. ओओपी के लिए पर्ल के फायदे और नुकसान क्या हैं?
- 2. क्या अकेले उत्तरदायित्व सिद्धांत ओओपी का नियम है?
- 3. पाइथन आयात के लिए अंगूठे के अच्छे नियम क्या हैं?
- 4. रूबी सिंटेक्टिक चीनी के लिए "नियम" हैं?
- 5. निम्नलिखित नियम डिजाइन के लिए अन्य समाधान क्या हैं?
- 6. टीसीपी के लिए पुन: ट्रांसमिशन नियम क्या हैं?
- 7. ओओपी PHP के लिए अच्छा प्रशिक्षण स्रोत, कोई भी?
- 8. ओओपी के बंद होने के कुछ उपयोग क्या हैं?
- 9. क्या ओओपी कोडिंग प्रथाओं के लिए आप हमेशा समय लेते हैं?
- 10. सीएसएस नियम/नियम क्रोम में शून्य हैं
- 11. मोंगोस (नोडेज) बहुवचन नियम क्या हैं?
- 12. ओओपी
- 13. ओओपी
- 14. क्या jsPlumb के लिए कोई विकल्प हैं?
- 15. क्या XmlUnit के लिए कोई विकल्प हैं?
- 16. ओओपी
- 17. क्या कोई अच्छी php5 ओओपी ट्यूटोरियल साइट है?
- 18. ओओपी
- 19. लक्ष्य बनाने के लिए कोई नियम /usr/lib/someLib.so
- 20. नियम इंजन क्या कर सकते हैं?
- 21. एंड्रॉइड एनडीके: लक्ष्य बनाने के लिए कोई नियम
- 22. ओओपी
- 23. ओओपी-टेट्रिस के लिए दार्शनिक डिजाइन प्रश्न
- 24. मेकफ़ाइल त्रुटि: लक्ष्य बनाने के लिए कोई नियम
- 25. initWithNibName मिलान फ़ाइल नाम के नियम क्या हैं?
- 26. एंड्रॉइड एनडीके, लक्ष्य बनाने के लिए कोई नियम
- 27. की श्रंखला के बारे में क्या नियम हैं "==" और अजगर
- 28. मोबाइल दोस्ताना वेबसाइट बनाने के नियम क्या हैं?
- 29. चरित्र वैक्टर के आर सॉर्टिंग नियम क्या हैं?
- 30. क्या PHP ओओपी में सार्वजनिक चर का उपयोग करने के लिए कोई वैध उपयोग केस है?
न तो आपका :)। वैसे, हम एक गैर-ओओ भाषा में विरासत, बहुरूपता, आदि का अभ्यास कैसे करेंगे। मेरा मानना है कि ये सभी 4 ओओ प्रतिमान हैं। –