আমি যদি কোনও ইন্টারফেস বাস্তবায়ন করি, তবে কি এটিকে উত্তরাধিকার বলা হবে?


31

আমার ক্লাসটি যদি implementsকোনও ইন্টারফেস হয় তবে আমি কি বলতে পারি যে আমি উত্তরাধিকার অনুসরণ করছি? আমি জানি যে যখন ক্লাস extendsঅন্য ক্লাস হয় তখন তার উত্তরাধিকার।



7
জোডরেলের মন্তব্যটি কেবল ভুল। একটি ইন্টারফেস বাস্তবায়ন আসলে উত্তরাধিকার, এবং অন্য থেকে একটি ইন্টারফেস উত্তরাধিকার সূত্রে উত্তরাধিকার। আমরা কিভাবে জানব? আমরা ব্যবহার করছি শব্দটি সংজ্ঞায়িত করে। উত্তরাধিকার হ'ল সম্পত্তি যা এক ধরণের উত্তরাধিকার সূত্রে প্রাপ্ত সদস্যরাও অন্য ধরণের সদস্য। এই সংজ্ঞা দ্বারা, স্পষ্টভাবে একটি শ্রেণি যা একটি ইন্টারফেস প্রয়োগ করে ইন্টারফেসের সমস্ত পদ্ধতি উত্তরাধিকার সূত্রে প্রাপ্ত; কেবল ক্লাস এবং ইন্টারফেসটি দেখুন এবং আপনি একটি সঠিক প্রোগ্রামে দেখতে পাবেন যে তাদের একই সদস্য রয়েছে।
এরিক লিপার্ট

আমি চেক না করে আরও বিভ্রান্তিতে ফেলে এসেছি।
রাজীব ভেনকাটি

18
এটির জন্য মূল্যবান, আমি মনে করি আপনি একটি শব্দের সংজ্ঞাতে অনেক সময় ব্যয় করছেন যা আপনাকে খুব বেশি উপকার করতে পারে না। দিনের শেষে, আমরা সকলেই জানি যে কোনও ইন্টারফেস বাস্তবায়নের অর্থ কী, এবং এটি "উত্তরাধিকার" হিসাবে বিবেচিত হয় তা আপনার দৈনন্দিন কাজের জন্য বেশিরভাগ ক্ষেত্রে অনিরাপদ।
রবার্ট হার্ভে

3
আমি (বেশিরভাগ ক্ষেত্রে) রবার্টের সাথে একমত আমি মনে করি জারগন শব্দের যথাযথ প্রযুক্তিগত অর্থ বোঝার বাস্তব মূল্য আছে কারণ সেগুলি বিভিন্ন প্রসঙ্গে ব্যবহৃত হয়। তবে রবার্ট ঠিক বলেছেন যে ব্যবহারিক প্রভাব বোঝার চেয়ে এটি আরও বেশি উপকারে আসে! কীভাবে আপনি আপনার কোডটিকে নিরাপদ করতে উত্তরাধিকার ব্যবহার করতে পারেন? আরও পরীক্ষামূলক? আরও পুনরায় ব্যবহারযোগ্য? আরো নমনীয়? ইত্যাদি। বেস ধরণের সদস্যরাও উদ্ভূত প্রকারের সদস্য বলে জেনে রাখা দুর্দান্ত তবে এটি কীভাবে কার্যকরভাবে ব্যবহার করতে হয় তা আরও জানা ভাল।
এরিক লিপার্ট

উত্তর:


78

আপডেট: আমি এই উত্তরটি সংশোধন করেছি। বেশ কয়েকটি ভাল পয়েন্টগুলি সেই মন্তব্যে উত্থাপিত হয়েছিল যেগুলি কল করার উপযুক্ত ছিল।

যদি আমার ক্লাস কোনও ইন্টারফেস প্রয়োগ করে তবে আমি কি বলতে পারি যে আমি উত্তরাধিকার অনুসরণ করছি?

"উত্তরাধিকার অনুসরণ করে" বলতে আপনার অর্থ কী তা সম্পূর্ণভাবে পরিষ্কার নয়। একটু ভিন্ন প্রশ্ন জিজ্ঞাসা করা যাক?

