আপনি ইতিমধ্যে কয়েকটি সুন্দর উত্তর পেয়েছেন, তবে আপনার প্রশ্নের ঘরে যে বিশাল হাতি তা হ'ল:
কারও কাছ থেকে শুনেছি উত্তরাধিকার ব্যবহার করা অবশ্যই এড়ানো উচিত এবং পরিবর্তে আমাদের ইন্টারফেস ব্যবহার করা উচিত
থাম্বের নিয়ম হিসাবে, যখন কেউ আপনাকে থাম্বের একটি নিয়ম দেয়, তখন এটিকে উপেক্ষা করুন। এটি কেবল "কেউ আপনাকে কিছু বলছে" এর জন্য নয়, ইন্টারনেটে স্টাফ পড়ার ক্ষেত্রেও যায়। যদি না জানেন কেন (এবং সত্যিই এটা পিছনে দাঁড়ানো পারে), এ ধরনের পরামর্শ অখাদ্য এবং প্রায়ই খুব ক্ষতিকর।
আমার অভিজ্ঞতায়, ওওপি-র সবচেয়ে গুরুত্বপূর্ণ এবং সহায়ক ধারণাগুলি হ'ল "কম সংযুক্তি" এবং "উচ্চ সংহতি" (শ্রেণি / অবজেক্টগুলি একে অপরের সম্পর্কে যতটা সম্ভব কম জানেন, এবং প্রতিটি ইউনিট যতটা সম্ভব কম জিনিসের জন্য দায়বদ্ধ)।
কম সংযোগ
এর অর্থ হ'ল আপনার কোডের যে কোনও "জিনিসপত্রের বান্ডিল" তার আশেপাশের উপর যতটা সম্ভব নির্ভর করবে। এই শ্রেণীর (ক্লাস নকশা) জন্য যায় কিন্তু (প্রকৃত বাস্তবায়ন) বস্তু, সাধারণভাবে "ফাইল" (অর্থাত, সংখ্যা #include
একক প্রতি গুলি .cpp
ফাইল, সংখ্যা import
একক প্রতি .java
ফাইল ইত্যাদি)।
দুটি সত্তা মিলিত হওয়ার লক্ষণটি হ'ল অন্য যে কোনও উপায়ে পরিবর্তিত হলে তাদের মধ্যে একটি ভেঙে যায় (বা পরিবর্তিত হওয়া দরকার) need
উত্তরাধিকার মিলন বৃদ্ধি, স্পষ্টতই; বেস ক্লাস পরিবর্তন করে সমস্ত সাবক্লাস পরিবর্তন হয়।
ইন্টারফেস সংযুক্তিকে হ্রাস করে: একটি পরিষ্কার, পদ্ধতি-ভিত্তিক চুক্তি সংজ্ঞায়নের মাধ্যমে, আপনি যতক্ষণ না চুক্তিটি পরিবর্তন করেন না ততক্ষণ আপনি অবাধে ইন্টারফেসের উভয় পক্ষের বিষয়ে কিছু পরিবর্তন করতে পারেন। (নোট করুন যে "ইন্টারফেস" একটি সাধারণ ধারণা, জাভা interface
বা সি ++ বিমূর্ত শ্রেণি কেবল বাস্তবায়নের বিশদ)।
উচ্চ সংহতি
এর অর্থ প্রতিটি শ্রেণি, অবজেক্ট, ফাইল ইত্যাদি সম্পর্কিত এবং যতটা সম্ভব অল্পের জন্য দায়বদ্ধ হওয়া। যেমন, প্রচুর স্টাফ করে এমন বড় ক্লাসগুলি এড়িয়ে চলুন। আপনার উদাহরণে, যদি আপনার অস্ত্রগুলির সম্পূর্ণ পৃথক দিক থাকে (গোলাগুলি, গুলি চালানোর আচরণ, গ্রাফিকাল উপস্থাপনা, জায় উপস্থাপনা ইত্যাদি) থাকে তবে আপনার বিভিন্ন শ্রেণি থাকতে পারে যা সেই জিনিসগুলির মধ্যে একটির প্রতিনিধিত্ব করে। তারপরে মূল অস্ত্র শ্রেণি সেই বিবরণগুলির একটি "ধারক" রূপান্তর করে; একটি অস্ত্র অবজেক্ট তখন সেই বিবরণগুলিতে কয়েকটি পয়েন্টারের চেয়ে কিছুটা বেশি।
এই উদাহরণে, আপনি নিশ্চিত করবেন যে "ফায়ারিং আচরণ" প্রতিনিধিত্বকারী আপনার শ্রেণি প্রধান অস্ত্র শ্রেণীর সম্পর্কে যতটা সম্ভব মানবিকভাবে জানে। সর্বোত্তমভাবে, কিছুই না। এটি উদাহরণস্বরূপ, এর অর্থ হ'ল আপনি নিজের পৃথিবীর যে কোনও বস্তুকে (ট্যারিটস, আগ্নেয়গিরি, এনপিসি ...) কেবলমাত্র একটি আঙুলের সাহায্যে "ফায়ারিং বিহেভিয়ার" দিতে পারবেন । আপনি যদি কোনও কোনও মুহুর্তে অস্ত্রগুলিকে কীভাবে জায়গুলিতে প্রতিনিধিত্ব করা হয় তা পরিবর্তন করতে চান, তবে আপনি কেবল তা করতে পারেন - কেবলমাত্র আপনার জায় শ্রেণি এটি সম্পর্কে জানে।
কোনও সত্তা সংহত না হওয়ার লক্ষণটি হ'ল যদি এটি আরও বড় এবং বৃহত্তর হয়ে ওঠে, একই সাথে বেশ কয়েকটি দিকে শাখা করে।
উত্তরাধিকার হিসাবে এটি বর্ণনা করার সাথে একাত্মতা হ্রাস পায় - আপনার অস্ত্রের ক্লাসগুলি দিন শেষে, বড় অংশগুলি যারা আপনার অস্ত্রগুলির সমস্ত প্রকারের, অ-সম্পর্কিত দিকগুলি পরিচালনা করে।
ইন্টারফেস অপ্রত্যক্ষভাবে ইন্টারফেসের উভয় পক্ষের মধ্যে দায়িত্ব বিচ্ছিন্ন করে সংহতি বৃদ্ধি করে।
এখন কি করতে হবে
এখনও কোন শক্ত এবং দ্রুত নিয়ম নেই, এগুলি সবই কেবল গাইডলাইন। সাধারণভাবে, যেমন ব্যবহারকারী টি কে কে তার উত্তরে উল্লেখ করেছেন, স্কুল এবং বইগুলিতে উত্তরাধিকারকে অনেক কিছু শেখানো হয়; এটি ওওপি সম্পর্কে অভিনব জিনিস। ইন্টারফেস দুটিই সম্ভবত শেখানোর জন্য আরও বিরক্তিকর, এবং এটিও (যদি আপনি তুচ্ছ উদাহরণগুলি ব্যবহার করেন) কিছুটা শক্ত, নির্ভরতা ইনজেকশনের ক্ষেত্রটি খোলার, যা উত্তরাধিকার হিসাবে এতটা পরিষ্কার নয়।
দিন শেষে, আপনার উত্তরাধিকার ভিত্তিক স্কিমটি কোনও স্পষ্ট OOP নকশা না থাকার চেয়ে আরও ভাল। সুতরাং এটি সঙ্গে অবিচ্ছিন্ন বোধ। আপনি যদি চান, আপনি লো কাপলিং, হাই কোহশন সম্পর্কে কিছুটা গুঞ্জন / গুগল করতে পারেন এবং দেখতে চান যে আপনি আপনার অস্ত্রাগারে এই জাতীয় চিন্তাভাবনা যুক্ত করতে চান কিনা। আপনি যদি চান তবে সর্বদা চেষ্টা করে দেখতে রিফ্যাক্টর করতে পারেন; অথবা আপনার পরবর্তী বৃহত্তর কোডের নতুন মডিউলটিতে ইন্টারফেস-ভিত্তিক পদ্ধতির চেষ্টা করুন।