এক্সিজ্টের অনুরোধে, আমি আমার মন্তব্যটি আরও দীর্ঘ উত্তরে প্রসারিত করছি।
লোকেরা যে বৃহত্তম ভুলটি বিশ্বাস করে তা হল ইন্টারফেসগুলি কেবল খালি বিমূর্ত শ্রেণি। একটি ইন্টারফেস একটি প্রোগ্রামারকে বলার একটি উপায়, "আপনি যতটা আমাকে দেন তা আমি ততক্ষণ বিবেচনা করি না যতক্ষণ না এটি এই সম্মেলনটি অনুসরণ করে।"
.NET গ্রন্থাগারটি একটি দুর্দান্ত উদাহরণ হিসাবে কাজ করে। উদাহরণস্বরূপ, আপনি যখন কোনও ফাংশন লেখেন যা কোনও গ্রহণ করে IEnumerable<T>
, আপনি যা বলছেন তা হ'ল " আপনি কীভাবে আপনার ডেটা সংরক্ষণ করছেন তা আমি বিবেচনা করি না I আমি কেবল জানতে চাই যে আমি একটি foreach
লুপ ব্যবহার করতে পারি ।
এটি কিছু খুব নমনীয় কোড বাড়ে। হঠাৎ সংহত করার জন্য, আপনাকে যা করতে হবে তা হ'ল বিদ্যমান ইন্টারফেসের নিয়ম অনুসারে খেলতে হবে। যদি ইন্টারফেস বাস্তবায়ন করা কঠিন বা বিভ্রান্তিকর হয়, তবে সম্ভবত এটি এমন একটি ইঙ্গিত যা আপনি একটি বৃত্তাকার ছিদ্রটি একটি বৃত্তাকার গর্তে নিক্ষেপ করার চেষ্টা করছেন।
কিন্তু তারপরে প্রশ্নটি আসে: "কোড পুনরায় ব্যবহার সম্পর্কে কী? আমার সিএস অধ্যাপকরা আমাকে বলেছিলেন যে উত্তরাধিকার হ'ল সমস্ত কোড পুনরায় ব্যবহারের সমস্যার সমাধান এবং সেই উত্তরাধিকার আপনাকে একবার লিখতে এবং সর্বত্র ব্যবহার করতে দেয় এবং এটি এতিমদের উদ্ধারে প্রক্রিয়ায় মেনানজাইটিস নিরাময়ে সক্ষম হবে? উদীয়মান সমুদ্র থেকে আর কোনও অশ্রু থাকবে না এবং ইত্যাদি ইত্যাদি হবে না ইত্যাদি। "
উত্তরাধিকার ব্যবহারের কারণে আপনি "কোড পুনরায় ব্যবহার" শব্দের শব্দ পছন্দ করেন এটি একটি খুব খারাপ ধারণা। Google দ্বারা কোড স্টাইলিং নির্দেশিকা এই বিন্দু মোটামুটি সংক্ষেপে তোলে:
উত্তরাধিকারের চেয়ে সংমিশ্রণটি প্রায়শই উপযুক্ত। ... [খ] যেহেতু একটি উপ-শ্রেণীর প্রয়োগকারী কোডটি বেস এবং উপ-শ্রেণীর মধ্যে ছড়িয়ে পড়েছে, বাস্তবায়ন বোঝা আরও কঠিন হতে পারে। উপ-শ্রেণি ভার্চুয়াল নয় এমন ফাংশনগুলিকে ওভাররাইড করতে পারে না, সুতরাং উপ-শ্রেণীর প্রয়োগ পরিবর্তন করতে পারে না।
উত্তরাধিকার কেন সবসময় উত্তর হয় না তা চিত্রিত করার জন্য, আমি মাইস্পেশিয়াল ফাইলে রাইটার called নামে একটি ক্লাস ব্যবহার করতে যাচ্ছি † যে ব্যক্তি অন্ধভাবে বিশ্বাস করে যে উত্তরাধিকার সব সমস্যার সমাধান তা যুক্তি দিত যে আপনার কাছ থেকে উত্তরাধিকারী হওয়ার চেষ্টা করা উচিত FileStream
, পাছে আপনার FileStream
কোডটি নকল করবেন না । স্মার্ট লোকেরা বুঝতে পারে যে এটি নির্বোধ। FileStream
আপনার ক্লাসে আপনার কেবল একটি বস্তু থাকা উচিত (হয় স্থানীয় বা সদস্য ভেরিয়েবল হিসাবে) এবং এর কার্যকারিতাটি ব্যবহার করুন।
FileStream
উদাহরণস্বরূপ কল্পিত বলে মনে হতে পারে, কিন্তু এটা নয়। আপনার যদি দুটি ক্লাস থাকে যা উভয়ই একই ইন্টারফেসটি একইভাবে একইভাবে প্রয়োগ করে, তবে আপনার একটি তৃতীয় শ্রেণি থাকা উচিত যা অপারেশনটিকে সদৃশ করে enc আপনার লক্ষ্যটি এমন ক্লাসগুলি লিখতে হবে যা স্বয়ংসম্পূর্ণ পুনরায় ব্যবহারযোগ্য ব্লকগুলি যা লেগোসের মতো একসাথে রাখা যায় write
এর অর্থ এই নয় যে উত্তরাধিকারকে সর্বদাই এড়ানো উচিত। অনেকগুলি বিষয় বিবেচনা করার আছে, এবং বেশিরভাগটি "কম্পোজিশন বনাম উত্তরাধিকার" প্রশ্নটি গবেষণা করে আচ্ছাদিত হবে। আমাদের নিজস্ব স্ট্যাক ওভারফ্লো বিষয়টিতে কয়েকটি ভাল উত্তর রয়েছে।
দিন শেষে, আপনার সহকর্মীর অনুভূতির কোনও অবগত সিদ্ধান্ত নেওয়ার জন্য প্রয়োজনীয় গভীরতা বা বোঝার অভাব রয়েছে। বিষয়টি গবেষণা করুন এবং এটি নিজের জন্য নির্ধারণ করুন।
Inherit উত্তরাধিকার বর্ণনা করার সময়, সবাই প্রাণী ব্যবহার করে। তা অকেজো। 11 বছরের বিকাশে, আমি কখনও নামে একটি শ্রেণি লিখিনি Cat
, তাই আমি এটি উদাহরণ হিসাবে ব্যবহার করব না।
alligator
এর বাস্তবায়নeat
পৃথক, অবশ্যই এটি গ্রহণ করেcat
এবংdog
পরামিতি হিসাবে।