मुझे 'इंटरफेस' का पता चला और मैं उनसे प्यार करने लगा। एक अंतरफलक की सुंदरता यह है कि यह एक अनुबंध है, और कोई भी वस्तु जो उस अनुबंध को पूरा करती है, जहां भी उस इंटरफ़ेस की आवश्यकता होती है, उसका उपयोग किया जा सकता है।
एक इंटरफ़ेस के साथ समस्या यह है कि इसमें डिफ़ॉल्ट कार्यान्वयन नहीं हो सकता है, जो सांसारिक गुणों के लिए एक दर्द है और DRY को हरा देता है। यह भी अच्छा है, क्योंकि यह कार्यान्वयन और सिस्टम को डिकॉप्ड रखता है। हाथ पर वंशानुक्रम, एक सख्त युग्मन को बनाए रखता है, और इसमें टूटने की क्षमता होती है।
केस 1 (निजी सदस्यों के साथ विरासत, अच्छा एनकैप्सुलेशन, कसकर युग्मित)
class Employee
{
int money_earned;
string name;
public:
void do_work(){money_earned++;};
string get_name(return name;);
};
class Nurse : public Employee:
{
public:
void do_work(/*do work. Oops, can't update money_earned. Unaware I have to call superclass' do_work()*/);
};
void HireNurse(Nurse *n)
{
nurse->do_work();
)
केस 2 (सिर्फ एक इंटरफ़ेस)
class IEmployee
{
virtual void do_work()=0;
virtual string get_name()=0;
};
//class Nurse implements IEmployee.
//But now, for each employee, must repeat the get_name() implementation,
//and add a name member string, which breaks DRY.
केस 3: (दोनों दुनिया में सर्वश्रेष्ठ?)
केस 1 के समान । हालाँकि, कल्पना कीजिए कि (काल्पनिक रूप से) C ++ ने उन तरीकों को छोड़कर ओवरराइडिंग विधियों की अनुमति नहीं दी है जो शुद्ध आभासी हैं ।
इसलिए, केस 1 में , do_work () को ओवरराइड करने से एक संकलन-समय त्रुटि होगी। इसे ठीक करने के लिए, हम do_work () को शुद्ध वर्चुअल के रूप में सेट करते हैं, और एक अलग विधि increment_money_earned () जोड़ते हैं। उदहारण के लिए:
class Employee
{
int money_earned;
string name;
public:
virtual void do_work()=0;
void increment_money_earned(money_earned++;);
string get_name(return name;);
};
class Nurse : public Employee:
{
public:
void do_work(/*do work*/ increment_money_earned(); ); .
};
लेकिन इससे भी समस्याएँ हैं। क्या होगा अगर अब से 3 महीने, जो कोडर एक डॉक्टर कर्मचारी बनाता है, लेकिन वह do_work () में increment_money_earned () कॉल करना भूल जाता है?
प्रश्न:
है केस 3 से बेहतर केस 1 ? क्या यह इसलिए है क्योंकि यह 'बेहतर एनकैप्सुलेशन' या 'अधिक शिथिल युग्मित', या कुछ अन्य कारण है?
है केस 3 बेहतर करने के लिए केस 2 क्योंकि यह सूखी का पालन हो?