আমি ইন্টারফেসগুলি 'আবিষ্কার' করেছি এবং সেগুলি ভালবাসতে শুরু করি। একটি ইন্টারফেসের সৌন্দর্য হ'ল এটি একটি চুক্তি, এবং যে চুক্তিটি পূরণ করে যে কোনও বস্তু যে ইন্টারফেসের প্রয়োজন সেখানেই ব্যবহার করা যেতে পারে।
একটি ইন্টারফেসের সাথে সমস্যাটি হ'ল এটির একটি ডিফল্ট বাস্তবায়ন থাকতে পারে না, যা জাগতিক বৈশিষ্ট্যের জন্য ব্যথা এবং ডিআরওয়াইকে পরাস্ত করে। এটিও ভাল, কারণ এটি বাস্তবায়ন এবং সিস্টেমটিকে ডিকপলড রাখে। উত্তরাধিকার, হাতে, একটি শক্ত সংযুক্তি বজায় রাখে এবং এনক্যাপসুলেশন ভাঙ্গার সম্ভাবনা রয়েছে।
কেস 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 এর অনুরূপ । তবে, কল্পনা করুন যে (অনুমানের) সি ++ খাঁটি ভার্চুয়াল এমন পদ্ধতিগুলি বাদ দিয়ে ওভাররাইড পদ্ধতিগুলিকে মঞ্জুরি দেয় না ।
সুতরাং, কেস 1-এ , do_work () ওভাররাইড করা একটি সংকলন-সময় ত্রুটির কারণ হতে পারে। এটি ঠিক করার জন্য, আমরা do_work () কে খাঁটি ভার্চুয়াল হিসাবে সেট করেছি এবং একটি পৃথক পদ্ধতি বৃদ্ধি_মনি_যুক্ত () যুক্ত করি। উদাহরণ হিসাবে:
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 মাস পরে জো কোডার একটি চিকিত্সক কর্মচারী তৈরি করেন তবে তিনি ডু-ওয়ার্ক () এ ইনক্রিমেন্ট_মনি_এয়ার্নড () কল করতে ভুলে যান?
প্রশ্নটি:
কি কেস 3 উচ্চতর কেস 1 ? এটি 'ভাল এনক্যাপসুলেশন' বা 'আরও আলগাভাবে মিলিত', বা অন্য কোনও কারণে?
কি কেস 3 উচ্চতর করার কেস 2 কারণ শুকিয়ে সঙ্গে কে কনর্ফাম করে?