"উত্তরাধিকারের পক্ষে অনুকূলকরণের" ধারণাটি কোথা থেকে এসেছে?


143

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

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

এই ধারণাটি কোথা থেকে এসেছে কেউ জানেন এবং এর পিছনে যুক্তি কী?


45
অন্যরা যেমন উল্লেখ করেছে, এটি প্রায় দীর্ঘকাল হয়েছে - আমি অবাক হয়েছি আপনি এখনই এটি শুনছেন। যেকোন সময়ের জন্য জাভা-র মতো ভাষাগুলিতে বড় ব্যবস্থা তৈরি করা যে কারও কাছে এটি স্বজ্ঞাত। আমি যে কোনও সাক্ষাত্কার দিই তার মূল বিষয় এবং যখন কোনও প্রার্থী উত্তরাধিকার সম্পর্কে কথা বলতে শুরু করেন, আমি তাদের দক্ষতা স্তর এবং অভিজ্ঞতার পরিমাণ নিয়ে সন্দেহ শুরু করি। : এখানে কেন উত্তরাধিকার একটি ভঙ্গুর সমাধান (অনেক অনেকে হয়) হয় একটি ভাল ভূমিকা এর artima.com/lejava/articles/designprinciples4.html
Janx

6
@ জাঙ্কস: সম্ভবত এটিই। আমি জাভার মতো ভাষায় বড় সিস্টেম তৈরি করি না; আমি এগুলি দেলফিতে তৈরি করেছি এবং লিসকোভের বিকল্প ও বহুমুখীতা ছাড়া আমরা কখনই কিছু করতে চাই না। এর অবজেক্ট মডেল জাভা বা সি ++ এর চেয়ে কিছু নির্দিষ্ট উপায়ে আলাদা, এবং এই ম্যাক্সিমটি সমাধান করার জন্য বোঝা যায় এমন অনেকগুলি সমস্যা ডেলফিতে আসলেই বিদ্যমান নয়, বা অনেক কম সমস্যাযুক্ত। বিভিন্ন দৃষ্টিকোণ থেকে ভিন্ন দৃষ্টিভঙ্গি, আমার ধারণা।
ম্যাসন হুইলারের

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

8
গত কয়েকমাস?!?
জাস

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

উত্তর:


136

যদিও আমি মনে করি আমি GoF এর অনেক আগে রচনা-বনাম-উত্তরাধিকার আলোচনা শুনেছি, তবে আমি কোনও নির্দিষ্ট উত্সে আঙুল রাখতে পারি না। বুচ হতে পারে যাই হোক।

<গলাবাজি>

আহ তবে অনেক মন্ত্রের মতো এটি সাধারণ লাইনে বিকাশিত হয়েছে:

  1. এটি একটি বিশিষ্ট সম্মানিত উত্স দ্বারা বিশদ ব্যাখ্যা এবং যুক্তির সাথে পরিচয় করিয়ে দেওয়া হয়েছে যিনি মূল জটিল আলোচনার স্মৃতি হিসাবে ক্যাচ-বাক্যাংশটি মুদ্রণ করেন
  2. এটি কিছুক্ষণের জন্য-জানার জন্য কিছুটা ক্লাবের চোখের জলকে জানার সাথে ভাগ করে নেওয়া হয়, সাধারণত যখন N00b ভুল সম্পর্কে মন্তব্য করা হয়
  3. শীঘ্রই এটি হাজার হাজার হাজার লোক দ্বারা নির্বোধভাবে পুনরাবৃত্তি করে যারা ব্যাখ্যাটি কখনই পড়ে না, তবে এটি এটিকে ভাববার অজুহাত হিসাবে ব্যবহার করে এবং অন্যের চেয়ে নিজেকে শ্রেষ্ঠ মনে করার সস্তা এবং সহজ উপায় হিসাবে ব্যবহার করে
  4. অবশেষে, যুক্তিসঙ্গত পরিমাণে ডিবাঙ্কিং "মেম" জোয়ারকে থামাতে পারে না - এবং দৃষ্টান্তটি ধর্ম এবং কৌতূহলের অধঃপতিত হয়।

মেম, মূলত জ্ঞানচর্চায় n00bs নেতৃত্ব দেওয়ার উদ্দেশ্যে, এখন তাদের অজ্ঞান করে তুলতে একটি ক্লাব হিসাবে ব্যবহৃত হয়।

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

আপনার নকশাগুলি সম্পর্কে দয়া করে ভাবুন এবং স্লোগান দান বন্ধ করুন।

