আমরা কীভাবে জানব যে সাধারণকরণের চেয়ে রচনাটির পক্ষে সর্বদা সঠিক পছন্দ?


9

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

আমরা কীভাবে জানতে পারি যে এটি সঠিক পছন্দ? এটি অন্তত গুরুত্বপূর্ণ কারণ যদি ভুল হয় তবে এটি করার জন্য এক টন রিফ্যাক্টরিং থাকতে পারে?


9
আপনার উদাহরণটি সত্যই কার্যকর হয় না কারণ আপনি বলতে পারবেন না যে একটি লাইন একটি বিন্দু, এবং সুতরাং এটি লিসকভ সাবস্টিটিউশন নীতিটি ব্যর্থ হয় এবং উত্তরাধিকার যথাযথ নয়।
ডিন হার্ডিং

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


1
@ সাঙ্গো: দেখে মনে হচ্ছে আপনি বিষয়টি পুরোপুরি মিস করেছেন।
CarneyCode

জেনারালাইজেশনের পরিবর্তে বিশেষত্ব বাড়ানো হচ্ছে না?
তুলাইনস কর্ডোভা

উত্তর:


17

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

আমারা কীভাবে এটা জানি? অভিজ্ঞতা থেকে এবং অন্যের অভিজ্ঞতা থেকে।

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

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


আমি এটি পছন্দ করছি; একটি upvote নিতে।
কারনেকোড

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

7

আপনি যদি "উত্তরাধিকারের চেয়ে বেশি রচনা তৈরি করুন" এর বাইরেও থাম্বের একটি শক্তিশালী নিয়ম চান তবে আমি এই জাতীয় কিছু প্রস্তাব করতে পারি:

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

তবে থাম্বের সমস্ত নিয়মের মতো, একবার আপনি যদি নিয়মটি বুঝতে পারেন - তবে আপনি নিয়মটি ভাঙ্গতে মুক্ত হন :)


0

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

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


এটা কি আরও স্বাভাবিক? একটি রেখাটি কি আরও দুটি পয়েন্ট নয় যেটি একক পয়েন্ট প্রসারিত?
CarneyCode

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

0

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

"রচনাটি সাধারণীকরণও ব্যবহার করতে পারে"। এই বিবৃতি কি আমাদের বোঝায়? যদি তা না হয় তবে আমরা এখনও 'অনুগ্রহ' বিধিটি উপলব্ধি করতে প্রস্তুত নই।

আমরা সংশ্লেষণের পক্ষে কেন, রচনাটি সাধারণীকরণের চেয়ে আরও বর্ধিত / নমনীয়তার সম্ভাবনা সরবরাহ করে। এই এক্সটেনশন / নমনীয়তাটি বেশিরভাগ রানটাইম / গতিশীল নমনীয়তা (যা ইন্টারফেস এবং রচনার সমন্বয়ে অর্জন করা হয়) বোঝায় to

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

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


-4

আজ আমি প্রায় 300 এলওসি লিখেছি। এবং আমি যে নীতিটি লঙ্ঘন করতে পেরেছি এবং লঙ্ঘন করেছি তা মনে করতে পারি না। রিফ্যাক্টরিং আমার আত্মাকে রক্ষা করবে, আশা করি।

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

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