জাভাতে সমষ্টি এবং রচনার মধ্যে প্রয়োগের পার্থক্য


102

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


3
এই লিঙ্কে আপনি আপনার পোস্টগুলি উত্তর পেতে পারেন অনুসরণ করুন [সমষ্টি এবং কমপোজিশন মধ্যে পার্থক্য] [1] [1]: stackoverflow.com/a/1468285/1353243
gks



যখন বস্তুর মধ্যে আমাদের কোনও সম্পর্ক থাকে, তাকে অ্যাসোসিয়েশন বলে। সমষ্টি এবং সংমিশ্রণ উভয়ই সংঘের বিশেষায়িত রূপ। সংমিশ্রণ আবার একত্রিতকরণের বিশেষত্ব রূপ। javabench.in/2011/08/differences-between-association.html
রাউল

উত্তর:


222

গঠন

final class Car {

  private final Engine engine;

  Car(EngineSpecs specs) {
    engine = new Engine(specs);
  }

  void move() {
    engine.work();
  }
}

মোট পরিমাণ

final class Car {

  private Engine engine;

  void setEngine(Engine engine) {
    this.engine = engine;
  }

  void move() {
    if (engine != null)
      engine.work();
  }
}

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


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

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

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

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

@ মাইকিমুন দুর্দান্ত ক্যাচ আপনি আমাদের আরও ভাল উদাহরণে নির্দেশ করতে পারেন?
গায়ান ওয়েরাকুট্টি

19

আমি একটি দুর্দান্ত ইউএমএল উদাহরণ ব্যবহার করব।

এমন একটি বিশ্ববিদ্যালয় নিন যেখানে 1 থেকে 20 টি বিভিন্ন বিভাগ রয়েছে এবং প্রতিটি বিভাগে 1 থেকে 5 জন অধ্যাপক রয়েছে। একটি বিশ্ববিদ্যালয় এবং এর বিভাগগুলির মধ্যে একটি রচনা লিঙ্ক রয়েছে। একটি বিভাগ এবং এটির 'অধ্যাপকদের মধ্যে একটি সংযোগ লিঙ্ক রয়েছে।

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

জাভাতে:

public class University {

     private List<Department> departments;

     public void destroy(){
         //it's composition, when I destroy a university I also destroy the departments. they cant live outside my university instance
         if(departments!=null)
             for(Department d : departments) d.destroy();
         departments.clean();
         departments = null;
     }
}

public class Department {

     private List<Professor> professors;
     private University university;

     Department(University univ){
         this.university = univ;
         //check here univ not null throw whatever depending on your needs
     }

     public void destroy(){
         //It's aggregation here, we just tell the professor they are fired but they can still keep living
         for(Professor p:professors)
             p.fire(this);
         professors.clean();
         professors = null;
     }
}

public class Professor {

     private String name;
     private List<Department> attachedDepartments;

     public void destroy(){

     }

     public void fire(Department d){
         attachedDepartments.remove(d);
     }
}

এর আশেপাশে কিছু।


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

ধন্যবাদ! আপনার উদাহরণ পুরোপুরি পরিষ্কার। তবে আমি আপনার কোডের উদাহরণটি বুঝতে পারি না। আপনি কি আমাকে দুজনের মধ্যে প্রাথমিক বাস্তবায়ন পার্থক্য বলতে পারেন ? যদি আমাকে সমষ্টি বা রচনা প্রয়োগ করতে হয় তবে জাভাতে আমার কোন ধারণাগুলি ব্যবহার করা উচিত?
রজথ

এটি ঠিক একই বাস্তবায়ন যদি আপনি ক্লাস BUT রচনা সম্পর্কে কথা বলেন তবে আপনি আমার সম্পাদনার মতো দৃষ্টান্তগুলি পরিচালনা করার মাধ্যমে প্রতিফলিত হওয়া উচিত
TecHunter

4

নীচে প্রদত্ত ইউআরএলটিতে একটি দুর্দান্ত ব্যাখ্যা রয়েছে।

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

http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit

দয়া করে চেক করুন !!!


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

3

পার্থক্যটি হ'ল যে কোনও রচনা একত্রিকরণ এবং তদ্বিপরীত নয়।

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

ইউএমএল স্ট্যান্ডার্ড থেকে আরও:

সংমিশ্রণ - ইঙ্গিত দেয় যে সম্পত্তিটি সুসংগতভাবে সংযুক্ত, অর্থাত, সংমিশ্রিত বস্তুর রচিত বস্তুর অস্তিত্ব এবং সংরক্ষণের জন্য দায়বদ্ধতা রয়েছে (অংশ)।