</ গলাবাজি>


16
বুচ যুক্তি দেয় যে বাস্তবায়নের উত্তরাধিকার শ্রেণীর মধ্যে উচ্চ মিলনকে পরিচয় করিয়ে দেয়। অন্যদিকে, তিনি উত্তরাধিকারকে মূল ধারণাটি বিবেচনা করেন যা প্রক্রিয়াকরণের প্রোগ্রামিং থেকে ওওপিকে পৃথক করে।
নেমানজা ত্রিফুনোভিচ

13
এই জাতীয় জিনিস জন্য একটি শব্দ থাকা উচিত। অকাল পুনর্গঠন , হতে পারে?
জার্গ ডব্লু মিট্টাগ

8
@ জার্গ: আপনি জানেন যে অকাল পুনর্গঠনের মতো শব্দটির কী হবে? ঠিক কী উপরে বর্ণিত হয়েছে। :) (বিটিডাব্লু। পুনর্গঠন কখন অকাল হয় না?)
বার্জার ফ্রয়েন্ড-হানসেন

6
@ নিমঞ্জা: ঠিক আছে। এই মিলনটি সত্যই খারাপ কিনা তা নিয়ে প্রশ্ন। যদি শ্রেণিগুলি ধারণাগতভাবে দৃ strongly়ভাবে একত্রী হয় এবং ধারণাগতভাবে একটি সুপার টাইপ-সাব-টাইপ সম্পর্ক তৈরি করে এবং ভাষা স্তরে আনুষ্ঠানিকভাবে ডিকোপল করা হয় তবে তা দৃ never়রূপে মিলিত হতে পারে না, তবে শক্তিশালী মিলন ঠিক আছে।
dsimcha

5
মন্ত্রটি সহজ, "যেহেতু আপনি কোনও কিছুর মতো দেখতে প্লে-দোহকে আকার দিতে পারেন তার অর্থ এই নয় যে আপনার প্লে-দোহ থেকে সমস্ত কিছু তৈরি করা উচিত" " ;)
ইভান প্লেস

73

অভিজ্ঞতা থাকতে হবে।

যেমন আপনি বলেন যে তারা বিভিন্ন কাজের জন্য সরঞ্জাম, তবে বাক্যাংশটি এসেছে কারণ লোকেরা সেভাবে এটি ব্যবহার করে না।

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

সুতরাং কেন উত্তরাধিকারের তুলনায় রচনাটির পক্ষপাতিত্ব করুন - ভাল কারণ কেবল প্রায়শই ক্লাসের মধ্যে সম্পর্কটি বহুবর্ষীয় নয়। উত্তরাধিকার সূত্রে লোকেদের হাঁটুর জবাব না দেওয়ার জন্য এটি মনে করিয়ে দেওয়ার জন্য এটি সহজভাবে বিদ্যমান।


7
সুতরাং মূলত, আপনি বলতে পারবেন না যে "যদি আপনি লিসকভের বিকল্পটি বুঝতে না পারেন তবে আপনাকে প্রথমে ওওপি ব্যবহার করা উচিত নয়," সুতরাং আপনি "অসামর্থ্যের চেয়ে বেশি সংশ্লেষের পক্ষে" বলছেন না বরং অপারগের দ্বারা ক্ষতির সীমাবদ্ধ করার প্রয়াস হিসাবে পরিকল্পনাটি?
ম্যাসন হুইলারের

13
@ মেসন: যে কোনও মন্ত্রের মতোই, "ইনরিটিশনের চেয়ে বেশি রচনা তৈরি করা" শিক্ষানবিশ প্রোগ্রামারগুলিকে লক্ষ্য করা হয়। আপনি যদি উত্তরাধিকার কখন ব্যবহার করবেন এবং কবে রচনা ব্যবহার করবেন তা ইতিমধ্যে আপনি যদি জানেন তবে এর মতো মন্ত্রটি পুনরাবৃত্তি করা অর্থহীন।
ডিন হার্ডিং

7
@Dean - আমি নিশ্চিত নই শিক্ষানবিস এক যারা উত্তরাধিকার সর্বোত্তম কার্যাভ্যাস বোঝে না সমান। আমি মনে করি এর চেয়ে আরও কিছু আছে। দরিদ্র উত্তরাধিকার আমার কাজের অনেক, অনেক মাথাব্যথার কারণ এবং এটি প্রোগ্রামারদের দ্বারা লিখিত কোড নয় যারা "শিক্ষানবিশ" হিসাবে বিবেচিত হবে।
নিকোল

