উত্তরাধিকার এবং রচনাগুলির মধ্যে পার্থক্য


208

রচনা এবং উত্তরাধিকার কি এক? আমি যদি কম্পোজিশনের প্যাটার্নটি বাস্তবায়ন করতে চাই তবে জাভাতে আমি কীভাবে এটি করতে পারি?


2
অন্যান্য সম্পর্কিত প্রশ্ন: উত্তরাধিকার সূত্রে যে কোনও রচনাও সম্পন্ন করতে পারে না? stackoverflow.com/questions/2238642/...
ewernli


1
এই নিবন্ধটি আমার জন্য দরকারী ছিল এবং তাই সাহায্য সহায়তা দিয়েছে, thoughtworks.com/insights/blog/...
QMaster

উত্তর:


321

এরা একেবারেই আলাদা। উত্তরাধিকার হ'ল একটি " সম্পর্ক " is রচনাটি একটি "হ্যাস-এ"

আপনি Cআপনার ক্লাসের ক্ষেত্র হিসাবে অন্য শ্রেণীর উদাহরণ না দিয়ে রচনাটি প্রসারিত করার পরিবর্তে করেন C। উত্তরাধিকারের তুলনায় রচনাটি আরও ভাল হতে পারে যেখানে একটি ভাল উদাহরণ java.util.Stack, যা বর্তমানে প্রসারিত java.util.Vector। এটি এখন একটি ভুল হিসাবে বিবেচিত হয়। একটি স্ট্যাক "হয়-না-একটি" ; আপনাকে নির্বিচারে উপাদানগুলি সন্নিবেশ করাতে এবং সরানোর অনুমতি দেওয়া উচিত নয়। পরিবর্তে এটি রচনা করা উচিত ছিল।

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

আমি জোশ ব্লচের কার্যকর জাভা দ্বিতীয় সংস্করণ বইয়ের সুপারিশ করছি

  • আইটেম 16: উত্তরাধিকারের চেয়ে পছন্দসই রচনা
  • আইটেম 17: উত্তরাধিকারের জন্য নকশা করুন এবং দস্তাবেজ অন্যথায় এটি নিষিদ্ধ করুন

ভাল অবজেক্ট-ওরিয়েন্টেড ডিজাইন উদারভাবে বিদ্যমান ক্লাসগুলি প্রসারিত করার বিষয়ে নয়। আপনার প্রথম প্রবৃত্তি পরিবর্তে রচনা করা উচিত।


আরো দেখুন:


4
মজাদার. কেন কেবল নতুন ক্লাস java.util.Stack2 তৈরি করবেন না যা রচনা ব্যবহার করে?
কেয়েড

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

5
খারাপ উদাহরণ, ভেক্টর এবং স্ট্যাক কী তা বোঝার জন্য আমাকে অতিরিক্ত অনুসন্ধান করতে হয়েছিল।
স্যাম রামিজানলি

গুড কিন্তু জাভা স্ট্যাক সম্পর্কে আপনার উদাহরণে এই উত্তরাধিকার কারণে একজন ভাল প্রার্থী নয় রচনা ওভার উত্তরাধিকার নির্বাচন হিসাবে এই প্রবন্ধে বলেন সম্পর্কে খারাপ সিদ্ধান্ত একটি নমুনা হল: thoughtworks.com/insights/blog/...
QMaster

212

রচনা মানে HAS A
উত্তরাধিকারীIS A

Example: গাড়িতে একটি ইঞ্জিন রয়েছে এবং গাড়ি একটি অটোমোবাইল

প্রোগ্রামিং এ এটি প্রতিনিধিত্ব করা হয়:

class Engine {} // The Engine class.

class Automobile {} // Automobile class which is parent to Car class.

class Car extends Automobile { // Car is an Automobile, so Car class extends Automobile class.
  private Engine engine; // Car has an Engine so, Car class has an instance of Engine class as its member.
}

7
আমি অনেক স্বয়ংক্রিয় গাড়ি এবং অটোমোবাইল সমতুল্য হিসাবে আমি "অটোমোবাইল" "চালিত যান" তে পরিবর্তন করতাম।
ন্যানোফারাড

