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


109

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

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

আমি এখানে উত্তরাধিকার ব্যবহার করি এমন একটি দৃ concrete় উদাহরণ। এটি কীভাবে রচনা ব্যবহার করতে পরিবর্তিত হবে এবং আমি কী অর্জন করব?

Class Shape
{
    string name;
  public:
    void getName();
    virtual void draw()=0;
}

Class Circle: public Shape
{
    void draw(/*draw circle*/);
}

57
না, যখন মানুষ বলে রচনা তারা সত্যিই মানে পছন্দ করা পছন্দ রচনা, না কখনই না উত্তরাধিকার ব্যবহার । আপনার পুরো প্রশ্নটি ত্রুটিযুক্ত ভিত্তিতে তৈরি। উপযুক্ত হলে উত্তরাধিকার ব্যবহার করুন।
বিল করুন


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

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

2
@ বিল্টহিজার্ড আমি মনে করি অনেক লোক যারা সত্য বলে এটি কখনও কখনও উত্তরাধিকার ব্যবহার না করে বোঝায় তবে তারা ভুল।
ইমিগ্রিস

উত্তর:


51

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

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

আসলে, আপনি যখন বলেছিলেন তখন আপনি মূলত নিজের প্রশ্নের উত্তর দিয়েছিলেন "But I have a feeling that when people say prefer composition, they really mean prefer a combination of composition and interface implementation."। ইন্টারফেস এবং একটি আচরণগত সংমিশ্রনের মাধ্যমে সাধারণ আচরণ সরবরাহ করা যেতে পারে।

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


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

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

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

@AndresF। "অবজেক্ট ওরিয়েন্টেড অ্যানালাইসিস অ্যান্ড অ্যাপ্লিকেশন উইথ অ্যাপ্লিকেশন" যা পর্যবেক্ষক নিদর্শন দেখিয়েছে তার মাধ্যমে পড়ার সময় আমি উদাহরণস্বরূপ "ইন্টারফেসের মাধ্যমে বহুবর্ষ" জুড়ে এসেছি। আমি তখন আমার উত্তর বুঝতে পেরেছি।
সমিস

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

79

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

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

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

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

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

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

interface UsefulThingsInterface {
    void doThings();
    void doMoreThings();
}

...

class WayOfDoingUsefulThings implements UsefulThingsInterface{
     private foo stuff;
     public final int getStuff();
     void doThings(){
       //modifies stuff, such that ...
       ...
     }
     ...
     void doMoreThings(){
       //ignores stuff
       ...
     }
 }

আপনি মনে করেন এটি সুন্দর, এবং "জিনিস" করার নিজস্ব নিজস্ব পদ্ধতি রয়েছে তবে আপনি "মোর থিংস" করার ক্ষমতা অর্জনের জন্য উত্তরাধিকার ব্যবহার করেন,

class MyUsefulThings extends WayOfDoingUsefulThings{
     void doThings {
        //my way
     }
}

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

 void dealWithStuff(WayOfDoingUsefulThings bar){
     bar.doThings()
     use(bar.getStuff());
 }

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

রচনা ব্যবহার করে

class MyUsefulThings implements UsefulThingsInterface{
     private way = new WayOfDoingUsefulThings()
     void doThings() {
        //my way
     }
     void doMoreThings() {
        this.way.doMoreThings();
     }
}

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

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

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

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

  1. উত্তরাধিকার বা এটির জন্য ডিজাইন নিষিদ্ধ করুন
  2. রচনা পছন্দ

উপরের কারণগুলির জন্য একটি ভাল গাইড, এবং কোনও যথেষ্ট পরিমাণে ব্যয় করবেন না।


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

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

27

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

একটি সাধারণ উদাহরণ গেম ডেভলপমেন্টের বিশ্ব থেকে আসে। ধরা যাক আপনার সমস্ত গেম সত্তা - প্লেয়ারের স্পেসশিপ, দানব, গুলি, ইত্যাদি জন্য আপনার একটি বেস ক্লাস রয়েছে; প্রতিটি সত্তার ধরণের নিজস্ব উপক্লাস থাকে। উত্তরাধিকার পদ্ধতির কয়েক বহুরুপী পদ্ধতি ব্যবহার করেন, যেমন update_controls(), update_physics(), draw(), ইত্যাদি, এবং তাদের প্রতিটি উপশ্রেণী জন্য বাস্তবায়ন। যাইহোক, এর অর্থ হল আপনি সম্পর্কহীন কার্যকারিতাটি সংযুক্ত করছেন: এটি কোনও স্থানটিকে সরানোর জন্য দেখতে কেমন তা অপ্রাসঙ্গিক এবং এটি আঁকতে আপনাকে এর এআই সম্পর্কে কিছু জানতে হবে না। সংমিশ্রিত পদ্ধতির পরিবর্তে কয়েকটি বেস ক্লাস (বা ইন্টারফেস) সংজ্ঞায়িত করা হয়, যেমন EntityBrain(উপশ্লেনগুলি এআই বা প্লেয়ার ইনপুট EntityPhysicsবাস্তবায়ন করে ), (উপক্লাসগুলি আন্দোলনের পদার্থবিজ্ঞান বাস্তবায়ন করে) এবং EntityPainter(সাবক্লাসগুলি অঙ্কনের যত্ন নেয়), এবং একটি অ-বহুবৈজ্ঞানিক শ্রেণিEntityএটি প্রতিটি একটি উদাহরণ ধারণ করে। এইভাবে, আপনি কোনও পদার্থবিজ্ঞানের মডেল এবং যে কোনও এআইয়ের সাথে যে কোনও উপস্থিতিকে একত্রিত করতে পারেন এবং যেহেতু আপনি এগুলি পৃথক রাখেন তাই আপনার কোডটিও অনেক বেশি পরিষ্কার হবে। এছাড়াও, "আমি এমন একটি দানব চাই যা লেভেল 1-এ বেলুন দানবের মতো দেখায় তবে 15 স্তরের পাগল ক্লাউনটির মতো আচরণ করে" চলে যায়: আপনি কেবল উপযুক্ত উপাদানগুলি নিয়ে যান এবং তাদের একসাথে আঠালো করেন।

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

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


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

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