6
@ রেনেসিস: আমি যখন শুনি তখন প্রথম কথাটি মনে করি, "কিছু লোকের দশ বছরের অভিজ্ঞতা থাকে এবং কিছু লোকের এক বছরের অভিজ্ঞতা দশবার পুনরাবৃত্তি হয়।"
ম্যাসন হুইলারের

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

43

এটি কোনও নতুন ধারণা নয়, আমি বিশ্বাস করি এটি আসলে জিওএফ ডিজাইনের নিদর্শন বইয়ে প্রবর্তিত হয়েছিল, যা ১৯৯৪ সালে প্রকাশিত হয়েছিল।

উত্তরাধিকারের প্রধান সমস্যা হ'ল এটি সাদা বাক্স। সংজ্ঞা অনুসারে, আপনি যে শ্রেণীর কাছ থেকে উত্তরাধিকারী হয়েছেন তার বাস্তবায়ন বিশদ জানতে হবে। অন্যদিকে রচনা দিয়ে, আপনি কেবল যে ক্লাসটি রচনা করছেন তার সার্বজনীন ইন্টারফেস সম্পর্কে যত্নশীল।

জিওএফ বইটি থেকে:

উত্তরাধিকার তার পিতামাতার বাস্তবায়নের বিশদে একটি সাবক্লাস উন্মোচিত করে, প্রায়ই বলা হয় যে 'উত্তরাধিকার এনক্যাপসুলেশন ভেঙে যায়'

GoF বইয়ের উইকিপিডিয়া নিবন্ধটির একটি শালীন ভূমিকা রয়েছে।


14
আমি তাতে একমত নই আপনি যে শ্রেণীর অংশ থেকে উত্তরাধিকারী হচ্ছেন তার বাস্তবায়ন বিশদ জানতে হবে না; শ্রেণীর দ্বারা উন্মুক্ত কেবল সর্বজনীন এবং সুরক্ষিত সদস্য। যদি আপনাকে বাস্তবায়নের বিশদটি জানতে হয়, তবে আপনি বা যে কেউ বেস ক্লাসটি লিখেছেন সে কিছু ভুল করছে, এবং যদি ত্রুটি বেস ক্লাসে থাকে তবে রচনা আপনাকে চারপাশে ঠিক করতে / কাজ করতে সহায়তা করবে না।
ম্যাসন হুইলারের

18
আপনি যা পড়েননি তার সাথে আপনি কীভাবে একমত হতে পারেন? GoF এর একটি দৃ solid় পৃষ্ঠা এবং আলোচনার অর্ধেক রয়েছে যা আপনি কেবলমাত্র একটি ক্ষুদ্র দৃশ্য পেয়ে যাচ্ছেন।
ফিলসোডাড

7
@ ফলোসোডাড: আমি যা পড়েছি তার সাথে আমি একমত নই। আমি ডিন যা লিখেছি তার সাথে আমি একমত নই, "সংজ্ঞার ভিত্তিতে, আপনি যে শ্রেণীর কাছ থেকে উত্তরাধিকারী হচ্ছেন তার বাস্তবায়ন বিশদটি আপনার জানা দরকার," যা আমি পড়েছি।
ম্যাসন হুইলারের

10
আমি যা লিখেছি তা হ'ল জিওএফ বইয়ে বর্ণিত সংক্ষিপ্তসার। আমি এটিকে কিছুটা দৃ strongly়তার সাথে বলতে পেরেছি (আপনার বাস্তবায়নের সমস্ত বিবরণ জানার দরকার নেই) তবে এটিই সাধারণ কারণ যা জিএফ বলেছে উত্তরাধিকারের চেয়ে রচনার পক্ষে favor
ডিন হার্ডিং

2
আমি ভুল হলে আমাকে সংশোধন করুন তবে আমি এটিকে দেখতে পাচ্ছি, "অন্তর্নিহিত (অর্থাৎ উত্তরাধিকারের চেয়ে সুস্পষ্ট শ্রেণীর সম্পর্ককে (অর্থাত্ ইন্টারফেস)) পছন্দ করুন" " প্রাক্তন আপনাকে কীভাবে এটি করবেন তা না জানিয়ে আপনাকে কী প্রয়োজন তা বলে দেয়। পরেরটি আপনাকে কেবল এটি কীভাবে করতে হবে তা আপনাকে জানায় না তবে এটি আপনাকে রাস্তাতে অনুশোচনা করবে।
ইভান প্লেস

26

