Traditionalতিহ্যবাহী শ্রেণি শ্রেণিবিন্যাসের একটি সুপরিচিত ঘাটতি হ'ল আসল বিশ্বের মডেলিংয়ের ক্ষেত্রে এটি খারাপ। উদাহরণ হিসাবে, শ্রেণীর সাথে প্রাণীদের প্রজাতি উপস্থাপন করার চেষ্টা করা। এটি করার সময় বেশ কয়েকটি সমস্যা রয়েছে, তবে একটি সমাধান আমি কখনই সমাধান করতে দেখি নি যখন কোনও উপ-শ্রেণি এমন একটি আচরণ বা সম্পত্তি "হারায়" যা একটি সুপার-ক্লাসে সংজ্ঞায়িত হয়েছিল, যেমন পেঙ্গুইন উড়তে সক্ষম হয় না (সেখানে সেখানে) সম্ভবত এটি আরও ভাল উদাহরণ, তবে এটি আমার মনে প্রথম আসে)।
একদিকে, আপনি প্রতিটি সম্পত্তি এবং আচরণের জন্য, কিছু পতাকা সংজ্ঞায়িত করতে চান না যা এটি বর্তমানে উপস্থিত রয়েছে কিনা তা নির্দিষ্ট করে এবং সেই আচরণ বা সম্পত্তিটি অ্যাক্সেস করার আগে প্রতিবার এটি পরীক্ষা করে দেখুন। আপনি কেবল এটিই বলতে চাই যে পাখিগুলি পাখি ক্লাসে, সহজ এবং স্পষ্টভাবে উড়তে পারে। তবে এর পরে যদি কেউ সর্বত্র কিছু ভয়ঙ্কর হ্যাক ব্যবহার না করেই "ব্যতিক্রমগুলি" সংজ্ঞায়িত করতে পারে তবে এটি চমৎকার হবে। এটি প্রায়শই ঘটে যখন কোনও সিস্টেম কিছু সময়ের জন্য উত্পাদনশীল হয়। আপনি হঠাৎ একটি "ব্যতিক্রম" সন্ধান করেন যা মূল নকশায় মোটেও খাপ খায় না এবং এটি সংযুক্ত করার জন্য আপনি আপনার কোডের একটি বড় অংশ পরিবর্তন করতে চান না।
সুতরাং, এমন কিছু ভাষা বা নকশার নিদর্শন রয়েছে যা "সুপার-ক্লাস" এবং এটি ব্যবহার করে এমন সমস্ত কোডকে বড় ধরনের পরিবর্তন না করেই এই সমস্যাটি পরিষ্কারভাবে পরিচালনা করতে পারে? এমনকি যদি কোনও সমাধান কেবল একটি নির্দিষ্ট কেস পরিচালনা করে তবে বেশ কয়েকটি সমাধান একসাথে একটি সম্পূর্ণ কৌশল গঠন করতে পারে।
আরও চিন্তাভাবনা করার পরে, আমি বুঝতে পারি যে আমি লিসকভ সাবস্টিটিউশন নীতি সম্পর্কে ভুলে গেছি। এজন্য আপনি এটি করতে পারবেন না। ধরে নিই যে আপনি সমস্ত প্রধান "বৈশিষ্ট্য গোষ্ঠী" এর জন্য "বৈশিষ্ট্য / ইন্টারফেস" সংজ্ঞায়িত করেছেন, আপনি ক্রমবর্ধমান শ্রেণীর বিভিন্ন শাখায় নির্দ্বিধায় বৈশিষ্ট্যগুলি প্রয়োগ করতে পারেন, যেমন ফ্লাইডিং বৈশিষ্ট্যটি পাখি দ্বারা প্রয়োগ করা যেতে পারে এবং কিছু বিশেষ ধরনের কাঠবিড়ালি এবং মাছ ছিল।
সুতরাং আমার প্রশ্নের পরিমাণ "আমি কীভাবে কোনও বৈশিষ্ট্য আন-ইমপ্লিমেন্ট করতে পারি?" যদি আপনার সুপার-ক্লাসটি জাভা সিরিয়ালাইজেবল হয় তবে আপনার রাজ্যকে সিরিয়ালকরণের কোনও উপায় না থাকলেও আপনাকেও একটি হতে হবে, উদাহরণস্বরূপ যদি আপনার কাছে "সকেট" থাকে।
এটি করার একটি উপায় হ'ল শুরু থেকেই আপনার সমস্ত বৈশিষ্ট্যকে জোড়ায় সংজ্ঞায়িত করা: ফ্লাইং এবং নটফ্লাইং (যা যদি অসমর্থিত অপারেশন এক্সেক্সশনকে নিক্ষেপ করে তবে এর বিরুদ্ধে পরীক্ষা করা না থাকলে)। নোট-বৈশিষ্ট্যটি কোনও নতুন ইন্টারফেস সংজ্ঞায়িত করবে না এবং কেবল এটির জন্য পরীক্ষা করা যেতে পারে। একটি "সস্তা" সমাধানের মতো মনে হয়, বিশেষত যদি শুরু থেকে ব্যবহৃত হয়।
" it would be nice if one could define "exceptions" afterward, without having to use some horrible hacks everywhere"
আপনি আচরণের নিয়ন্ত্রণের কোনও কারখানা পদ্ধতি হ্যাকি বিবেচনা করবেন?
NotSupportedException
থেকে নিক্ষেপ করতে পারে Penguin.fly()
।
class Penguin < Bird; undef fly; end;
। আপনার অন্য প্রশ্ন করা উচিত কিনা ।
function save_yourself_from_crashing_airplane(Bird b) { f.fly() }
আরও অনেক জটিল হয়ে উঠবে। (পিটার তারেক যেমন বলেছিলেন, এটি এলএসপি লঙ্ঘন করে)