"আমি দেখতে চাই এমন দৈত্য চাই ..." এটি কীভাবে বোঝায়? একটি ইন্টারফেস কোনও বাস্তবায়ন দেয় না, আপনাকে চেহারা এবং আচরণের কোডটি
একভাবে

1
@ নিককিডি আপনি স্তর 1 এবং স্তর 15MonsterVisuals balloonVisualsMonsterBehaviour crazyClownBehaviourMonster(balloonVisuals, crazyClownBehaviour)Monster(balloonVisuals, balloonBehaviour)Monster(crazyClownVisuals, crazyClownBehaviour)
কালেথ

13

আপনি যে উদাহরণ দিয়েছেন তা হ'ল উত্তরাধিকার প্রাকৃতিক পছন্দ। আমি মনে করি না যে কেউ দাবি করবেন যে রচনাটি উত্তরাধিকারের চেয়ে সর্বদা একটি ভাল পছন্দ - এটি কেবলমাত্র একটি গাইডলাইন যার অর্থ প্রচুর উচ্চতর বিশেষায়িত বস্তু তৈরির চেয়ে বেশ কয়েকটি তুলনামূলক সহজ বস্তু একত্রিত করা প্রায়শই ভাল।

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


11

আপনি এই চক্রটি অনেকটা সফ্টওয়্যার বিকাশ বক্তৃতাতে দেখতে পাবেন:

  1. কিছু বৈশিষ্ট্য বা প্যাটার্ন (আসুন একে "প্যাটার্ন এক্স" বলুন) কিছু নির্দিষ্ট উদ্দেশ্যে দরকারী বলে আবিষ্কার করা হয়েছে। ব্লগ পোস্টগুলিকে প্যাটার্ন এক্স সম্পর্কে গুণাবলী রচনা করে লেখা হয়েছে are

  2. হাইপ কিছু লোককে ভাবতে পরিচালিত করে যে যখনই সম্ভব আপনার প্যাটার্ন এক্স ব্যবহার করা উচিত ।

  3. অন্যান্য লোকেরা প্রাসঙ্গিক ক্ষেত্রে প্যাটার্ন এক্স ব্যবহার করা যেখানে এটি যথাযথ নয় তা দেখে বিরক্ত হন এবং তারা ব্লগ পোস্ট লিখেছেন যে আপনাকে সর্বদা প্যাটার্ন এক্স ব্যবহার করা উচিত নয় এবং এটি কিছু প্রসঙ্গেই ক্ষতিকারক।

  4. প্রতিক্রিয়া কিছু লোককে বিশ্বাস করতে বাধ্য করে যে প্যাটার্ন এক্স সর্বদা ক্ষতিকারক এবং কখনও ব্যবহার করা উচিত নয়

আপনি এই হাইপ / ব্যাকল্যাশ চক্রটি GOTOএসকিউএল থেকে নোএসকিউএল এবং হ্যাঁ, উত্তরাধিকারের জন্য নিদর্শন থেকে শুরু করে প্রায় কোনও বৈশিষ্ট্যের সাথে ঘটতে দেখবেন । প্রতিষেধক হ'ল সর্বদা প্রসঙ্গে বিবেচনা করা

রয়ে Circleনেমে থেকে Shapeহয় ঠিক কিভাবে উত্তরাধিকার উত্তরাধিকার সমর্থনকারী OO যেমন পণ্য ভাষায় ব্যবহার করা যেতে অনুমিত হয়।

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

এটিকে হাতুড়ি বনাম স্ক্রু ড্রাইভারের মতো ভাবেন। আপনি একটি হাতুড়ি উপর একটি স্ক্রু ড্রাইভার পছন্দ করা উচিত? প্রশ্নটির কোনও মানে হয় না। কাজের জন্য উপযুক্ত সরঞ্জামটি আপনার ব্যবহার করা উচিত, এবং এটি আপনার কোনও কাজটি করা দরকার তার উপর নির্ভর করে।

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