আপনার প্রশ্নের অংশের উত্তর দেওয়ার জন্য, আমি বিশ্বাস করি যে এই ধারণাটি প্রথমে জিওএফ ডিজাইন প্যাটার্নস: এলিজেন্টস অব রিজিয়েবল অবজেক্ট-ওরিয়েন্টড সফ্টওয়্যার বইয়ে প্রকাশিত হয়েছিল, যা ১৯৯৪ সালে প্রথম প্রকাশিত হয়েছিল। শব্দবন্ধটি পৃষ্ঠার ২০ পৃষ্ঠায় শীর্ষে প্রদর্শিত হয়েছে:

উত্তরাধিকারের উপর অবজেক্ট অবজেক্ট রচনা

রচনাটির সাথে উত্তরাধিকারের সংক্ষিপ্ত তুলনা করে তারা এই বিবৃতিটির উপস্থাপনা করেন। তারা "উত্তরাধিকার কখনও ব্যবহার করবেন না" বলে না।


23

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

এটা সত্য কেন? কারণ উত্তরাধিকার 2 ক্লাসের মধ্যে আঁটসাঁট, সংকলন-সময়ের সংযোগ তৈরি করে। এর বিপরীতে রচনাটি আলগা সংযোগ, অন্যদের মধ্যে যা উদ্বেগের স্পষ্ট বিভাজন সক্ষম করে, রানটাইম এবং সহজতর সময়ে নির্ভরতা স্যুইচ করার সম্ভাবনা, আরও বিচ্ছিন্ন নির্ভরশীলতা পরীক্ষার যোগ্যতা।

তার অর্থ শুধুমাত্র উত্তরাধিকারকে যত্ন সহকারে পরিচালনা করা উচিত কারণ এটি ব্যয় করে আসে, এটি কার্যকর নয়। প্রকৃতপক্ষে, "অবদানের অধীনে সংমিশ্রণ" প্রায়শই "উত্তরাধিকারের চেয়ে বেশি অবদান" হিসাবে শেষ হয় কারণ আপনি প্রায়শই চান যে আপনার রচিত নির্ভরতা কংক্রিট সাবক্লাসের পরিবর্তে একটি বিমূর্ত সুপারক্লাস হতে পারে। এটি রানটাইমে আপনার নির্ভরতার বিভিন্ন কংক্রিট বাস্তবায়নের মধ্যে পরিবর্তন করতে দেয়।

সেই কারণে (অন্যদের মধ্যে), আপনি সম্ভবত ভ্যানিলা উত্তরাধিকারের চেয়ে ইন্টারফেস বাস্তবায়ন বা বিমূর্ত শ্রেণির আকারে ব্যবহৃত উত্তরাধিকার দেখতে পাবেন।

একটি (রূপক) উদাহরণ হতে পারে:

"আমার একটি স্নেক ক্লাস রয়েছে এবং আমি এই শ্রেণীর অংশ হিসাবে সর্পকে কামড়ালে কী হবে তা অন্তর্ভুক্ত করতে চাই I আমি সাপকে বিটারঅনিমাল ক্লাসের উত্তরাধিকারী করার প্রলোভিত করব যাতে কামড় () পদ্ধতি রয়েছে এবং বিষাক্ত দংশনের প্রতিফলন ঘটানোর জন্য সেই পদ্ধতিটি ওভাররাইড করে কিন্তু উত্তরাধিকার সূত্রে রচনা আমাকে সতর্ক করে দিয়েছে যে এর পরিবর্তে আমার রচনাটি ব্যবহার করার চেষ্টা করা উচিত ... আমার ক্ষেত্রে এটি সাপকে দংশনের সদস্য হওয়াতে অনুবাদ করতে পারে B কামড় শ্রেণিটি বেশ কয়েকটি সাবক্লাস সহ বিমূর্ত (বা একটি ইন্টারফেস) হতে পারে allow আমার যেমন ভেনোমবাইট এবং ড্রাইবাইট সাবক্লাস থাকা এবং সাপ বয়স বাড়ার সাথে সাথে একই সাপের উদাহরণে কামড় পরিবর্তন করতে সক্ষম হওয়ার মতো চমৎকার জিনিস Plus প্লাস একটি বাইটের সমস্ত প্রভাব তার নিজস্ব শ্রেণিতে পরিচালনা করা আমাকে সেই ফ্রস্ট শ্রেণিতে পুনরায় ব্যবহার করার অনুমতি দিতে পারে , কারণ হিম কামড়ে তবে বিউটারআনিমাল নয়, এবং আরও কিছু ... "


