अपने पीडीएफ उदाहरणों को प्रारंभिक बिंदु के रूप में लेते हुए, आइए इसे देखें।
http://en.wikipedia.org/wiki/Single_responsibility_principle
सिंगल रिस्पांसिबिलिटी सिद्धांत बताता है कि एक ऑब्जेक्ट में एक और केवल एक उद्देश्य होना चाहिए। इसे ध्यान में रखो।
http://en.wikipedia.org/wiki/Separation_of_concerns
सरोकारों के सिद्धांत का अलग होना हमें बताता है कि कक्षाओं में अतिव्यापी कार्य नहीं होने चाहिए।
जब आप इन दोनों को देखते हैं, तो वे सुझाव देते हैं कि तर्क को एक वर्ग में जाना चाहिए, अगर यह समझ में आता है, केवल अगर वह वर्ग ऐसा करने के लिए जिम्मेदार है।
अब, आपके पीडीएफ उदाहरण में, सवाल यह है कि प्रिंटिंग के लिए कौन जिम्मेदार है? क्या समझ में आता है?
पहला कोड स्निपेट:
Pdf pdf = new Pdf();
pdf.Print();
यह अच्छा नहीं है। एक पीडीएफ दस्तावेज़ खुद को प्रिंट नहीं करता है। यह मुद्रित होता है ... टा दा! .. एक प्रिंटर। तो आप दूसरा कोड स्निपेट बहुत बेहतर है:
Pdf pdf = new Pdf();
PdfPrinter printer = new PdfPrinter();
printer.Print(pdf);
यह समझ में आता है। एक पीडीएफ प्रिंटर एक पीडीएफ दस्तावेज़ प्रिंट करता है। बेहतर अभी तक, एक प्रिंटर एक पीडीएफ प्रिंटर, या एक फोटो प्रिंटर नहीं होना चाहिए। यह सिर्फ एक प्रिंटर होना चाहिए जो अपनी क्षमताओं के सबसे अच्छे रूप में भेजे गए सामान को प्रिंट करने में सक्षम हो।
Pdf pdf = new Pdf();
Printer printer = new Printer();
printer.Print(pdf);
तो यह आसान है। उन तरीकों को रखें जहां वे समझ में आते हैं। जाहिर है, यह हमेशा इतना आसान नहीं होता है। उदाहरण के लिए अपने देश के आँकड़े लें:
Country m = new Country("Mexico");
double ratio = m.GetDebtToGDPRatio();
आपकी चिंता यह है कि आंकड़ों की संख्या n हो सकती है , और यह कि वे देश श्रेणी में नहीं होने चाहिए। यह सच है। हालाँकि, यदि आपका मॉडल केवल उस विशेष आँकड़े के लिए कहता है, तो यह मॉडलिंग उदाहरण वास्तव में ठीक हो सकता है।
इस मामले में, आप तार्किक रूप से कह सकते हैं कि एक देश को अपने स्वयं के आँकड़ों की गणना करने में सक्षम होना चाहिए, आपके मॉडल और हाथों की आवश्यकताओं के लिए।
और उसमें यह बात निहित है: आपकी आवश्यकताएं क्या हैं? आपकी आवश्यकताएं आपको दुनिया को मॉडल करने के तरीके को चलाएंगी, संदर्भ, जिसमें इन आवश्यकताओं को संतुष्ट किया जाना है।
यदि आपके पास वास्तव में एक भीड़ / चर संख्या के आंकड़े हैं, तो आपका दूसरा उदाहरण अधिक समझ में आता है:
Country m = new Country("Mexico");
DebtStatistics ds = new DebtStatistics();
double usRatio = ds.GetDebtToGDPRatio(m);
बेहतर अभी तक, एक सुपरक्लास या इंटरफ़ेस है जिसे सांख्यिकी कहा जाता है जो एक देश को पैरामीटर के रूप में लेते हैं:
interface StatisticsCalculator // or a pure abstract class if doing C++
{
double getStatistics(Country country); // or a pure virtual function if in C++
}
वर्ग ऋण
वर्ग शिशुमृत्युत्व विज्ञान सांख्यिकीसंपादित करें सांख्यिकी सांख्यिकी
और आगे और आगे। जो निम्नलिखित की ओर जाता है: सामान्यीकरण, प्रतिनिधिमंडल, अमूर्तता। सांख्यिकीय सभा विशिष्ट उदाहरणों के लिए प्रत्यायोजित होती है जो एक विशिष्ट अमूर्त (एक आँकड़े संग्रह एपीआई) को सामान्यीकृत करते हैं ।
मुझे नहीं पता कि यह आपके प्रश्न का 100% उत्तर देता है। आखिरकार, हमारे पास अचूक मॉडल जमीन नहीं है, जैसे कि हिंसात्मक कानूनों (जैसे ईई लोग करते हैं।) आप जो कुछ कर सकते हैं, वह सब कुछ है। और यह एक इंजीनियरिंग निर्णय है जिसे आपको करने की आवश्यकता है। सबसे अच्छी बात यह है कि वास्तव में OO सिद्धांतों (और सामान्य रूप से अच्छे सॉफ्टवेयर मॉडलिंग सिद्धांतों) से परिचित होना है।