এটি কোনটি সর্বোত্তম তা নয় তবে কখন কী ব্যবহার করবেন তা নয়।
'সাধারণ' ক্ষেত্রে আমাদের উত্তরাধিকার বা সমষ্টি প্রয়োজন কিনা তা জানতে একটি সাধারণ প্রশ্নই যথেষ্ট।
- নতুন ক্লাসটি যদি মূল ক্লাস হিসাবে কম বেশি হয়। উত্তরাধিকার ব্যবহার করুন। নতুন ক্লাসটি এখন মূল শ্রেণীর একটি সাবক্লাস।
- নতুন বর্গ আবশ্যক যদি আছে মূল শ্রেণী। সমষ্টি ব্যবহার করুন। নতুন শ্রেণীর সদস্য হিসাবে এখন মূল ক্লাস রয়েছে।
তবে একটি বড় ধূসর অঞ্চল আছে। সুতরাং আমাদের আরও কয়েকটি কৌশল প্রয়োজন।
- যদি আমরা উত্তরাধিকার ব্যবহার করে থাকি (বা আমরা এটি ব্যবহারের পরিকল্পনা করি) তবে আমরা কেবল ইন্টারফেসের কিছু অংশ ব্যবহার করি, বা পারস্পরিক সম্পর্ককে যৌক্তিক রাখতে আমরা প্রচুর কার্যকারিতা ওভাররাইড করতে বাধ্য হই। তারপরে আমাদের একটি বড় বাজে গন্ধ আছে যা ইঙ্গিত করে যে আমাদের একত্রিত করতে হয়েছিল।
- যদি আমরা সমষ্টি ব্যবহার করে (বা আমরা এটি ব্যবহারের পরিকল্পনা করি) তবে আমরা খুঁজে পেলাম যে আমাদের প্রায় সমস্ত কার্যকারিতা অনুলিপি করতে হবে। তারপরে আমাদের গন্ধ আছে যা উত্তরাধিকারের দিক নির্দেশ করে।
এটি ছোট করা। যদি অযৌক্তিক পরিস্থিতি এড়ানোর জন্য ইন্টারফেসের অংশটি ব্যবহার না করা হয় বা পরিবর্তন করতে হয় তবে আমাদের একত্রিত করা উচিত। আমাদের কেবলমাত্র উত্তরাধিকার ব্যবহার করা দরকার, যদি বড় পরিবর্তন ছাড়াই আমাদের প্রায় সমস্ত কার্যকারিতা প্রয়োজন। এবং সন্দেহ হলে, সমষ্টি ব্যবহার করুন।
এর জন্য অন্য সম্ভাবনা, আমাদের ক্লাসের ক্ষেত্রে যেটির মূল বর্গের কার্যকারিতার অংশ প্রয়োজন, তা হ'ল মূল শ্রেণিকে একটি মূল শ্রেণি এবং একটি উপ শ্রেণিতে বিভক্ত করা। এবং নতুন শ্রেণিটি মূল শ্রেণি থেকে উত্তরাধিকার সূত্রে আসুক। তবে আপনার এটিকে যত্ন সহকারে নেওয়া উচিত, অযৌক্তিক বিচ্ছেদ তৈরি করার জন্য নয়।
একটি উদাহরণ যোগ করা যাক। আমাদের পদ্ধতি সহ একটি 'কুকুর' রয়েছে: 'খাওয়া', 'হাঁটা', 'বার্ক', 'খেলুন'।
class Dog
Eat;
Walk;
Bark;
Play;
end;
আমাদের এখন একটি ক্লাস 'ক্যাট' দরকার, এর জন্য 'খাওয়া', 'ওয়াক', 'পুর' এবং 'খেলুন' দরকার। তাই প্রথমে এটি একটি কুকুরের কাছ থেকে প্রসারিত করার চেষ্টা করুন।
class Cat is Dog
Purr;
end;
ঠিক আছে, তবে অপেক্ষা করুন। এই বিড়ালটি বার্ক করতে পারে (বিড়াল প্রেমীরা আমাকে তার জন্য হত্যা করবে)। এবং একটি ঝাঁকুনি বিড়াল মহাবিশ্বের নীতি লঙ্ঘন করে। সুতরাং আমাদের বার্ক পদ্ধতিটি ওভাররাইড করা দরকার যাতে এটি কিছু না করে।
class Cat is Dog
Purr;
Bark = null;
end;
ঠিক আছে, এটি কাজ করে তবে এটি দুর্গন্ধযুক্ত। সুতরাং একত্রিত করার চেষ্টা করা যাক:
class Cat
has Dog;
Eat = Dog.Eat;
Walk = Dog.Walk;
Play = Dog.Play;
Purr;
end;
ঠিক আছে, এটি দুর্দান্ত। এই বিড়ালটি আর ঘেউ ঘেউ করে না, এমনকি নীরবও না। তবে এখনও এটির একটি অভ্যন্তরীণ কুকুর আছে যা বাইরে বেরিয়ে আসতে চায়। সুতরাং এর সমাধান নম্বর তিনটি চেষ্টা করে দেখুন:
class Pet
Eat;
Walk;
Play;
end;
class Dog is Pet
Bark;
end;
class Cat is Pet
Purr;
end;
এটি অনেক পরিষ্কার। কোনও অভ্যন্তরীণ কুকুর নেই। এবং বিড়াল এবং কুকুর একই স্তরে রয়েছে। আমরা এমনকি মডেল প্রসারিত অন্যান্য পোষা প্রাণী পরিচয় করিয়ে দিতে পারেন। যদি না এটি কোনও মাছ, বা এমন কিছু যা হাঁটে না। সেক্ষেত্রে আমাদের আবার রিফ্যাক্টর করা দরকার। তবে এটি অন্য সময়ের জন্য কিছু।