5
@ হেক্সাফ্রাকশন আমি সম্মত হই যে বাহন সম্ভবত সম্ভাবনাময় একটি ভাল পছন্দ হতে পারে তবে একই সাথে-কোডাডিক্টিক্ট- যা জিজ্ঞাসা করা হয়েছে তার জন্য বিষয়টি ঠিক ঠিক তুলে ধরেছে।
nckbrz

5
"একটি ইঞ্জিন":-/
ওমর তারিক

সুন্দরভাবে কাটা। +1 টি। আরও পড়া javarevisited.blogspot.in/2015/06/…
রুট ট্রাভেলার

@ আন্ড্রেআখমেটোভ অটোমোবাইলের typeপ্রকারের ক্ষেত্র থাকতে পারেEnum
ওজনুগওয়া জুড ওচালিফু

42

উত্তরাধিকার কীভাবে বিপজ্জনক হতে পারে?

একটি উদাহরণ নিতে দিন

public class X{    
   public void do(){    
   }    
}    
Public Class Y extends X{
   public void work(){    
       do();    
   }
}

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

public int work(){
}

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

রচনা কীভাবে এই সমস্যাটিকে সমাধান করে?

একই উদাহরণটি সংশোধন করে দেখতে দিন

public class X{
    public void do(){
    }
}

Public Class Y{
    X x = new X();    
    public void work(){    
        x.do();
    }
}

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

2) রচনাটির দ্বিতীয় খুব ভাল সুবিধা এটি পদ্ধতিটি কলিংয়ের নমনীয়তা সরবরাহ করে, উদাহরণস্বরূপ:

class X implements R
{}
class Y implements R
{}

public class Test{    
    R r;    
}

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

3) আরেকটি দুর্দান্ত সুবিধা: ইউনিট পরীক্ষা করা

public class X {
    public void do(){
    }
}

Public Class Y {
    X x = new X();    
    public void work(){    
        x.do();    
    }    
}

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

৪) আমাদের উত্তরাধিকার এড়িয়ে চলার আরেকটি ভাল কারণ হ'ল জাভা একাধিক উত্তরাধিকার সমর্থন করে না।

এটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক:

Public class Transaction {
    Banking b;
    public static void main(String a[])    
    {    
        b = new Deposit();    
        if(b.deposit()){    
            b = new Credit();
            c.credit();    
        }
    }
}

জানা ভাল :

  1. রচনা সময়ে রচনা সহজেই অর্জন করা যায় যখন উত্তরাধিকার সংকলন সময়ে তার বৈশিষ্ট্যগুলি সরবরাহ করে

  2. রচনা HAS-A সম্পর্ক হিসাবেও পরিচিত এবং উত্তরাধিকার IS-A সম্পর্ক হিসাবেও পরিচিত

সুতরাং উপরের বিভিন্ন কারণে উত্তরাধিকারের তুলনায় রচনাটিকে সর্বদা পছন্দ করার অভ্যাস করুন make


3
সম্মত হন তবে রচনাটি ব্যবহার করে আপনার সমাধানটি দেওয়া হয়েছে .... আমাদের এখনও একটি বেবিসিট করতে হবে উদাহরণস্বরূপ এখন সুপার ক্লাস এক্স-এর পদ্ধতি থেকে নাম পরিবর্তন করে বদলে দেওয়া উচিত .... তারপরে সাব-ক্লাস ওয়াইও বজায় রাখতে হবে (পরিবর্তন করা দরকার) পাশাপাশি) এটি এখনও টান সংযোগ? এবং কীভাবে আমরা এ থেকে মুক্তি পাব?
stuckedoverflow

19

@ মিশেল রডরিগসের দেওয়া উত্তর সঠিক নয় (আমি ক্ষমাপ্রার্থী; আমি সরাসরি মন্তব্য করতে পারছি না), এবং কিছুটা বিভ্রান্তির কারণ হতে পারে।

ইন্টারফেস বাস্তবায়ন হ'ল উত্তরাধিকারের একধরনের ... আপনি যখন কোনও ইন্টারফেস প্রয়োগ করেন, আপনি কেবল সমস্ত ধ্রুবককে উত্তরাধিকার সূত্রে প্রাপ্ত হন না, আপনি আপনার বিষয়টিকে ইন্টারফেস দ্বারা নির্দিষ্ট ধরণের হিসাবে প্রতিশ্রুতি দিচ্ছেন; এটি এখনও একটি " ইস-এ " সম্পর্ক। যদি কোনও গাড়ি ফিলেবল প্রয়োগ করে , গাড়ি " হ'ল " একটি " ফিল্লাবল , এবং আপনি যেখানেই ফিললযোগ্য ব্যবহার করবেন সেখানে আপনার কোডটিতে ব্যবহার করা যেতে পারে

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

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