4
সাপের সাথে খুব ভাল উদাহরণ। আমি সম্প্রতি আমার নিজের ক্লাস
মাকসি

22

রচনার জন্য কিছু সম্ভাব্য যুক্তি:

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

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

রচনা প্রায় সবসময় আরও নমনীয়
রচনা ব্যবহার করে আপনি সর্বদা আপনার নিজস্ব আচরণ নির্ধারণ করতে বা আপনার রচিত অংশগুলির খালি অংশটি প্রকাশ করতে পারেন। এইভাবে আপনি কোনও উত্তরাধিকারের স্তরক্রম (ভার্চুয়াল বনাম অ-ভার্চুয়াল ইত্যাদি) দ্বারা আরোপিত কোনও বিধিনিষেধের মুখোমুখি হন না)

সুতরাং, এটি কারণ হতে পারে যে রচনাটি প্রাকৃতিকভাবে একটি সরল রূপক যার উত্তরাধিকারের চেয়ে তাত্ত্বিক সীমাবদ্ধতা কম। তদুপরি, এই নির্দিষ্ট কারণগুলি নকশাকালীন সময়ে আরও স্পষ্ট হতে পারে, বা উত্তরাধিকারের কিছু ব্যথা পয়েন্টের সাথে ডিল করার সময় সম্ভবত আঁকড়ে থাকতে পারে।

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


1
"স্পষ্টতই এটি এই পরিষ্কার কাটা / একমুখী রাস্তা নয়" " রচনা কখন উত্তরাধিকারের চেয়ে বেশি (বা সমানভাবে) নমনীয় হয় না? আমি তর্ক করবে এটা খুব হয় একটি একমুখী রাস্তায়। উত্তরাধিকার কেবল একটি বিশেষ রচনার ক্ষেত্রে সিনট্যাকটিক চিনি sugar
weberc2

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

11

সম্ভবত আপনি গত কয়েক মাসে এই কথা লোকেদের লক্ষ্য করেছেন, তবে এটি এর চেয়ে অনেক বেশি সময় ধরে ভাল প্রোগ্রামারদের কাছে পরিচিত। আমি এটি প্রায় এক দশক ধরে উপযুক্ত যেখানে বলছিলাম।

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

আমি উদাহরণের জন্য একটি সহজ উদাহরণ দিতে দিন। মনে করুন যে উত্তরাধিকারী গাছের গভীরে, কেউ একটি পদ্ধতির নাম দিয়েছেন foo। তারপরে অন্য কেউ এসে fooগাছের শীর্ষে জুড়েছিলেন, তবে আলাদা কিছু করছেন। (একাধিক উত্তরাধিকারের ক্ষেত্রে এই কেসটি বেশি সাধারণ)) এখন মূল শ্রেণিতে কর্মরত ব্যক্তিটি অস্পষ্ট শিশু শ্রেণিকে ভেঙে ফেলেছে এবং সম্ভবত এটি উপলব্ধি করতে পারে না। ইউনিট পরীক্ষাগুলির সাথে আপনার 100% কভারেজ থাকতে পারে এবং এই ভাঙ্গাটি লক্ষ্য করা যায় না কারণ শীর্ষে থাকা ব্যক্তি শিশু শ্রেণির পরীক্ষার কথা ভাবেন না, এবং শিশু শ্রেণির পরীক্ষাগুলি শীর্ষে তৈরি নতুন পদ্ধতির পরীক্ষার কথা ভাবেন না । (স্বীকৃতভাবে ইউনিট পরীক্ষা লেখার উপায় রয়েছে যা এটি ধরা পড়বে, তবে এমন কিছু ঘটনাও রয়েছে যেখানে আপনি সহজেই সেভাবে পরীক্ষাগুলি লিখতে পারবেন না))

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

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

দুর্ভাগ্যক্রমে অনেক বিকাশকারী অবজেক্ট অরিয়েন্টেড সফ্টওয়্যার সম্পর্কে শিখেন, উত্তরাধিকার সম্পর্কে শিখুন এবং তারপরে যতবার সম্ভব তাদের নতুন কুড়াল ব্যবহার করতে যান। যার অর্থ হ'ল তারা উত্তরাধিকারটি ব্যবহার করার চেষ্টা করেন যেখানে রচনাটি সঠিক সরঞ্জাম ছিল। আশা করি তারা সময়মতো আরও ভাল শিখবে, তবে প্রায়শই কিছু সরানো অঙ্গ ইত্যাদির পরে ঘন ঘন এমনটি ঘটে না etc. ইত্যাদি তাদের সামনে তুলে ধরে বলা যে এটি একটি খারাপ ধারণা শেখার প্রক্রিয়াটি গতি বাড়িয়ে এবং আঘাতগুলি কমাতে ঝোঁক।


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

