"উত্তরাধিকারের তুলনায় রচনা পছন্দ করুন" - স্বাক্ষর পরিবর্তনের বিরুদ্ধে রক্ষা করার একমাত্র কারণ?


13

এই পৃষ্ঠাটি নীচের যুক্তি দিয়ে উত্তরাধিকারের উপরে রচনাটির পক্ষে রয়েছে (এটি আমার কথায় পুনরায় লিখেছেন):

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

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



1
এছাড়াও দেখুন: এই $ {ব্লগ} আলোচনা
মশা

2
উক্তিটি এটি "একমাত্র" কারণ বলে না।
তুলাইনস কর্ডোভা

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

উত্তর:


27

আমার উপমাগুলি এখানে খুব ভাল লেগেছে: একটি ভিসিআর প্লেয়ার অন্তর্নির্মিত এমন একটি টিভি আপনি কি কখনও দেখেছেন? একজন ভিসিআর এবং ডিভিডি প্লেয়ার সহকারে কীভাবে? বা ব্লু-রে, ডিভিডি এবং ভিসিআর রয়েছে এমন একটি। ওহ এবং এখন সবাই স্ট্রিম করছে তাই আমাদের একটি নতুন টিভি সেট ডিজাইন করা দরকার ...

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

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


6
90 এর দশকের শেষের দিকে এবং 2000 এর দশকের গোড়ার দিকে ভিসিআর এবং ডিভিডি প্লেয়ারগুলির সাথে প্রচুর টিভি ছিল।
জ্যাব

@ জ্যাব এবং অনেকগুলি (সর্বাধিক?) টিভিগুলি আজ এই বিষয়টির জন্য স্ট্রিমিং সমর্থন করে।
কেসি

4
@ জ্যাব এবং তাদের কেউই তাদের ব্লাডি প্লেয়ার কিনতে সাহায্য করার জন্য তাদের ডিভিডি প্লেয়ার বিক্রি করতে পারবেন না
আলেকজান্ডার - মনিকা

1
@ জ্যাব ঠিক আছে। বিবৃতি "আপনি কি কখনও এমন একটি টিভি দেখেছেন যার মধ্যে ভিসিআর প্লেয়ার অন্তর্নির্মিত ছিল?" বোঝায় যে তারা বিদ্যমান।
জিমি জেমস

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

4

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

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

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


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

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

@ জার্স দুর্ভাগ্যক্রমে, জাভা স্থির পদ্ধতি সমর্থন করলেও, জাভা সংস্কৃতি তা করে না
k_g

@ ব্রিলিয়ান্ড ওওপি "সম্পর্কে" কী তা যত্নশীল? কীভাবে গুরুত্বপূর্ণ তা হ'ল আপনি কীভাবে এটি ব্যবহার করতে পারবেন এবং সেই উপায়গুলিতে এটি ব্যবহারের ফলাফল।
ব্যবহারকারী 253751

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

4

"উত্তরাধিকারের তুলনায় রচনা পছন্দ করুন" কেবলমাত্র একটি উত্তম তাত্ত্বিক

আপনার প্রসঙ্গটি বিবেচনা করা উচিত, কারণ এটি কোনও সর্বজনীন নিয়ম নয়। যখন আপনি রচনাটি করতে পারেন তখন উত্তরাধিকার কখনও ব্যবহার করবেন না বলে মনে করবেন না। যদি ঘটনাটি ঘটে থাকে তবে আপনি উত্তরাধিকার নিষিদ্ধ করে এটি ঠিক করবেন would

আমি এই পোস্টটি বরাবর এই পয়েন্টটি পরিষ্কার করতে আশা করি।

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


গাড়ির উদাহরণ

আমি বিকাশকারীদের সম্পর্কে লিখছি যারা গল্পের উদ্দেশ্যে বোবা পথে চেষ্টা করে

যে কিছু গলি কোর্স ব্যবহার আমাদের শাস্ত্রীয় উদাহরণ একটি বৈকল্পিক জন্য যাই ... আমরা একটি আছে Vehicle, বর্গ তারপর আমরা আহরণ Car, Airplane, Balloonএবং Ship

দ্রষ্টব্য : আপনার যদি এই উদাহরণটি গ্রাউন্ড করার দরকার হয় তবে ভিডিও গেমের মধ্যে এগুলি ধরণের জিনিস।