উত্তরাধিকার কী?

  • যখন এক ধরণের এক্স এর সদস্যদের অন্য ধরণের ওয়াইয়ের সদস্য হিসাবে বিবেচনা করা হয়, ওয়াইয়ের সেই সদস্যরা এক্স থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়
  • কিছু প্রকারের মধ্যে উত্তরাধিকারের সম্পর্ক রয়েছে; এটি হ'ল কিছু ধরণের এক্স এবং ওয়াইয়ের জন্য আমরা "Y এক্স থেকে উত্তরাধিকারী" বলে থাকি।

এগুলি সূক্ষ্মভাবে পৃথক। এটি দুর্ভাগ্যজনক কারণ এটি বিভ্রান্তিকর।

এই সূক্ষ্ম পার্থক্য থেকে সাধারণত কোন বিভ্রান্তি দেখা দেয়?

বিভ্রান্তি দেখা দিতে পারে কারণ লোকেরা উত্তরাধিকারকে বাস্তবায়নের বিশদ ভাগ করে নেওয়ার প্রক্রিয়া হিসাবে মনে করে। যদিও এটা হল এমন একটি প্রক্রিয়া, যে প্রক্রিয়া ভাগ করে কাজ করে সদস্যদের । সেই সদস্যদের বাস্তবায়ন দরকার নেই! যেমনটি আমরা দেখব, তারা বিমূর্ত হতে পারে।

আমি ব্যক্তিগতভাবে আরও খুশি হব যদি জাভা এবং সি # স্পেসিফিকেশনগুলি এই বিভ্রান্তি এড়াতে ইন্টারফেস পদ্ধতি এবং শ্রেণীর মধ্যে সম্পর্কের বর্ণনা দেওয়ার জন্য "উত্তরাধিকার সূত্রে" অন্য কোনও শব্দ ব্যবহার করে। তবে তারা তা করে না, এবং আমাদের স্পেসিফিকেশনগুলি থেকে তাদের বিরুদ্ধে নয়, তর্ক করতে হবে।

জাভাতে, ইন্টারফেস সদস্যরা ক্লাস দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত যা তাদের প্রয়োগ করে?

হ্যাঁ, কিছু আছে। জাভা স্পেসিফিকেশন বিভাগ 8.4.8 দেখুন, যা আমি আপনার সুবিধার জন্য এখানে উদ্ধৃত করেছি।

একটি শ্রেণি সি এর প্রত্যক্ষ সুপারক্লাস এবং ডাইরেক্ট সুপারিনটারফেসগুলি সমস্ত বিমূর্ত এবং ডিফল্ট পদ্ধতিগুলি থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় যার জন্য নিম্নলিখিতগুলির সমস্ত সত্য: [...]

আপনি যদি বলেন যে কোনও শ্রেণি একটি ইন্টারফেস প্রয়োগ করে তবে শ্রেণিটি সেই ইন্টারফেসের বিমূর্ত এবং ডিফল্ট পদ্ধতির উত্তরাধিকার সূত্রে প্রাপ্ত হয় । (অবশ্যই আমি অনুসরণকারী শর্তগুলি বাদ দিয়েছি; বিশদের জন্য বিশদটি দেখুন particular বিশেষত, কোনও শ্রেণি যা ইন্টারফেসের সদস্যকে প্রয়োগ করে সেই সদস্যটিকে উত্তরাধিকার সূত্রে প্রাপ্ত বলে মনে করা হয় না Again আবার, এটি কি বিভ্রান্তিকর? হ্যাঁ))

আমরা কি জাভাতে সাধারণত বলি যে কোনও শ্রেণি ইন্টারফেস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত?

সাধারণত আমরা বলব যে একটি শ্রেণি একটি ইন্টারফেস প্রয়োগ করে । উপরে উল্লিখিত হিসাবে, একটি শ্রেণি ইন্টারফেস থেকে সদস্যদের উত্তরাধিকারী হতে পারে , এবং এখনও ইন্টারফেস থেকে উত্তরাধিকারী বলা হবে না। যা বিভ্রান্তিকর, হ্যাঁ