public class Car {

private GasTank myCarsGasTank;

}

আশা করি এটি কোনও ভুল বোঝাবুঝির বিষয়টি মুছে ফেলে।


17

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

public interface Flyable{
 public void fly();
}

public class Duck {
 Flyable fly;

 public Duck(){
  fly = new BackwardFlying();
 }
}

সুতরাং আমাদের একাধিক ক্লাস থাকতে পারে যা উড়ানের উদাহরণ প্রয়োগ করে:

public class BackwardFlying implements Flyable{
  public void fly(){
    Systemout.println("Flies backward ");
  }
}
public class FastFlying implements Flyable{
  public void fly(){
    Systemout.println("Flies 100 miles/sec");
  }
}

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


7

রচনাটি যেমন শোনা যায় ঠিক তেমন - আপনি অংশগুলি প্লাগ করে কোনও বস্তু তৈরি করেন।

এই উত্তরটির বাকী অংশটি সম্পাদনা করুন ভ্রান্তভাবে নিম্নলিখিত ভিত্তির উপর ভিত্তি করে।
এটি ইন্টারফেস দ্বারা সম্পন্ন হয়।
উদাহরণস্বরূপ, Carউপরের উদাহরণটি ব্যবহার করে ,

Car implements iDrivable, iUsesFuel, iProtectsOccupants
Motorbike implements iDrivable, iUsesFuel, iShortcutThroughTraffic
House implements iProtectsOccupants
Generator implements iUsesFuel

সুতরাং কয়েকটি মানক তাত্ত্বিক উপাদানগুলির সাহায্যে আপনি আপনার অবজেক্টটি তৈরি করতে পারেন। তারপরে কোনও কীভাবে Houseতার দখলদারদের সুরক্ষা দেয় এবং কীভাবে তার দখলকারীদের সুরক্ষা দেয় তা পূরণ করা আপনার কাজ Car

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

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

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

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

iFuelable Interface:
   void AddSomeFuel()
   void UseSomeFuel()
   int  percentageFull()

তাহলে আপনার অন্য কোথাও একটি পদ্ধতি থাকতে পারে