তারপরে Carএবং Airplaneকিছু সাধারণ কোড থাকতে পারে, কারণ তারা উভয়ই জমিতে চাকা চালাতে পারে। বিকাশকারীরা এর জন্য উত্তরাধিকার শৃঙ্খলে মধ্যস্থতাকারী শ্রেণি তৈরি বিবেচনা করতে পারে। তবুও, আসলে সেখানে কিছু মধ্যে ভাগ করা আছে কোড Airplaneএবং Balloon। তারা এর জন্য উত্তরাধিকার শৃঙ্খলে অন্য মধ্যস্থতাকারী শ্রেণি তৈরি বিবেচনা করতে পারে।

সুতরাং, বিকাশকারী একাধিক উত্তরাধিকার সন্ধান করবে। যেখানে বিকাশকারীরা একাধিক উত্তরাধিকার সন্ধান করছেন, সেখানে নকশাটি ইতিমধ্যে ভুল হয়ে গেছে।

এই আচরণটি ইন্টারফেস এবং রচনা হিসাবে মডেল করা আরও ভাল, তাই আমরা একাধিক শ্রেণির উত্তরাধিকারে না গিয়েই এটি পুনরায় ব্যবহার করতে পারি। যদি ডেভেলপারগণ, উদাহরণস্বরূপ, FlyingVehiculeবর্গ তৈরি করুন । তারা বলবে যে Airplaneএটি একটি FlyingVehicule(শ্রেণির উত্তরাধিকার), তবে আমরা পরিবর্তে বলতে পারি যে Airplaneএর একটি Flyingউপাদান (রচনা) রয়েছে এবং Airplaneএটি একটি IFlyingVehicule(ইন্টারফেস উত্তরাধিকার)।

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

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

উল্লেখ না করে সব Amphibious

আসলে, আমাদের সম্ভবত এমন জিনিসগুলির প্রয়োজন হবে না যা মাটি থেকে যায়। স্টিফেন হার্নের তার "" অংশীদারিত্বের পক্ষে ফেভারিটে কম্বিনেশন " অংশ 1 এবং অংশ 2 এর আরও নিখুঁত উদাহরণ রয়েছে ।


সাবস্টিটিউটেবিলিটি এবং এনক্যাপসুলেশন

করা উচিত Aউত্তরাধিকারী বা রচনাতে B?

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

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

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

রচনাতে বাস্তবায়নগুলি স্যুইচ করার অনুমতি এবং মশকরা সহজ করার সুবিধাও রয়েছে।

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

অবশেষে অবশ্যই তর্ক রয়েছে যে আমাদের পিতামাত্ত শ্রেণির প্রতিরক্ষা করার জন্য রচনাটি ব্যবহার করা উচিত কারণ উত্তরাধিকার পিতা-মাতার শ্রেণির এনক্যাপসুলেশনকে ভেঙে দেয়:

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

- নকশার ধরণগুলি: পুনরায় ব্যবহারযোগ্য অবজেক্ট-ওরিয়েন্টড সফ্টওয়্যার এর উপাদানসমূহ, চারটি গ্যাং

ওয়েল, এটি একটি খারাপভাবে ডিজাইন করা পিতাম শ্রেণীর। যে কারণে আপনার উচিত:

উত্তরাধিকারের জন্য ডিজাইন করুন বা এটি নিষিদ্ধ করুন।

- কার্যকর জাভা, জোশ ব্লচ


ইয়ো-ইও সমস্যা

আরও একটি ক্ষেত্রে যেখানে রচনাটি হ'ল ইয়ো-ইও সমস্যা । এটি উইকিপিডিয়া থেকে উদ্ধৃত:

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

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


পাল্টা উদাহরণ

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

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

সংযোজন : অন্য কিছু উপায় রয়েছে যেগুলি ওআরএম অবজেক্টগুলিকে প্রসারিত করতে পারে। সুতরাং, আমি মনে করি না যে এই ক্ষেত্রে উত্তরাধিকার প্রয়োজন। এটা সস্তা.

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

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

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

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

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


সর্বশেষ ভাবনা

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

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

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


উহ ...। নেট ফ্রেমওয়ার্কটি স্ট্রিম-সম্পর্কিত কাজটি করতে বেশ কয়েকটি ধরণের উত্তরাধিকারসূত্রে স্ট্রিম ব্যবহার করে। এটি অবিশ্বাস্যভাবে ভাল কাজ করে এবং এটি ব্যবহার করা এবং প্রসারিত করা অত্যন্ত সহজ। আপনার উদাহরণটি খুব ভাল একটি নয় ...
টি। সার