এই সূক্ষ্ম পার্থক্য কি প্রতিদিন কাজ করে?

সাধারণত না। স্পেসিফিকেশনের এই ধরণের সংকীর্ণ পার্সিং ব্যবসায়িক বিকাশকারীদের লাইনের চেয়ে লেখককে সংকলন করতে আরও কার্যকর। "উত্তরাধিকার সূত্রে প্রাপ্ত" এর একটি সুনির্দিষ্ট সংজ্ঞা পাওয়ার চেয়ে ইন্টারফেসটি কখন ব্যবহার করা উচিত তা বোঝা আরও গুরুত্বপূর্ণ।


4
আমি একটি আধ্যাত্মিক রেফারেন্স দিয়ে তর্ক করতে পারি না। যখন স্পেসিফিকেশনগুলি পৃথক হয়, যেমনগুলি তারা অগত্যা করে, সহজ পদগুলি শব্দার্থভাবে অতিরিক্ত বোঝা এবং প্রসঙ্গের বাইরে অস্পষ্ট হয়ে যায়। প্রশ্নটি ট্যাগ করা হয়েছে javaসুতরাং এটি সঠিক উত্তর, যদি না অপিটি অন্য কোনও বোঝায় java:-)
জোডরেল

5
যদিও প্রশ্নটি জাভা দিয়ে ট্যাগ করা হয়েছে, তবে জেনেরিক পদটির জন্য একটি ভাষার স্পেসিফিকেশন উল্লেখ করার জন্য আমি সমস্যাযুক্ত বলে মনে করি। অনেক ভাষায় ইন্টারফেস থাকে এবং তাদের ভাষার স্পেসগুলি আলাদা শব্দ ব্যবহার করতে পারে, তাই জাভা-নির্দিষ্ট শব্দটি ব্যবহার করে এমন ডেভলপারদের সাথে কথা বলার সময় বিভ্রান্তিকর হতে পারে যারা এক্স-ল্যাং ব্যবহার করেন।
টমাস ওভেনস

5
@ থমাস ওভেনস: আমি একমত যে এই দৃশ্যটি সাধারণ এবং আমি আপনার সিদ্ধান্তের সাথে সম্পূর্ণই একমত নই। আপনার বর্ণিত যোগাযোগ সমস্যার সমাধান হ'ল জড়িত প্রত্যেককেই প্রাসঙ্গিক প্রসঙ্গে শব্দগুলির সুনির্দিষ্ট অর্থ সম্পর্কে শিক্ষিত করে তোলা । এই স্পষ্টতা সরবরাহ করতে স্পেসিফিকেশন বিদ্যমান; তাদের ব্যাবহার করুন!
এরিক লিপার্ট

5
জাভা ভাষার স্পেসিফিকেশন কেন এখানে চূড়ান্ত বলবে? ভাষার স্পেসিফিকেশন প্রায়শই এমন জিনিসগুলির দাবি করে যা "সাধারণ বিকাশকারী" পরিভাষা সম্পর্কে একমত নয়।
বেনজামিন গ্রুয়েনবাউম

5
@ বেঞ্জামিন গ্রুয়েনবাউম: আমি এটি জানি না। এই বিকাশকারীরা ভুল, এবং তারা অন্যদেরকে তাদের ভুল বিশ্বাস সম্পর্কে "শিক্ষিত" করার জন্য এটি নিজেরাই গ্রহণ করে। আপনি যে প্রোগ্রামিং ভাষার বইয়ের সংখ্যা ঠিক করতে হয়েছিল তা আপনি বিশ্বাস করবেন না কারণ লেখকদের ভিবি, সি #, জাভাস্ক্রিপ্ট, ইত্যাদি সম্পর্কে কিছু সম্পূর্ণ উন্মাদ বিশ্বাস ছিল যা কোনওভাবেই সঠিক ছিল না। (জন স্কিটি তাদের মধ্যে ছিলেন না; সি # অবধি গভীরতার শুরু থেকেই সঠিক ছিল! আমি কোনও বইতে এত কম মন্তব্য করি নি এবং এখনও পেয়েছি।)
এরিক লিপার্ট

