আমি এর আগে মনোদের একটি ভাষা-অজ্ঞাত বিবরণ ব্যবহার করতে যাচ্ছি , প্রথমে মনোয়েডগুলি বর্ণনা করে:
একটি মনোয়েড হ'ল (মোটামুটি) ফাংশনগুলির একটি সেট যা কিছু পরামিতি হিসাবে লাগে এবং একই ধরণের ফিরে আসে return
একটি মোনাড হ'ল (মোটামুটি) ফাংশনগুলির একটি সেট যা পরামিতি হিসাবে একটি মোড়কের ধরণ নেয় এবং একই মোড়কের প্রকারটি প্রদান করে।
সেগুলি সংজ্ঞা নয়, বর্ণনাকারী নোট করুন। এই বিবরণ আক্রমণ করতে নির্দ্বিধায়!
সুতরাং ওও ভাষায়, একটি মোনাড এই জাতীয় ক্রিয়াকলাপের অনুমতি দেয়:
Flier<Duck> m = new Flier<Duck>(duck).takeOff().flyAround().land()
নোট করুন যে মোনাড অন্তর্ভুক্ত শ্রেণীর চেয়ে বরং এই ক্রিয়াকলাপগুলির শব্দার্থককে সংজ্ঞায়িত করে এবং নিয়ন্ত্রণ করে।
Ditionতিহ্যগতভাবে, ওও ভাষায় আমরা এই শব্দার্থবিজ্ঞানগুলি সরবরাহ করতে শ্রেণিক শ্রেণিবিন্যাস এবং উত্তরাধিকার ব্যবহার করব। সুতরাং আমরা Bird
পদ্ধতি সহ একটি ক্লাস চাই takeOff()
, flyAround()
এবং land()
, এবং ডাক তাদের উত্তরাধিকার সূত্রে প্রাপ্ত হবে।
কিন্তু তারপরে আমরা বিমানহীন পাখি নিয়ে সমস্যায় পড়ি, কারণ penguin.takeOff()
ব্যর্থ হয়। আমাদের এক্সেকশন থ্রো এবং হ্যান্ডলিংয়ের অবলম্বন করতে হবে।
এছাড়াও, একবার আমরা বলি যে পেঙ্গুইন হ'ল Bird
একাধিক উত্তরাধিকার নিয়ে আমরা সমস্যায় পড়ি, উদাহরণস্বরূপ যদি আমাদেরও বংশগতি থাকে Swimmer
।
মূলত আমরা শ্রেণিগুলিতে শ্রেণিবদ্ধ করার চেষ্টা করছি (বিভাগের থিওরি লোকের কাছে ক্ষমা চেয়ে) এবং শব্দার্থবিজ্ঞান পৃথক শ্রেণীর পরিবর্তে বিভাগ দ্বারা সংজ্ঞায়িত করতে চাই। তবে মোনাডগুলি হায়ারারচিগুলির চেয়ে এটি করার জন্য আরও পরিষ্কার পদ্ধতি মনে হয়।
সুতরাং এই ক্ষেত্রে, আমরা Flier<T>
উপরের উদাহরণের মতো একটি মোনাদ চাই:
Flier<Duck> m = new Flier<Duck>(duck).takeOff().flyAround().land()
... এবং আমরা একটি instantiate না হবে Flier<Penguin>
। এমনকি এটি সংঘটন থেকে রোধ করতে আমরা স্থির টাইপিং ব্যবহার করতে পারি, সম্ভবত কোনও মার্ক ইন্টারফেস দিয়ে। বা রানটাইম সক্ষমতা-চেকিং জামিন আউট। তবে সত্যই, কোনও প্রোগ্রামারকে কখনও পেয়ারগুইন ফ্লেয়ারে ফেলা উচিত নয়, একই অর্থে তাদের কখনই শূন্য দ্বারা ভাগ করা উচিত নয়।
এছাড়াও, এটি আরও সাধারণভাবে প্রযোজ্য। একটি ফ্লাইয়ার পাখি হতে হবে না। উদাহরণস্বরূপ Flier<Pterodactyl>
, বা Flier<Squirrel>
those স্বতন্ত্র প্রকারের শব্দার্থবিজ্ঞান পরিবর্তন না করে।
একবার আমরা একটি ধারকটিতে কমপোজেবল ফাংশন দ্বারা শব্দার্থবিজ্ঞানগুলি শ্রেণীবদ্ধ করি - ধরণের শ্রেণিবিন্যাসের পরিবর্তে - এটি কোনও শ্রেণিবদ্ধের সাথে "ধরণের করণীয়, ধরণের নয়" শ্রেণীর সাথে পুরানো সমস্যাগুলি সমাধান করে। এটি খুব সহজে এবং স্পষ্টরূপে ক্লাসের জন্য একাধিক শব্দার্থক Flier<Duck>
যেমন, পাশাপাশি অনুমতি দেয় Swimmer<Duck>
। দেখে মনে হচ্ছে আমরা শ্রেণিবৃত্তি সম্পর্কিত শ্রেণিবিন্যাসের সাথে শ্রেণিবদ্ধকরণের মাধ্যমে প্রতিবন্ধক অমিলের সাথে লড়াই করছি। মনডস মার্জিতভাবে এটি পরিচালনা করে।
সুতরাং আমার প্রশ্নটি হ'ল যেভাবে আমরা উত্তরাধিকারের তুলনায় রচনার পক্ষে এসেছি, তাও উত্তরাধিকারের চেয়ে মনদের পক্ষে যাওয়ার পক্ষে কি বুদ্ধি রয়েছে?
(বিটিডাব্লু আমি নিশ্চিত ছিলাম না এটি এখানে বা কমপ সায়িতে হওয়া উচিত কিনা তবে এটি বাস্তবের মডেলিংয়ের মতো সমস্যা বলে মনে হয় But তবে সম্ভবত এটি আরও ভাল।