সুতরাং, ইউনিভার্সিটি টু ক্যাথেড্রস অ্যাসোসিয়েশন একটি সংমিশ্রণ, কারণ বিশ্ববিদ্যালয় থেকে বাইরে ক্যাথেড্রার অস্তিত্ব নেই (আইএমএইচও)

ভাগ করা সমষ্টিগুলির যথার্থ শব্দার্থবিজ্ঞান অ্যাপ্লিকেশন অঞ্চল এবং মডেলারের দ্বারা পরিবর্তিত হয়।

অর্থাত্, যদি আপনি কেবল আপনার বা অন্য কারও কোনও নীতি অনুসরণ করে থাকেন তবে অন্যান্য সমস্ত সমিতিগুলি ভাগ করা সমষ্টি হিসাবে আঁকতে পারে। এছাড়াও এখানে দেখুন ।


3

সহজ অর্থে :

রচনা এবং সমষ্টি উভয়ই সমিতি Assoc সংমিশ্রণ -> শক্তিশালী-সম্পর্কিত সম্পর্ক সমষ্টি -> দুর্বলতার সাথে সম্পর্ক রয়েছে।


2

একটি সাধারণ রচনা প্রোগ্রাম

public class Person {
    private double salary;
    private String name;
    private Birthday bday;

    public Person(int y,int m,int d,String name){
        bday=new Birthday(y, m, d);
        this.name=name;
    }


    public double getSalary() {
        return salary;
    }

    public String getName() {
        return name;
    }

    public Birthday getBday() {
        return bday;
    }

    ///////////////////////////////inner class///////////////////////
    private class Birthday{
        int year,month,day;

        public Birthday(int y,int m,int d){
            year=y;
            month=m;
            day=d;
        }

        public String toString(){
           return String.format("%s-%s-%s", year,month,day);

        }
    }

    //////////////////////////////////////////////////////////////////

}
public class CompositionTst {

    public static void main(String[] args) {
        // TODO code application logic here
        Person person=new Person(2001, 11, 29, "Thilina");
        System.out.println("Name : "+person.getName());
        System.out.println("Birthday : "+person.getBday());

        //The below object cannot be created. A bithday cannot exixts without a Person 
        //Birthday bday=new Birthday(1988,11,10);

    }
}

2

প্রথমে আমাদের একই পৃষ্ঠায় আসলে কী পার্থক্য রয়েছে Aggregationএবং Compositionতা নিয়ে কথা বলতে হবে ।

সমষ্টিটি এমন একটি সমিতি যা সম্পর্কিত সংস্থা সত্তা থেকে অস্তিত্ব থাকতে পারে। উদাহরণস্বরূপ, কোনও ব্যক্তি কোনও সংস্থার সাথে সম্পর্কিত হতে পারে তবে সিস্টেমে তার স্বাধীন অস্তিত্ব থাকতে পারে।

যেহেতু

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

এখন, নীচে যেমন একটি সত্তার সম্পত্তি রেখে অন্যের একত্রিত করা সহজভাবে অর্জন করা যেতে পারে:

class Person {
    Organisation worksFor;
}

class Organisation {
    String name;
}

class Main {
    public static void main(String args[]) {

        //Create Person object independently
        Person p = new Person();

        //Create the Organisation independently
        Organisation o = new Organisation();
        o.name = "XYZ Corporation";

        /*
          At this point both person and organisation 
          exist without any association  
        */
        p.worksFor = o;

    }
}

রচনাটির জন্য এটি প্রয়োজনীয় যে নির্ভরশীল অবজেক্টটি সর্বদা এর সম্পর্কিত অবজেক্টের পরিচয় দিয়ে তৈরি করা উচিত is আপনি একই জন্য একটি অভ্যন্তর শ্রেণি ব্যবহার করতে পারেন।

class Car {
    class Wheel {
        Car associatedWith;
    }
}

class Main {
    public static void main() {
        //Create Car object independently
        Car car = new Car();

        //Cannot create Wheel instance independently
        //need a reference of a Car for the same.
        Car.Wheel wheel = car.new Wheel();
    }
}

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


1

সমষ্টি বনাম রচনা

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

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

সমষ্টিগত সম্পর্ক হ'ল-এ-এ এবং রচনাটি "অংশের" সম্পর্ক।

সংমিশ্রণ একটি শক্তিশালী সংস্থা যেখানে সমষ্টিটি একটি দুর্বল সমিতি।


0

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

ব্যবহারিক উদাহরণ হিসাবে, অনুরূপ সত্তার সাথে দুটি ভিন্ন ধরণের সিস্টেমের তুলনা করুন:

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

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

আপনি আপনার ভাষায় এটি কীভাবে প্রয়োগ করেন তা সামান্য উদ্বেগের কারণ যে স্তরটিতে পাঠযোগ্যতার মতো বিষয়গুলি অনেক বেশি গুরুত্বপূর্ণ।

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