আপনি হয় একটি ইন্টারফেস (উত্তরাধিকার নয়) বা কিছু ধরণের সম্পত্তি মেকানিক ব্যবহার করা উচিত (এমনকি এমন কিছু যা সম্পদ বিবরণ কাঠামোর মতো কাজ করে)।
তাই হয়
interface Colored {
Color getColor();
}
class ColoredBook extends Book implements Colored {
...
}
অথবা
class PropertiesHolder {
<T> extends Property<?>> Optional<T> getProperty( Class<T> propertyClass ) { ... }
<V, T extends Property<V>> Optional<V> getPropertyValue( Class<T> propertyClass ) { ... }
}
interface Property<T> {
String getName();
T getValue();
}
class ColorProperty implements Property<Color> {
public Color getValue() { ... }
public String getName() { return "color"; }
}
class Book extends PropertiesHolder {
}
স্পষ্টকরণ (সম্পাদনা):
সত্তা শ্রেণিতে কেবল alচ্ছিক ক্ষেত্রগুলি যুক্ত করা
বিশেষত ptionচ্ছিক -র্যাপার সহ (সম্পাদনা করুন: 4 ক্যাসলের উত্তর দেখুন) আমি মনে করি এটি (মূল সত্তায় ক্ষেত্র যুক্ত করা) একটি ছোট স্কলে নতুন বৈশিষ্ট্য যুক্ত করার একটি কার্যকর উপায়। এই পদ্ধতির সাথে সবচেয়ে বড় সমস্যাটি হ'ল এটি কম সংশ্লেষের বিরুদ্ধে কাজ করতে পারে।
আপনার বুক ক্লাসটি আপনার ডোমেন মডেলের জন্য একটি ডেডিকেটেড প্রকল্পে সংজ্ঞায়িত করা হয়েছে তা কল্পনা করুন। এখন আপনি অন্য একটি প্রকল্প যুক্ত করুন যা একটি বিশেষ কাজ করার জন্য ডোমেন মডেল ব্যবহার করে। এই টাস্কের জন্য বুক ক্লাসে একটি অতিরিক্ত সম্পত্তি প্রয়োজন। হয় আপনি উত্তরাধিকার দিয়ে শেষ (নীচে দেখুন) অথবা নতুন কাজটি সম্ভব করার জন্য আপনাকে সাধারণ ডোমেন মডেলটি পরিবর্তন করতে হবে। পরবর্তী ক্ষেত্রে আপনি এমন একগুচ্ছ প্রকল্পের সমাপ্তি পেতে পারেন যা সমস্ত বইয়ের শ্রেণিতে যুক্ত হওয়া নিজস্ব সম্পত্তিগুলির উপর নির্ভর করে যখন বুক ক্লাস নিজেই এই প্রকল্পগুলির উপর নির্ভর করে, কারণ আপনি বইয়ের ক্লাসটি ছাড়া বুঝতে পারবেন না অতিরিক্ত প্রকল্প
অতিরিক্ত সম্পত্তি সরবরাহ করার উপায়ের ক্ষেত্রে উত্তরাধিকার কেন সমস্যাযুক্ত?
যখন আমি আপনার উদাহরণ বর্গ "বুক" দেখি আমি এমন একটি ডোমেন অবজেক্ট সম্পর্কে ভাবি যা প্রায়শই অনেকগুলি alচ্ছিক ক্ষেত্র এবং সাব টাইপগুলি শেষ করে। আপনি কেবল একটি সিডি অন্তর্ভুক্ত বইয়ের জন্য একটি সম্পত্তি যুক্ত করতে চান তা কল্পনা করুন। এখন চার ধরণের বই রয়েছে: বই, রঙের বই, সিডি সহ বই, রঙ এবং সিডি সহ বই । আপনি জাভাতে উত্তরাধিকার নিয়ে এই পরিস্থিতিটি বর্ণনা করতে পারবেন না।
ইন্টারফেসের সাহায্যে আপনি এই সমস্যাটিকে অবরুদ্ধ করেন। আপনি ইন্টারফেস সহ একটি নির্দিষ্ট বই শ্রেণীর বৈশিষ্ট্যগুলি সহজেই রচনা করতে পারেন। ডেলিগেশন এবং রচনাটি আপনার পছন্দসই ক্লাসটি পাওয়া সহজ করবে। উত্তরাধিকারের সাথে আপনি সাধারণত শ্রেণীর কিছু optionচ্ছিক বৈশিষ্ট্যগুলি সমাপ্ত করেন যা কেবল সেখানে থাকে কারণ একটি সহোদর শ্রেণীর তাদের প্রয়োজন।
উত্তরাধিকার প্রায়শই কেন একটি সমস্যাযুক্ত ধারণা:
ওওপি সমর্থকরা সাধারণত উত্তরাধিকারকে কেন খারাপ জিনিস হিসাবে দেখেন
জাভা ওয়ার্ল্ড: কেন প্রসারিত করা খারাপ
বৈশিষ্ট্যের একটি সেট রচনা করতে ইন্টারফেসের একটি সেট বাস্তবায়নে সমস্যা
আপনি যখন এক্সটেনশনের জন্য ইন্টারফেসগুলি ব্যবহার করেন তখন যতক্ষণ না আপনার কেবলমাত্র একটি ছোট সেট থাকে সমস্ত কিছু ঠিক থাকে। বিশেষত যখন আপনার অবজেক্ট মডেলটি অন্য বিকাশকারীগণ দ্বারা যেমন ব্যবহার করা হয় এবং বাড়ানো হয় যেমন আপনার সংস্থায় ইন্টারফেসের পরিমাণ বাড়বে। এবং অবশেষে আপনি একটি নতুন অফিসিয়াল "সম্পত্তি" ইন্টারফেস "তৈরি করবেন যা আপনার সহযোগীরা ইতিমধ্যে সম্পূর্ণরূপে সম্পর্কিত নয় এমন ক্ষেত্রে ব্যবহারের ক্ষেত্রে গ্রাহক এক্স এর জন্য প্রজেক্টে ব্যবহার করেছে এমন একটি পদ্ধতি যুক্ত করে - উঘ।
সম্পাদনা করুন: gnasher729 দ্বারা আরেকটি গুরুত্বপূর্ণ দিক উল্লেখ করা হয়েছে । আপনি প্রায়শই একটি বিদ্যমান অবজেক্টে গতিশীল optionচ্ছিক বৈশিষ্ট্য যুক্ত করতে চান। উত্তরাধিকার বা ইন্টারফেসের সাথে আপনাকে পুরো বিষয়টিকে অন্য শ্রেণীর সাথে পুনরায় তৈরি করতে হবে যা fromচ্ছিক থেকে অনেক দূরে।
আপনি যখন আপনার অবজেক্টের মডেলটিতে এমন একটি প্রসারণের আশা করেন তখন আপনি গতিশীল এক্সটেনশনের সম্ভাবনার স্পষ্টভাবে মডেলিংয়ের মাধ্যমে আরও ভাল হন । আমি উপরের মতো কিছু প্রস্তাব করি যেখানে প্রতিটি "এক্সটেনশন" (এই ক্ষেত্রে সম্পত্তি) এর নিজস্ব শ্রেণি থাকে। শ্রেণিটি এক্সটেনশনের জন্য নেমস্পেস এবং সনাক্তকারী হিসাবে কাজ করে। আপনি যখন প্যাকেজ নামকরণের কনভেনশনগুলি সেই অনুযায়ী সেট করেন তখন মূল সত্তা শ্রেণীর পদ্ধতির জন্য নেমস্পেসকে দূষিত না করে সীমাহীন পরিমাণের এক্সটেনশনের অনুমতি দেয়।
গেম বিকাশে আপনি প্রায়শই এমন পরিস্থিতিগুলির মুখোমুখি হন যেখানে আপনি অনেকগুলি বৈচিত্র্যে আচরণ এবং ডেটা রচনা করতে চান। এ কারণেই গেম ডেভেলপমেন্ট চেনাশোনাগুলিতে আর্কিটেকচার প্যাটার্ন সত্তা-উপাদান-সিস্টেমটি বেশ জনপ্রিয় হয়ে উঠেছে। আপনি যখন নিজের অবজেক্টের মডেলটিতে অনেকগুলি এক্সটেনশান প্রত্যাশা করবেন তখন এটি আপনি দেখতে আগ্রহী একটি দৃষ্টিভঙ্গিও।