1
@ টিএসআর "এটি ব্যবহার করা এবং প্রসারিত করা অত্যন্ত সহজ" আপনি কি কখনও কখনও স্ট্যান্ডার্ড আউট স্ট্রিমটিকে ডিবাগের দিকে ছড়িয়ে দেওয়ার চেষ্টা করেছেন? তাদের স্ট্রিমগুলি প্রসারিত করার চেষ্টা করা আমার একমাত্র অভিজ্ঞতা। এটা সহজ ছিল না। এটি এমন এক দুঃস্বপ্ন যা আমার কাছে ক্লাসের প্রতিটি পদ্ধতিকে স্পষ্টভাবে ওভাররাইড করে। অত্যন্ত পুনরাবৃত্তি। এবং যদি আপনি .NET উত্স কোডটি দেখে থাকেন তবে সমস্ত কিছু স্পষ্টভাবে ওভাররাইড করা তারা কীভাবে তা সম্পাদন করে pretty সুতরাং আমি বিশ্বাস করি না যে এটি বাড়ানো এত সহজ।
jpmc26

একটি স্ট্রিম থেকে স্ট্রাক্ট পড়া এবং লেখা ফ্রি ফাংশন বা মাল্টিমেডথ সহ আরও ভাল করা হয়।
ব্যবহারকারী 253751

@ jpmc26 আমি দুঃখিত আপনার অভিজ্ঞতা খুব ভাল ছিল না। যদিও আমার নিজের কাছে স্ট্রিম-সম্পর্কিত স্টাফ বিভিন্ন জিনিসের জন্য ব্যবহার বা প্রয়োগ করতে কোনও সমস্যা ছিল না।
টি। সর

3

সাধারণত রচনা-ওভার-হেরিরিটেন্সের ড্রাইভিং ধারণাটি হ'ল পরিবর্তনের প্রচারের জন্য আপনার যে পরিমাণ কোডের পরিবর্তন করতে হবে তা হ্রাস না করার জন্য বৃহত্তর ডিজাইনের নমনীয়তা সরবরাহ করা (যা আমি প্রশ্নবিদ্ধ মনে করি)।

উদাহরণ স্বরূপ উইকিপিডিয়া তার পদ্ধতির ক্ষমতার একটি ভাল উদাহরণ দিতে:

প্রতিটি "কম্পোজিশন-পিস" এর জন্য একটি বেস ইন্টারফেসের সংজ্ঞা দেওয়া আপনি সহজেই বিভিন্ন ধরণের "কমপোজড-অবজেক্ট" তৈরি করতে পারেন যা একমাত্র উত্তরাধিকারের সাথে পৌঁছানো কঠিন হতে পারে।


সুতরাং এই বিভাগটি একটি রচনা উদাহরণ দেয়, তাই না? আমি জিজ্ঞাসা করছি কারণ এটি নিবন্ধে সুস্পষ্ট নয়।
উত্কু

1
হ্যাঁ, "উত্তরাধিকারের ওপরে রচনা" এর অর্থ এই নয় যে আপনার ইন্টারফেস নেই, আপনি যদি প্লেয়ার অবজেক্টের দিকে তাকান তবে আপনি দেখতে পারেন যে একটি হায়ারাকিতে পুরোপুরি ফিট রয়েছে তবে (নিষ্ঠুরতার অজুহাতে) কোড উত্তরাধিকার থেকে আসছে না, তবে কিছু শ্রেণীর সাথে রচনা থেকে যা কাজ করে
lbenini

2

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

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

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

পরের দিন আমি জিজ্ঞাসা করি এটি কি চেয়েছিল। আপনি কি মনে করেন বস?

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

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

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

ইন্ডিরিশন খুব শক্তিশালী। এটি বুদ্ধিমানের সাথে ব্যবহার করুন।


0