1
@ মেসন: ভঙ্গুর বেস ক্লাসের উত্তরাধিকার সমস্যাটি যখন আসে তখন অব্জেক্ট পাস্কেলের অ্যান্ডার সংস্করণ (ওরফে ডেল্ফি) সি ++ এবং জাভা থেকে সেরা superior সি ++ এবং জাভা থেকে আলাদা নয়, উত্তরাধিকার সূত্রে প্রাপ্ত ভার্চুয়াল পদ্ধতির ওভারলোডিং জড়িত নয়।
বিট-টুইডলার

2
@ বিট-ট্যুইডলার, আপনি সি ++ এবং জাভা সম্পর্কে যা বলছেন তা স্মার্টটাক, পার্ল, পাইথন, রুবি, জাভাস্ক্রিপ্ট, সাধারণ লিস্প, উদ্দেশ্য-সি এবং যে সমস্ত ভাষা আমি শিখেছি সে সম্পর্কে ওও সমর্থন যে কোনও ফর্ম সরবরাহ করে। এটি বলেছিল, গুগলিং পরামর্শ দেয় যে সি # অবজেক্ট পাসকালের নেতৃত্ব অনুসরণ করে।
btilly

3
কারণ এন্ডার্স হেজলসবার্গ বোরল্যান্ডের অবজেক্ট পাস্কেল (ওরফে ডেলফি) এবং সি # এর স্বাদ ডিজাইন করেছিলেন।
বিট-টুইডলার

8

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

ক্লাস থেকে উত্তরাধিকারী হওয়া অনেক কিছুই বোঝায়। এর থেকে বোঝা যায় যে একটি ডেরাইভড হ'ল এক প্রকার বেইস ( লৌকিক বিস্তারের জন্য লিসকোভ সাবস্টিটিউশন নীতিটি দেখুন), যখনই আপনি কোনও বেস ব্যবহার করেন এটি একটি ডেরাইভড ব্যবহার করা বোধগম্য হবে। এটি বেসের সুরক্ষিত সদস্যদের এবং সদস্য কার্যগুলিতে ডাইরাইভ অ্যাক্সেস দেয়। এটি একটি ঘনিষ্ঠ সম্পর্ক, যার অর্থ এটির উচ্চ সংযুক্তি রয়েছে এবং একটিতে পরিবর্তনের ক্ষেত্রে অপরটিতে পরিবর্তনের প্রয়োজন হয়।

কাপলিং একটি খারাপ জিনিস। এটি প্রোগ্রামগুলি বুঝতে এবং সংশোধন করা আরও শক্ত করে তোলে। অন্যান্য জিনিস সমান হচ্ছে, আপনার সর্বদা কম সংযুক্তির সাথে বিকল্পটি নির্বাচন করা উচিত।

সুতরাং, যদি কোনও রচনা বা উত্তরাধিকার কার্যকরভাবে কার্যকরভাবে কাজ করে, তবে রচনাটি চয়ন করুন, কারণ এটি কম সংযুক্ত ling যদি রচনাটি কার্যকরভাবে কাজটি না করে, এবং উত্তরাধিকারী হবে, উত্তরাধিকার চয়ন করবে, কারণ আপনাকে করতে হবে।


"অন্যান্য পরিস্থিতিতে উত্তরাধিকার কাজ করবে এবং রচনাটি কাজ করবে না।" কখন? উত্তরাধিকার রচনা এবং ইন্টারফেস পলিমারফিজম ব্যবহার করে মডেল করা যেতে পারে, সুতরাং এমন কোনও পরিস্থিতি রয়েছে যার জন্য রচনাটি কাজ করবে না বলে আমি অবাক হব।
weberc2

8

এখানে আমার দুটি সেন্ট (ইতিমধ্যে উত্থাপিত সমস্ত দুর্দান্ত পয়েন্টের বাইরে):

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

যে কেউ পড়াতে বা পরামর্শদান করতে ব্যয় করেছেন, তিনি জানেন যে এটি প্রায়শই ঘটেছিল, বিশেষত নতুন বিকাশকারীদের সাথে যাদের অন্যান্য দৃষ্টান্তগুলির অভিজ্ঞতা রয়েছে:

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

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