private void FillHerUp(iFuelable : objectToFill) {

   Do while (objectToFill.percentageFull() <= 100)  {

        objectToFill.AddSomeFuel();
   }

অদ্ভুত উদাহরণ, তবে এটি দেখায় যে এই পদ্ধতিটি কী পূরণ করছে তা বিবেচনা করে না, কারণ বস্তু প্রয়োগ করে iUsesFuel, এটি পূরণ করা যায়। গল্পের শেষে.

যদি আপনি পরিবর্তে উত্তরাধিকার ব্যবহার করেন তবে আপনার FillHerUpমোকাবেলার জন্য বিভিন্ন পদ্ধতির প্রয়োজন হবে MotorVehiclesএবং Barbecuesযদি না আপনি উত্তরাধিকার সূত্রে প্রাপ্ত কিছু অবাস্তব "অবজেক্টথ্যাটসেসফুয়েল" বেস অবজেক্ট না পান।


জাভা কনভেনশনগুলিতে বর্ণিত হয়েছে যে শ্রেণি এবং ইন্টারফেসের নামগুলি লিখিত আছে ThisCase, এতে নয় camelCase। সুতরাং আপনার ইন্টারফেসগুলির নামকরণ করা ভাল IDrivableetc. ইত্যাদি you আপনি যদি আপনার সমস্ত ইন্টারফেস সঠিকভাবে একটি প্যাকেজে পুনরায় গোষ্ঠীভুক্ত করেন তবে আপনার "আই" এর দরকার পড়তে পারে না।
ThePyroEagle

6

রচনা এবং উত্তরাধিকার কি এক?

তারা এক নয়।

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

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

আমি যদি কম্পোজিশনের প্যাটার্নটি বাস্তবায়ন করতে চাই তবে জাভাতে আমি কীভাবে এটি করতে পারি?

জাভাতে সম্মিলিত প্যাটার্ন প্রয়োগ করতে উইকিপিডিয়া নিবন্ধটি যথেষ্ট ভাল।

এখানে চিত্র বর্ণনা লিখুন

মূল অংশগ্রহণকারীরা:

উপাদান :

  1. সংশ্লেষগুলি সহ সমস্ত উপাদানগুলির জন্য বিমূর্ততা
  2. সংমিশ্রণে বস্তুর জন্য ইন্টারফেসটি ঘোষণা করে

পাতা :

  1. সংমিশ্রণে পাতার বিষয়বস্তু প্রতিনিধিত্ব করে
  2. সমস্ত উপাদান উপাদান কার্যকর করে

সংমিশ্রণ :

  1. একটি সংমিশ্রিত উপাদান প্রতিনিধিত্ব করে (উপাদানযুক্ত শিশু রয়েছে)
  2. বাচ্চাদের হেরফের করার পদ্ধতিগুলি কার্যকর করে
  3. সমস্ত কম্পোনেন্টের পদ্ধতিগুলি সাধারণত তাদের শিশুদেরকে অর্পণ করে কার্যকর করে

যৌগিক প্যাটার্ন বোঝার জন্য কোড উদাহরণ :

import java.util.List;
import java.util.ArrayList;

interface Part{
    public double getPrice();
    public String getName();
}
class Engine implements Part{
    String name;
    double price;
    public Engine(String name,double price){
        this.name = name;
        this.price = price;
    }
    public double getPrice(){
        return price;
    }
    public String getName(){
        return name;
    }
}
class Trunk implements Part{
    String name;
    double price;
    public Trunk(String name,double price){
        this.name = name;
        this.price = price;
    }
    public double getPrice(){
        return price;
    }
    public String getName(){
        return name;
    }
}
class Body implements Part{
    String name;
    double price;
    public Body(String name,double price){
        this.name = name;
        this.price = price;
    }
    public double getPrice(){
        return price;
    }
    public String getName(){
        return name;
    }
}
class Car implements Part{
    List<Part> parts;
    String name;

    public Car(String name){
        this.name = name;
        parts = new ArrayList<Part>();
    }
    public void addPart(Part part){
        parts.add(part);
    }
    public String getName(){
        return name;
    }
    public String getPartNames(){
        StringBuilder sb = new StringBuilder();
        for ( Part part: parts){
            sb.append(part.getName()).append(" ");
        }
        return sb.toString();
    }
    public double getPrice(){
        double price = 0;
        for ( Part part: parts){
            price += part.getPrice();
        }
        return price;
    }   
}

public class CompositeDemo{
    public static void main(String args[]){
        Part engine = new Engine("DiselEngine",15000);
        Part trunk = new Trunk("Trunk",10000);
        Part body = new Body("Body",12000);

        Car car = new Car("Innova");
        car.addPart(engine);
        car.addPart(trunk);
        car.addPart(body);

        double price = car.getPrice();

        System.out.println("Car name:"+car.getName());
        System.out.println("Car parts:"+car.getPartNames());
        System.out.println("Car price:"+car.getPrice());
    }

}

আউটপুট:

Car name:Innova
Car parts:DiselEngine Trunk Body
Car price:37000.0

ব্যাখ্যা:

  1. অংশ একটি পাতা
  2. গাড়ী অনেক অঞ্চলে রয়েছে
  3. বিভিন্ন অংশগাড়ীর যুক্ত করা হয়েছে
  4. গাড়ির দাম = সমষ্টি (প্রতিটি অংশের দাম )

রচনা এবং উত্তরাধিকার সম্পর্কে পেশাদারদের পক্ষে এবং নীচের প্রশ্নের জন্য দেখুন।

উত্তরাধিকারের চেয়ে রচনা পছন্দ?


গাড়ি বর্গের পাশাপাশি অংশগুলি বাস্তবায়নেরও কি তা বোঝা যায়? আপনি যদি এটি রচনা হিসাবে ব্যবহার করেন তবে ভাল হবে না
bhakian

4

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


4

সংমিশ্রণটি যেখানে কিছু পৃথক অংশ নিয়ে তৈরি হয় এবং those অংশগুলির সাথে এর দৃ relationship় সম্পর্ক রয়েছে। মূল অংশটি যদি অন্যরাও মারা যায় তবে তাদের নিজস্ব জীবন থাকতে পারে না। একটি মোটামুটি উদাহরণ হ'ল মানব দেহ। হৃদয় বের করুন এবং অন্যান্য সমস্ত অংশ মারা যায়।

উত্তরাধিকার হ'ল আপনি ইতিমধ্যে বিদ্যমান এমন কিছু নিয়ে যান এবং এটি ব্যবহার করেন। দৃ strong় সম্পর্ক নেই। কোনও ব্যক্তি তার পিতৃসম্পত্তির সম্পত্তির উত্তরাধিকারী হতে পারে তবে তিনি তা ছাড়া তা করতে পারেন।

আমি জাভা জানি না তাই আমি উদাহরণ সরবরাহ করতে পারি না তবে ধারণাগুলির ব্যাখ্যা দিতে পারি।


3

দুটি শ্রেণীর মধ্যে উত্তরাধিকার , যেখানে একটি শ্রেণি অন্য শ্রেণি প্রসারিত করে " আইএস এ " সম্পর্ক স্থাপন করে।

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


3

সিম্পল ওয়ার্ডে একত্রিত হওয়ার অর্থ একটি সম্পর্ক আছে ..

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

সমষ্টি কেন ব্যবহার করুন

কোড পুনরায় ব্যবহারযোগ্যতা

যখন সমষ্টিটি ব্যবহার করুন

কোনও রিলেশন শিপ না থাকাকালীন কোড পুনঃব্যবহারও একীকরণের মাধ্যমে সর্বোত্তমভাবে অর্জন করা হয়

উত্তরাধিকার

উত্তরাধিকার হ'ল একটি পিতা-মাতার সন্তান সম্পর্কের উত্তরাধিকার মানে একটি সম্পর্ক hip

জাভাতে উত্তরাধিকার হ'ল এমন একটি প্রক্রিয়া যার মধ্যে একটি বস্তু পিতামাত্ত বস্তুর সমস্ত বৈশিষ্ট্য এবং আচরণ অর্জন করে।

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


1

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


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

1

আমি মনে করি এই উদাহরণটি উত্তরাধিকার এবং রচনার মধ্যে পার্থক্য পরিষ্কারভাবে ব্যাখ্যা করেছে ।

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

যখন আপনি উত্তরাধিকার বা রচনার জন্য কোনও ইউএমএল ব্যবহার করেন তখন সেখানে উপস্থাপনার পার্থক্যটিও দেখতে পাবেন।

http://www.javaworld.com/article/2076814/core-java/inheritance-versus-composition--which-one-should-you-choose-.html


1
কেবল লিঙ্কের উত্তর নিরুত্সাহিত করা হয়েছে কারণ তারা বাসি হয়ে যায়। আপনার উত্তরটিতে লিঙ্ক থেকে কমপক্ষে সবচেয়ে গুরুত্বপূর্ণ প্রাসঙ্গিক তথ্য অন্তর্ভুক্ত করুন।
স্কট সোলমার 12 '17

1

উত্তরাধিকার বনাম রচনা।

উত্তরাধিকার এবং রচনা উভয়ই পুনরায় ব্যবহারযোগ্যতা এবং শ্রেণীর আচরণের বর্ধনের জন্য ব্যবহৃত হয়।

উত্তরাধিকার প্রধানত একটি পারিবারিক অ্যালগরিদম প্রোগ্রামিং মডেল যেমন IS-A সম্পর্ক টাইপ হিসাবে ব্যবহার করে একই ধরণের অবজেক্টের অর্থ। উদাহরণ।

  1. ডাস্টার একটি গাড়ি
  2. সাফারি একটি গাড়ি

এগুলি কার পরিবারের অন্তর্ভুক্ত।

রচনাটি HAS-A সম্পর্কের প্রকারের প্রতিনিধিত্ব করে t এটি কোনও বস্তুর সক্ষমতা দেখায় যেমন ডাস্টারের পাঁচটি গিয়ার রয়েছে, সাফারিতে চারটি গিয়ার রয়েছে Whenever উদাহরণস্বরূপ আমাদের ডাস্টার অবজেক্টে আরও একটি গিয়ার যুক্ত করতে হবে তারপরে আমাদের আরও একটি গিয়ার অবজেক্ট তৈরি করতে হবে এবং এটি ডাস্টার অবজেক্টে রচনা করতে হবে।

যতক্ষণ না সমস্ত উত্পন্ন শ্রেণীর জন্য তাদের কার্যকারিতা প্রয়োজন হয় ততক্ষণ পর্যন্ত আমাদের বেস শ্রেণিতে পরিবর্তন করা উচিত নয় this এই দৃশ্যের জন্য আমাদের রচনাটি ব্যবহার করা উচিত uch

ক্লাস এ ক্লাস বি দ্বারা প্রাপ্ত

ক্লাস এ ক্লাস সি দ্বারা প্রাপ্ত

ক্লাস ডি ক্লাস ডি দ্বারা প্রাপ্ত

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

নীচে উদাহরণ দেওয়া হল:

          // This is a base class
                 public abstract class Car
                    {
                       //Define prototype
                       public abstract void color();
                       public void Gear() {
                           Console.WriteLine("Car has a four Gear");
                       }
                    }


           // Here is the use of inheritence
           // This Desire class have four gears.
          //  But we need to add one more gear that is Neutral gear.

          public class Desire : Car
                   {
                       Neutral obj = null;
                       public Desire()
                       {
     // Here we are incorporating neutral gear(It is the use of composition). 
     // Now this class would have five gear. 

                           obj = new Neutral();
                           obj.NeutralGear();
                       }

                       public override void color()
                       {
                           Console.WriteLine("This is a white color car");
                       }

                   }


             // This Safari class have four gears and it is not required the neutral
             //  gear and hence we don't need to compose here.

                   public class Safari :Car{
                       public Safari()
                       { }

                       public override void color()
                       {
                           Console.WriteLine("This is a red color car");
                       }


                   }

   // This class represents the neutral gear and it would be used as a composition.

   public class Neutral {
                      public void NeutralGear() {
                           Console.WriteLine("This is a Neutral Gear");
                       }
                   }

0

কম্পোজিশন বলতে কোনও শ্রেণীর সাথে একটি বস্তু তৈরি করা হয় যার নির্দিষ্ট শ্রেণীর সাথে সম্পর্ক রয়েছে। ধরুন, অ্যাকাউন্টের সাথে শিক্ষার্থীর সম্পর্ক রয়েছে;

একটি উত্তরাধিকার হ'ল, এটি বর্ধিত বৈশিষ্ট্য সহ পূর্ববর্তী শ্রেণি। তার মানে এই নতুন ক্লাসটি কিছু বর্ধিত বৈশিষ্ট্য সহ ওল্ড শ্রেণি। ধরুন স্টুডেন্ট স্টুডেন্ট তবে সব স্টুডেন্ট হিউম্যান। সুতরাং ছাত্র এবং মানুষের সাথে একটি সম্পর্ক রয়েছে। এটি উত্তরাধিকার।


0

না, দুটোই আলাদা। রচনা "HAS-A" সম্পর্ক অনুসরণ করে এবং উত্তরাধিকার "IS-A" সম্পর্ককে অনুসরণ করে। রচনাটির সেরা উদাহরণ ছিল কৌশলগত প্যাটার্ন।


2
এর একমাত্র মন্তব্যের গুণমান
ম্যাথিউস সানি

আপনি কি ঠিক 7 বছর আগে গ্রহণযোগ্য উত্তর বলে একই মন্তব্য করেছিলেন?
অঞ্জিল ধামালা

0

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

যখন আমরা অন্য শ্রেণীর সাথে কথা বলার জন্য রচনাটি ব্যবহার করি তখন আমরা এই সমস্ত সমস্যা থেকে উত্তরণ করতে পারি। রচনাটি আমার ক্লাসে অন্য শ্রেণীর একটি বৈশিষ্ট্য ঘোষনা করছে যার সাথে আমরা কথা বলতে চাই। এবং সেই শ্রেণীর থেকে আমরা কী কার্যকারিতা চাই সেই বৈশিষ্ট্যটি ব্যবহার করে আমরা পেতে পারি।

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