এখানে আরও একটি কারণ রয়েছে: অনেকগুলি ওও ভাষায় (আমি এখানে সি ++, সি # বা জাভা এর মতো ভাষাগুলি নিয়ে ভাবছি), একবার আপনি এটি তৈরি করার পরে কোনও শ্রেণীর শ্রেণি পরিবর্তন করার কোনও উপায় নেই।

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

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

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

এটি একটি কংক্রিট কর্মচারী শ্রেণি তৈরি করা জীবনকে এত সহজ করে তোলে এবং এটি একটি ধারক হিসাবে বিবেচনা করে যেখানে আপনি কাজের ভূমিকা হিসাবে সম্পত্তি যুক্ত করতে পারেন।


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

0

উত্তরাধিকার দুটি জিনিস সরবরাহ করে:

1) কোড পুনঃব্যবহার: রচনা মাধ্যমে সহজেই সম্পন্ন করা যেতে পারে। এবং প্রকৃতপক্ষে রচনার মাধ্যমে আরও ভাল অর্জন করা যায় কারণ এটি আরও ভাল এনক্যাপসুলেশন সংরক্ষণ করে।

2) পলিমারফিজম: "ইন্টারফেস" (যে পদ্ধতিগুলিতে সমস্ত পদ্ধতি খাঁটি-ভার্চুয়াল হয়) এর মাধ্যমে সম্পন্ন করা যায়।

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

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

অবশেষে, অনেক ভাষায় ইউনিট টেস্টিং "রচনা" ভিত্তিক অবজেক্টগুলি ম্যাক / টেস্ট / ডামি অবজেক্টের সাথে সদস্য অবজেক্টের পরিবর্তে ইউনিট টেস্টিং "উত্তরাধিকার" ভিত্তিক অবজেক্টের চেয়ে অনেক সহজ easier


0

উত্তরাধিকারের চেয়ে কমপোজিশনের পক্ষে একমাত্র কারণ কি?

নাঃ।

উত্তরাধিকারের তুলনায় রচনাকে সমর্থন করার অনেক কারণ রয়েছে। একটি সঠিক উত্তর নেই। তবে আমি উত্তরাধিকারের চেয়ে মিশ্রণটিতে রচনার পক্ষে আরও একটি কারণ ছুঁড়ে দেব:

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

এখানে আমি এটি সম্পর্কে কীভাবে ভাবছি: আমি যখন অন্য কারও কোডটি পড়ছি, যদি আমি দেখি যে তারা একটি বর্গ বাড়িয়েছে, আমি জিজ্ঞাসা করতে যাচ্ছি তারা সুপার ক্লাসে কী আচরণ পরিবর্তন করছে?

এবং তারপরে আমি তাদের কোড দিয়ে যাব, একটি ওভাররাইডেন ফাংশন সন্ধান করব। যদি আমি কোনও কিছুই না দেখি তবে আমি উত্তরাধিকারের অপব্যবহার হিসাবে এটিকে শ্রেণিবদ্ধ করি। তার পরিবর্তে তাদের রচনাটি ব্যবহার করা উচিত ছিল, যদি কেবল তাদের কোডের মাধ্যমে 5 মিনিট পড়া থেকে আমাকে (এবং দলের প্রত্যেকটি ব্যক্তি) বাঁচাতে পারি!

এখানে একটি কংক্রিট উদাহরণ রয়েছে: জাভাতে JFrameশ্রেণি একটি উইন্ডো উপস্থাপন করে। একটি উইন্ডো তৈরি করতে, আপনি একটি উদাহরণ তৈরি করেন JFrameএবং তারপরে স্টাফ যুক্ত করতে এবং এটি দেখানোর জন্য সেই ফাংশনগুলিতে কল করুন।

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

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

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


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

1
@ jpmc26 ... পৃথিবীতে কেন কোনও ক্লাসের নতুন উদাহরণ তৈরি করার জন্য আপনার কারখানার শ্রেণির প্রয়োজন হবে? এবং উত্তরাধিকার কীভাবে আপনি বর্ণনা করছেন তার পাঠযোগ্যতার উন্নতি করবে?
কেভিন ওয়ার্কম্যান

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

যেমনটি আমি বলেছি, এর অর্থ এই নয় যে উত্তরাধিকার উত্তম, তবে এটি উদাহরণ দিয়ে বোঝায় যে কিছু পরিস্থিতিতে রচনা কীভাবে পাঠযোগ্যতার উন্নতি করে না।
jpmc26

1
নির্দিষ্ট উদাহরণ না দেখে সত্যই মন্তব্য করা শক্ত। তবে আপনি যা বর্ণনা করেছেন তা আমার কাছে ওভার ইঞ্জিনিয়ারিংয়ের মতো বলে মনে হচ্ছে। একটি শ্রেণীর উদাহরণ প্রয়োজন? newশব্দ এক দেয়। যাইহোক আলোচনার জন্য ধন্যবাদ।
কেভিন ওয়ার্কম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.