80% ক্ষেত্রে এটি যথেষ্ট ভাল। তবে অন্যান্য 20% হ'ল সমস্যাটি শুরু হয়। পুনর্লিখন এড়ানোর জন্য এবং তারা ভাগ করে নেওয়ার বাস্তবায়নের সুযোগ নিয়েছে তা নিশ্চিত করার জন্য, তারা অন্তর্নিহিত বিমূর্তিগুলির পরিবর্তে অভিযুক্ত প্রয়োগের আশেপাশে তাদের শ্রেণিবিন্যাস নকশা করা শুরু করে। "দ্বিগুণ-লিঙ্কযুক্ত তালিকা থেকে স্ট্যাক উত্তরাধিকারসূত্রে" এর একটি ভাল উদাহরণ is

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

এগুলি এই বিষয়টির সাথে আরও জোরালো যে বাস্তবায়নের উত্তরাধিকারের সাথে অতিরিক্ত অতিরিক্ত কোড না লেখার সৌন্দর্যে আমরা অনেক কিছুই শিখেছি, সোজা প্রতিনিধির প্রতিনিধি কোডটি অনেকটা অপ্রাকৃত বলে মনে হচ্ছে। সুতরাং রচনাটি অগোছালো মনে হচ্ছে, এজন্যই নতুন প্রোগ্রামারগুলিকে যেভাবেই ব্যবহার করার জন্য তাদের চাপ দেওয়ার জন্য আমাদের থাম্বসের এই নিয়মগুলি প্রয়োজন (যা তারা পাশাপাশিও করে)।


শিক্ষার একটি সত্য অংশ। আপনার উচ্চতর কোর্সগুলি করতে হবে, বাকি 20% পেতে তবে আপনি ছাত্র হিসাবে কেবলমাত্র প্রাথমিক এবং এবং সম্ভবত মধ্যবর্তী কোর্স শিখিয়েছিলেন। শেষ পর্যন্ত, আপনি ভাল শিক্ষিত বোধ করছেন কারণ আপনি আপনার কোর্সগুলি ভাল করেছেন (এবং কেবল এটি সিঁথিতে কেবল একটি পিন দেখতে পাবেন না)। এটি বাস্তবতার মাত্র একটি অংশ এবং আমাদের সেরা বেট এর পার্শ্ব প্রতিক্রিয়াগুলি বোঝা, কোডারগুলিকে আক্রমণ না করা।
স্বাধীন

8

একটি মন্তব্যে, মেসন উল্লেখ করেছিলেন যে একদিন আমরা উত্তরাধিকারকে ক্ষতিকারক বলে বিবেচনা করব

আমিও তাই আশা করি.

উত্তরাধিকার নিয়ে সমস্যাটি একবারে সহজ এবং মারাত্মক, এটি একটি ধারণার একটি কার্যকারিতা থাকা উচিত এই ধারণাকে সম্মান করে না।

বেশিরভাগ ওও-ভাষায়, বেস ক্লাস থেকে উত্তরাধিকার সূত্রে আপনি:

  • এর ইন্টারফেস থেকে উত্তরাধিকারী
  • এর প্রয়োগ থেকে উত্তরাধিকারী (উভয় ডেটা এবং পদ্ধতি)

আর এখানেই ঝামেলা হয়ে যায়।

এই না শুধুমাত্র পদ্ধতির, যদিও 00 ভাষার বেশিরভাগই এটা দিয়ে আটকে আছে। ভাগ্যক্রমে সেগুলিতে ইন্টারফেস / বিমূর্ত ক্লাস বিদ্যমান।

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

একটি পাল্টা-পয়েন্ট হিসাবে, Haskellখাঁটি ইন্টারফেস (ধারণা হিসাবে পরিচিত) (1) থেকে "প্রাপ্ত" যখন কেবলমাত্র লিসকভ নীতিটি ব্যবহার করার অনুমতি দিন। আপনি বিদ্যমান শ্রেণি থেকে উত্পন্ন করতে পারবেন না, কেবল রচনা আপনাকে এর ডেটা এম্বেড করার অনুমতি দেয়।

(1) ধারণাগুলি বাস্তবায়নের জন্য একটি বুদ্ধিমান ডিফল্ট সরবরাহ করতে পারে, তবে যেহেতু তাদের কোনও ডেটা নেই, এই ডিফল্টটি কেবল ধারণার দ্বারা প্রস্তাবিত অন্যান্য পদ্ধতির ক্ষেত্রে বা ধ্রুবকগুলির মেয়াদে সংজ্ঞায়িত করা যায়।