26

উত্তরাধিকার অর্থ সুপারক্লাসের জন্য একটি নতুন সাবক্লাস লেখা। একটি ইন্টারফেসের বিরুদ্ধে একটি নতুন শ্রেণি লেখা সেই ইন্টারফেসটি বাস্তবায়ন করে। (এবং একটি পুরানো উপর ভিত্তি করে একটি নতুন ইন্টারফেস লিখতে যে ইন্টারফেস প্রসারিত হয় ।)

তিনটি সম্ভাবনার ক্ষেত্রে প্রযোজ্য একমাত্র সঠিক শব্দটি হ'ল সাবটাইপিং । প্রতিটি উপপ্রকার একটি সাবক্লাস নয়।


1
জিওএফ বইটি সাব-টাইপিংয়ের বর্ণনার জন্য ইন্টারফেস উত্তরাধিকারের উপযুক্ত শব্দটিকে বিবেচনা করবে বলে মনে হচ্ছে (বিভাগের 1.6 ক্লাস বনাম ইন্টারফেস উত্তরাধিকার)
জিনাত

"আমি একবার জাভা ব্যবহারকারী গ্রুপের সভায় যোগ দিয়েছি যেখানে জেমস গোসলিং (জাভার উদ্ভাবক) বৈশিষ্ট্যযুক্ত বক্তা ছিলেন। স্মরণযোগ্য প্রশ্নোত্তর পর্বের সময়, কেউ তাকে জিজ্ঞাসা করেছিল:" আপনি যদি আবার জাভা করতে পারতেন তবে আপনি কী পরিবর্তন করবেন? "" আমি চাই ক্লাস ছেড়ে দিন, "তিনি জবাব দিয়েছিলেন। তিনি ব্যাখ্যা করেছিলেন যে আসল সমস্যাটি প্রতি শ্রেণীর ছিল না, বরং বাস্তবায়নের উত্তরাধিকার (সম্পর্কের প্রসারিত) ছিল। ইন্টারফেসের উত্তরাধিকার (সরঞ্জামগুলির সম্পর্ক) অগ্রাধিকারযোগ্য। যখনই সম্ভব হবে আপনার প্রয়োগের উত্তরাধিকার এড়ানো উচিত।" javaworld.com/article/2073649/core-java/...
ricardoramos

1

সঙ্গে উপশ্রেণী , আপনি

  • সুপারক্লাসের রাজ্যের উত্তরাধিকারী (সমস্ত উদাহরণ ভেরিয়েবলগুলি, আপনি সেগুলি দেখতে পান না কেন)
  • প্রকৃত বাস্তবায়নের উত্তরাধিকারী (সমস্ত অ-বিমূর্ত পদ্ধতি)

সঙ্গে ইন্টারফেস , আপনার দ্বারা একটি চুক্তি হরতাল বাস্তবায়নের ঘোষণা পদ্ধতি।

এটি দেখার জন্য এটি ধ্রুপদী উপায়। এখন জাভা 8 এর সাথে ইন্টারফেসগুলি একটি মিশ্রণে পরিণত হয়:

  • আপনি এখনও রাষ্ট্রের উত্তরাধিকারী নন (ইন্টারফেসে এখনও উদাহরণ ভেরিয়েবল নেই)
  • আপনি এখন ইন্টারফেস থেকে ডিফল্ট বাস্তবায়ন উত্তরাধিকারী হতে পারে

এমন একটি ইন্টারফেস বাস্তবায়ন করবে যার পদ্ধতিগুলির সকলের ডিফল্ট বাস্তবায়ন এখনও 'বাস্তবায়ন' হিসাবে গণ্য হবে, না বরং এক্সটেনশন হিসাবে গণ্য হবে? আমি বলতে পারলাম না। যেহেতু এই কেসটি বরং সুদূরপ্রসারী (এটি প্রকৃতপক্ষে রাষ্ট্রবিহীন বহু-উত্তরাধিকারকে সক্ষম করেছে), আমি এখনও কেবলমাত্র সাবক্লাসের সাথে 'উত্তরাধিকার' ব্যবহার করব।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.