7

সহজ উত্তরটি: রচনাগুলির চেয়ে উত্তরাধিকারের মিলন বেশি। দুটি অপশন দেওয়া, অন্যথায় সমমানের গুণাবলীর, কম দম্পতিকে বেছে নিন।


2
তবে এটাই পুরো কথা। সেগুলি না "অন্যথায় সমতুল্য।" উত্তরাধিকার লিসকভের বিকল্প এবং পলিমারফিজমকে সক্ষম করে, যা ওওপি ব্যবহারের পুরো বিষয়। রচনা না।
ম্যাসন হুইলারের

4
পলিমারফিজম / এলএসপি ওওপির "পুরো পয়েন্ট" নয়, সেগুলির একটি বৈশিষ্ট্য। এখানে এনক্যাপসুলেশন, বিমূর্ততা ইত্যাদিও রয়েছে herতিহ্যগতভাবে বোঝায় একটি "একটি" সম্পর্ক, সমষ্টি মডেলগুলির একটি "একটি" সম্পর্ক রয়েছে।
স্টিভ

@ স্টিভ: আপনি যে কোনও দৃষ্টান্তে ডেটা স্ট্রাকচার এবং পদ্ধতি / কার্যকারিতা তৈরিতে সমর্থন করে এমন বিমূর্ততা এবং এনক্যাপসুলেশন করতে পারেন। তবে পলিমারফিজম (বিশেষত এই প্রসঙ্গে ভার্চুয়াল পদ্ধতি প্রেরণকে বোঝাচ্ছে) এবং লিসকভের প্রতিস্থাপন অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের ক্ষেত্রে অনন্য। এটাই আমি তার দ্বারা বোঝাচ্ছি।
ম্যাসন হুইলারের

3
@ মেসন: গাইডলাইনটি হ'ল "উত্তরাধিকারের তুলনায় রচনাটিকে সমর্থন করা"। কোনওভাবেই এর অর্থ এই নয় যে উত্তরাধিকার ব্যবহার করা বা এড়িয়ে যাওয়া। এটি সমস্তই বলে যে অন্য সমস্ত জিনিস যখন সমান হয় তখন রচনা চয়ন করুন। তবে যদি উত্তরাধিকার দরকার হয় তবে এটি ব্যবহার করুন!
জেফ্রি ফাউস্ট

7

আমি মনে করি এই ধরণের পরামর্শ "উড়ানের পক্ষে গাড়ি চালানো পছন্দ করুন" বলার মতো। যে, প্লেনের গাড়িগুলির তুলনায় সব ধরণের সুবিধা রয়েছে তবে এটি একটি নির্দিষ্ট জটিলতা নিয়ে আসে। তাই যদি অনেকে শহরের কেন্দ্রস্থল থেকে শহরতলিতে উড়তে চেষ্টা করেন, তবে তাদের পরামর্শটি সত্যই শুনতে হবে যে তাদের ওড়ার দরকার নেই, এবং প্রকৃতপক্ষে, উড়ন্ত দীর্ঘমেয়াদে আরও জটিল করে তুলবে, স্বল্পমেয়াদে এটি দুর্দান্ত / দক্ষ / সহজ মনে হলেও। যেখানে যখন আপনি না উড়ে আসা প্রয়োজন, এটি সাধারণত সুস্পষ্ট হতে অনুমিত হচ্ছে।

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

এটি অন্তর্নিহিত বলে মনে করা হচ্ছে যে যখন আপনার সত্যিকার অর্থে উত্তরাধিকার দরকার তখন এটি সুস্পষ্ট এবং আপনার তখন এটি ব্যবহার করা উচিত।

এছাড়াও, স্টিভেন লো এর উত্তর। সত্যিই, সত্যিই যে।


1
আমি আপনার উপমাটি পছন্দ করি
ব্যারিওলয়ড

2

উত্তরাধিকারগতভাবে জন্মগতভাবে খারাপ নয় এবং রচনাটি অন্তর্নিহিত ভাল নয়। এগুলি কেবলমাত্র সরঞ্জাম যা কোনও ওও প্রোগ্রামার সফ্টওয়্যার ডিজাইন করতে ব্যবহার করতে পারে।

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

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

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


-1

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

যদিও তিনি এটি উল্লেখ করেননি, এটি আমার কাছে মনে হয় যে জাভাতে একক উত্তরাধিকার মানে রচনা আপনাকে উত্তরাধিকারের চেয়ে অনেক বেশি নমনীয়তা দেয়।

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