সমিতি, সংহতকরণ এবং রচনার মধ্যে পার্থক্য কী?


389

সমিতি, সংহতকরণ এবং রচনার মধ্যে পার্থক্য কী? প্রয়োগের ক্ষেত্রে দয়া করে ব্যাখ্যা করুন।


2
এটি কোনও শিক্ষানবিশদের জন্য অবিস্মরণীয় হতে পারে তবে ইউএমএল 2 সুপারসার্ট্রাকশন স্পেসের মাধ্যমে একটি দেরীতে ঘুরুন : omg.org/docs/formal/09-02-02.pdf অ্যাসোসিয়েশন বিভাগের 7.3.3
চিকেনিনাবিস্কুট

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

: তাই ইতিমধ্যে উত্তর প্রচুর stackoverflow.com/search?q=aggregation+and+composition
লোথার

2
এখানে দরকারী নিবন্ধ কোডেপ্রজেক্ট
গিব্বোক

6
আমি জানি এটি ইতিমধ্যে অনেকবার উত্তর দেওয়া হয়েছে, তবে আমি এই বিষয়ে যেটি পড়েছি তার মধ্যে সবচেয়ে ভাল ব্যাখ্যাটি আমি অনুভব করি: হোলব.com
goodies

উত্তর:


384

দুটি বস্তুর জন্য, Fooএবং Barসম্পর্কগুলি সংজ্ঞায়িত করা যায়

সমিতি - একটি জিনিসের সাথে আমার সম্পর্ক রয়েছে। Fooব্যবহারসমূহBar

public class Foo { 
    void Baz(Bar bar) {
    } 
};

রচনা - আমার একটি সামগ্রীর মালিক এবং এর আজীবন জন্য আমি দায়বদ্ধ। যখন Fooমারা যায়, তাই হয়Bar

public class Foo {
    private Bar bar = new Bar(); 
}

সমষ্টি - আমার একটি অবজেক্ট রয়েছে যা আমি অন্য কারও কাছ থেকে ধার নিয়েছি। যখন Fooমারা যায় Barবাস করতে পারে।

public class Foo { 
    private Bar bar; 
    Foo(Bar bar) { 
       this.bar = bar; 
    }
}

3
সি # / জাভা কোড মনে হচ্ছে। যদি এটি হয় তবে অ্যাসোসিয়েশন এবং সমষ্টি কোড উভয়ই একই। উভয় ক্ষেত্রে, 'বার' কেবলমাত্র রেফারেন্স করা হয় এবং Barঅবজেক্ট লাইভ থাকতে পারে।
অজয়

@ জেফ ফস্টার: আমার কিছু সন্দেহ আছে। যদি আমি বাজে বার বার অবজেক্ট ইনস্টল করি (বার বার) bar বার = নতুন বার (); first প্রথম ক্ষেত্রে। এটি এখনও সংযুক্তি হবে বা এটি এখন রচনা হয়ে যাবে?
সায়েত

21
@ অজয়: একত্রিতকরণ বস্তুর রেফারেন্স রাখে যা সমিতির ক্ষেত্রে নয়। সুতরাং বাস্তবায়নের পার্থক্য।
এবিসিডি

17
অ্যাসোসিয়েশন একটি পদ্ধতি প্যারামিটার হিসাবে কেবল ব্যবহারের চেয়ে কিছুটা শক্তিশালী। আমি বিশ্বাস করি আপনার অ্যাসোসিয়েশন কোড স্নিপেট একটি নির্ভরতা সম্পর্কের সাথে আরও সাদৃশ্যপূর্ণ । আপনি মার্টিন ফোলার সম্পর্কিত নিবন্ধটি
আহমদ আবদেলঘানি

5
@ আহমাদআবদেলঘানি সঠিক। প্রথম উদাহরণ একটি নির্ভরতা সম্পর্ক। তৃতীয়টি সমিতি এবং সংহতকরণের জন্য কাজ করে।
আন্দ্রে ভ্যালেন্টি

122

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

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

সংহতকরণ এবং সংমিশ্রণ হ'ল সংঘের সাবটেক্ট অর্থ তারা সঙ্ঘের নির্দিষ্ট ক্ষেত্রে।

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

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

বিভ্রান্ত?

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

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

এটি সংক্ষেপে -

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

আরও বিশদ এখানে। আমি http://opensourceforgeeks.blogspot.in এর লেখক এবং আরও প্রসঙ্গে প্রাসঙ্গিক পোস্টে উপরের একটি লিঙ্ক যুক্ত করেছি।


8
আমি জিজ্ঞাসা করতে যাচ্ছিলাম আপনি কেন 5 বছরেরও বেশি আগে জিজ্ঞাসিত একটি ইতিমধ্যে উত্তর দেওয়া প্রশ্নের উত্তর কেন যত্নবান করেছিলেন তবে তারপরে আমি আপনার ব্লগ এন্ট্রি পড়েছিলাম এবং এটি এখানে উত্তরগুলির চেয়ে কিছুটা তথ্যপূর্ণ ছিল। সম্মত!
দানভুপি

2
আমি @ দনভুপি এর সাথে একমত আছি আপনার উত্তরটি অন্য অনেকের চেয়ে অনেক তথ্যপূর্ণ এবং সঠিক
জিশ

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

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

পরিচালিত মেমরিটি ব্যবহার করে আমরা এসি # কোডের মধ্যে কী কম্পোজিশন রাখতে পারি?
পাওলো আন্দ্রে হ্যাককে

85

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

রচনা ( মিশ্রণ ) হ'ল একক ইউনিটে সরল অবজেক্টস বা ডেটা ধরণের মোড়কের উপায় । রচনাগুলি অনেকগুলি বুনিয়াদি ডেটা স্ট্রাকচারের সমালোচনাপূর্ণ বিল্ডিং ব্লক

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

উভয়ই বস্তুর মধ্যে সম্পর্ককে বোঝায় এবং কেবল তাদের শক্তিতে পৃথক।

পার্থক্যটি মনে রাখার কৌশল: - একটি গ্রেগেশন এবং ডব্লিউএন - সি এমপোসিটোইন রয়েছে

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

এখন নিম্নলিখিত চিত্র পর্যবেক্ষণ করা যাক

সম্পর্ক

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

সাদৃশ্য:

রচনা : নিম্নলিখিত চিত্রটি চিত্রের সংমিশ্রণ অর্থাৎ পৃথক চিত্র ব্যবহার করে একটি চিত্র তৈরি করে।
এখানে চিত্র বর্ণনা লিখুন

সমষ্টি : একক স্থানে চিত্রের সংগ্রহ

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

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


14
এই বিষয়ে এত কিছু পড়ার পরে, এই উত্তরটি সবচেয়ে স্বজ্ঞাত বোধগম্য। উইকিপিডিয়া লাগানো উচিত।
জাঙ্কাপঙ্ক্ট

1
সুন্দরভাবে বর্ণিত।
সিড

সমষ্টি সম্পর্কিত, আপনি বলছেন "শিশু অবজেক্টগুলি একক পিতা-মাতার অন্তর্গত"। এটি সঠিক নয়। অংশীদারিত্বের একত্রিত হওয়া বৈধ ইউএমএল, যেমন একটি শিশু একাধিক পিতা-মাতার অন্তর্ভুক্ত। অধ্যাপকগণের সমষ্টি হিসাবে বিভাগ সম্পর্কে আপনার উদাহরণে আপনি এটি স্বীকার করেছেন, কারণ আপনি বলেছিলেন যে একজন অধ্যাপক একাধিক বিভাগের জন্য কাজ করতে পারেন।
www.admiraalit.nl

@ www.admiraalit.nl এএফআইএকি ভাগ করে নেওয়া একত্রিত হওয়ার অর্থ এই নয় যে "শিশু একাধিক পিতা-মাতার অন্তর্ভুক্ত", এটি ঠিক অন্যভাবে, একাধিক শিশু একই পিতামাতার অন্তর্ভুক্ত। এটি একটি অ-যৌগিক সমষ্টি কারণ পিতা-মাতার মৃত্যুর পরেও বাচ্চারা বেশি দিন বেঁচে থাকতে পারে।
অ্যাডারচক্স

65

নির্ভরতা (তথ্যসূত্র) এর
অর্থ দুটি বস্তুর মধ্যে ধারণাগত লিঙ্ক নেই is উদাহরণস্বরূপ এনরোলমেন্ট সার্ভিস অবজেক্ট শিক্ষার্থী ও কোর্স অবজেক্টের (পদ্ধতির পরামিতি বা রিটার্নের ধরণ হিসাবে) উল্লেখ করে

public class EnrollmentService {
    public void enroll(Student s, Course c){}
}

অ্যাসোসিয়েশন (হ্যাঁ-এ) এর
অর্থ প্রায়শই সবসময় বস্তুর মধ্যে লিঙ্ক থাকে (তারা জড়িত)। অর্ডার বস্তুর টি কাস্টমার বস্তুর

public class Order {
    private Customer customer
}

সমষ্টি (has-a + সম্পূর্ণ অংশ)
বিশেষ ধরনের সংযোগ যেখানে দুটি বস্তুর মধ্যে পুরো অংশের সম্পর্ক রয়েছে। তারা যদিও একে অপরকে ছাড়া বাঁচতে পারে।

public class PlayList{
    private List<Song> songs;
}

দ্রষ্টব্য: কৌশলগত অংশটি হ'ল সাধারণ সমিতি থেকে সমষ্টিকে আলাদা করা। সত্য, আমি মনে করি এটি বিভিন্ন ব্যাখ্যার জন্য উন্মুক্ত।

রচনা (একটি-সম্পূর্ণ + অংশ + মালিকানা রয়েছে)
বিশেষ ধরণের সমষ্টি। একটি Apartmentকিছু Roomএস এর সমন্বয়ে গঠিত । একটি Roomছাড়া একটি বিদ্যমান থাকতে পারে না Apartment। যখন কোনও অ্যাপার্টমেন্ট মোছা হয়, সমস্ত সম্পর্কিত কক্ষগুলিও মুছে ফেলা হয়।

public class Apartment{
    private Room bedroom;
    public Apartment() {
       bedroom = new Room();
    }
}

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

28

কম্বোবজেক্টে রবার্ট মার্টিনের একটি পোস্ট থেকে :

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

//[Example:]

//|A|----------->|B|

class A
{
  private:
    B* itsB;
};

সমষ্টি [...] সাধারণত সম্পূর্ণ / অংশের সম্পর্ক। এটি হ'ল ব্যতিক্রমের সাথে সংযুক্তির মতো যা উদাহরণগুলির মধ্যে চক্রীয় একীকরণের সম্পর্ক থাকতে পারে না (অর্থাত কোনও অংশে এর সম্পূর্ণটি থাকতে পারে না)।

//[Example:]

//|Node|<>-------->|Node|

class Node
{
  private:
    vector<Node*> itsNodes;
};

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

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

//[Example:]

//|Car|<#>-------->|Carburetor|

class Car
{
  public:
    virtual ~Car() {delete itsCarb;}
  private:
    Carburetor* itsCarb
};

1
এই সংজ্ঞা কতটা কর্তৃত্ব আছে? এটি কি ইউএমএল স্ট্যান্ডার্ড লেখক দ্বারা সমর্থিত? আমি কি এটি সরঞ্জাম দ্বারা সমর্থিত?
পুনরায় পোস্টার

1
এটা রবার্ট সি মার্টিন। এটি আমার পক্ষে যথেষ্ট কর্তৃত্ব :-)
হেলিয়াক

21

যেমনটি অন্যরা বলেছেন, একটি সংস্থা হ'ল বস্তুর মধ্যে একটি সম্পর্ক, একত্রিকরণ এবং রচনাটি হ'ল সংযুক্তির ধরণ।

বাস্তবায়নের দৃষ্টিকোণ থেকে, রেফারেন্সের দ্বারা শ্রেণি সদস্য থাকার দ্বারা একটি সমষ্টি প্রাপ্ত হয় । উদাহরণস্বরূপ, ক্লাস এ যদি শ্রেণি বি এর একটি বস্তুকে একত্রিত করে, আপনি এর মতো কিছু পাবেন (সি ++ এ):

class A {
    B & element;
  // or B * element;
};

সমষ্টিটির শব্দার্থক শব্দটি হ'ল যখন কোনও বস্তু A বিনষ্ট হয়, তখন যে বি বস্তুটি এটি সংরক্ষণ করে তা এখনও বিদ্যমান থাকবে। রচনাটি ব্যবহার করার সময়, আপনার আরও দৃ relationship় সম্পর্ক হয়, সাধারণত সদস্যকে মূল্য দ্বারা সঞ্চয় করে :

class A {
    B element;
};

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

class A {
    std::auto_ptr<B> element;
};

class A {
    B * element;

    ~A() {
        delete B;
    }
};

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


8
এটি একমাত্র গৃহীত উত্তর হওয়া উচিত। সি # এবং জাভাতে আদিম ধরণের ব্যতীত রচনাটির অস্তিত্ব নেই ... তবুও আপনি সেই ভাষার বিকাশকারীদের রচনাটি "ব্যাখ্যা" দেখছেন। সংমিশ্রণ মানে একটি বস্তু অন্যের ভিতরে বিদ্যমান। জাভা এবং সি # তে আপনি এমনকি এটিও করতে পারবেন না, সবকিছুই গাদা হয়ে আছে এবং আপনি কেবল এটির জন্য পয়েন্টার ধরে রেখেছেন, এটি সত্যই সমষ্টিগতভাবে রচনা নয়। সি ++ রচনা সরবরাহ করে ..
প্রত্যেকে

14

তিনটি সম্পর্ক ধারণা সমিতি , সংহতকরণ এবং রচনাগুলির মধ্যে পার্থক্য সম্পর্কে কতটা বিভ্রান্তি রয়েছে তা অবাক করা ।

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

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

আমি যতদূর দেখতে পাচ্ছি, এই বিভ্রান্তির দুটি শিকড় রয়েছে:

  1. সি ++ মানুষদের সম্প্রদায়ের মধ্যে শব্দ "অ্যাগ্রিগেশন" একটি বর্গ অন্য স্বাধীন ক্লাসের বস্তু উল্লেখ জন্য একটি বৈশিষ্ট্য সংজ্ঞায়িত অর্থে ব্যবহৃত হয় (দেখুন, যেমন, [1]), যার মধ্যে জ্ঞান সমিতি ইউএমএল ক্লাস রেখাচিত্র হবে। "কম্পোজিশন" শব্দটি ক্লাসগুলির জন্য ব্যবহৃত হত যা তাদের বস্তুর জন্য উপাদানগুলির সংজ্ঞা দেয় যেমন যৌগিক বস্তুর ধ্বংসের পরে এই উপাদানগুলিও ধ্বংস হয়ে যাচ্ছে।

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

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

আরও দেখুন আমার বর্ধিত উত্তর এর এপ্রিল 2009 তাই প্রশ্ন নীচে তালিকাভুক্ত করা হয়।

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

উদাহরণস্বরূপ, "রচনা" এর জন্য নিম্নলিখিত কোড প্যাটার্নটি একটি এসও উত্তরে প্রস্তাবিত হয়েছিল :

final class Car {    
  private final Engine engine;

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

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

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

[1] http://www.learncpp.com/cpp-tutorial/103-aggregation/

পরিশিষ্ট - স্ট্যাকওভারফ্লোতে সমষ্টি বনাম রচনা সম্পর্কিত বারবার জিজ্ঞাসিত প্রশ্নের অসম্পূর্ণ তালিকা

[ এপ্রিল ২০০৯ ]
সমন্বয় বনাম রচনা [মূলত মতামত ভিত্তিক বন্ধ]
[ এপ্রিল ২০০৯ ]
রচনা এবং সমিতি সম্পর্কের মধ্যে পার্থক্য কী?
[ মে ২০০৯ ]
সমিতি, সংহতকরণ এবং রচনার মধ্যে পার্থক্য
[ মে ২০০৯ ]
রচনা এবং সমষ্টিগুলির মধ্যে পার্থক্য কী? [সদৃশ]
[ অক্টোবর ২০০৯ ]
সমষ্টি, রচনা এবং নির্ভরতার মধ্যে পার্থক্য কী? [সদৃশ হিসাবে চিহ্নিত]
[ নভেম্বর ২০১০ ]
সমিতি বনাম সমষ্টি [সদৃশ হিসাবে চিহ্নিত]
[আগস্ট ২০১২ ]
জাভাতে একত্রিতকরণ এবং রচনাগুলির মধ্যে বাস্তবায়নের পার্থক্য
[ ফেব্রুয়ারী 2015 ]
ইউএমএল - সমিতি বা সমষ্টি (সাধারণ কোড স্নিপেটস)


বারবার জিজ্ঞাসিত প্রশ্নগুলির অসম্পূর্ণ তালিকার জন্য উত্সাহ দিন।
জ্যাকো

13

সংঘ

অ্যাসোসিয়েশন দুটি শ্রেণীর মধ্যে সম্পর্কের প্রতিনিধিত্ব করে tএটি একমুখী (একমুখী) বা দ্বি দিকনির্দেশক (দ্বিপথ) হতে পারে

উদাহরণ স্বরূপ:

  1. একমুখী

গ্রাহক আদেশ দেয়

  1. দ্বিমুখী

এ বিয়ের সাথে বিবাহিত

এ-এর সাথে বি বিয়ে হয়েছে

মোট পরিমাণ

সমষ্টি এক প্রকারের সমিতি specific তবে নির্দিষ্ট বৈশিষ্ট্য সহ একত্রিতকরণ g এক বৃহত্তর "পুরো" শ্রেণীর মধ্যে সম্পর্ক হ'ল এক বা একাধিক ছোট "অংশ" শ্রেণি থাকে, বিপরীতভাবে, একটি ছোট "অংশ" শ্রেণি "সম্পূর্ণ" বৃহত্তর শ্রেণীর একটি অংশ ।

উদাহরণ স্বরূপ:

ক্লাবের সদস্য রয়েছে

একটি ক্লাব ("পুরো") বেশ কয়েকটি ক্লাব সদস্য ("অংশগুলি") নিয়ে গঠিত Member সদস্যের ক্লাবের বাইরের জীবন থাকে। যদি ক্লাবটি ("পুরো") মারা যায়, তবে সদস্যরা ("অংশগুলি") এটির সাথে মরে না। কারণ সদস্য একাধিক ক্লাবের ("পুরো") অন্তর্ভুক্ত থাকতে পারে।

গঠন

এটি একত্রিত করার একটি শক্তিশালী রূপ "" সম্পূর্ণ "এটির" অংশগুলি "তৈরি বা ধ্বংসের জন্য দায়বদ্ধ

উদাহরণ স্বরূপ:

একটি বিদ্যালয়ের বিভাগ রয়েছে

এক্ষেত্রে স্কুল ("পুরো") মারা যাচ্ছিল, বিভাগ ("অংশগুলি") এটির সাথে মারা হত। কারণ প্রতিটি অংশ কেবল একটি "সম্পূর্ণ" এর সাথে সম্পর্কিত হতে পারে।


একীকরণের ক্ষেত্রে। আমি কি এটি ব্যবহার class Club(){ _member = new Member } বা রেফারেন্স হিসাবে পাস করতে পারিclass Club(){ addMember(Member member) { this._member = member } }
রোল করুন

12

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

সংঘ

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

দুর্বল সমিতি

ক্লাসএ এর সাথে ক্লাসবি উদাহরণের প্যারামিটার অন্তর্ভুক্ত রয়েছে বা ক্লাসবি-র রিটার্নের উদাহরণ অন্তর্ভুক্ত রয়েছে তা দেখানোর জন্য ক্লাসএ ক্লাসবিতে লিঙ্কযুক্ত থাকতে পারে।

শক্তিশালী সমিতি

শ্রেণিবর্গ উদাহরণস্বরূপ একটি রেফারেন্স ধারণ করে তা দেখানোর জন্য ক্লাসএটিকে ক্লাসবিতেও যুক্ত করা যেতে পারে।

সমষ্টি (অংশীদারি সমিতি)

ক্লাসএ (পুরো) এবং ক্লাসবি (অংশ) এর মধ্যে অংশবিশেষের সম্পর্ক রয়েছে এমন ক্ষেত্রে, আমরা আরও নির্দিষ্ট হতে পারি এবং অ্যাসোসিয়েশন লিঙ্কের পরিবর্তে সংহত লিঙ্কটি ব্যবহার করতে পারি, হাইলাইট করে যে ক্লাসবি অ্যাপ্লিকেশনের অন্যান্য শ্রেণি দ্বারাও একত্রিত হতে পারে ( সুতরাং সমষ্টিটি শেয়ার্ড অ্যাসোসিয়েশন নামে পরিচিত)।

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

এটি লক্ষণীয় যে জোটটি লিঙ্কটি কোনওভাবে ক্লাসএর ক্লাসবি'র মালিকানাধীন নয় বা পিতামাতার-সন্তানের সম্পর্ক (যখন পিতামাতার মুছে ফেলা হচ্ছে তার সন্তানের সমস্ত ফলস্বরূপ মুছে ফেলা হচ্ছে) এই দুজনের মধ্যে নেই state আসলে, বেশ বিপরীত! সমষ্টি লিঙ্কটি সাধারণত এই বিষয়টিকে চাপ দেওয়ার জন্য ব্যবহৃত হত যে ক্লাসএ ক্লাসবি-এর একচেটিয়া ধারক নয়, যেমন বাস্তবে ক্লাসিবের আর একটি ধারক রয়েছে।

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

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

রচনা (অংশবিহীন সমিতি)

আমাদের আরও সুনির্দিষ্ট হওয়া উচিত এবং ক্লাসএ এবং ক্লাসবি-র মধ্যে পার্ট-পার্টিশন সম্পর্কের পাশাপাশি দু'জনের মধ্যে দৃ depend় জীবনচক্র নির্ভরতা থাকা উচিত, যার অর্থ যখন ক্লাসএ মোছা হয় তখন ক্লাসবিও ফলস্বরূপ মুছে ফেলা হয় in

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

সংমিশ্রণ লিঙ্কটি দেখায় যে কোনও শ্রেণীর (ধারক, পুরো) অন্যান্য শ্রেণি / অংশ (অংশ) এর উপর একচেটিয়া মালিকানা রয়েছে, যার অর্থ ধারক বস্তু এবং তার অংশগুলি পিতামাতার / সন্তানের সম্পর্ক গঠন করে।

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

সিস্টেম জটিলতা পরিমাপ

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

আপনি আমার ব্লগে আরও পড়তে পারেন: http://aviadezra.blogspot.com/2009/05/uml-association-aggregation-composition.html



ভাল উত্তর. 1) রচনা উদাহরণের জন্য প্রশ্ন: দৈর্ঘ্য এবং হাত (রচনা) ব্যক্তি। যদি আমি একটি শ্রেণি প্রাণী এবং ঘুম তৈরি করি তবে ঘুম (সমষ্টি) ব্যক্তি; ঘুম (সমষ্টি) প্রাণী। এটা কি ঠিক? 2)। হাতের রচনা ব্যক্তি: class Person() { private hand = new Hand }। স্লিপ অগ্রিগেশন ব্যক্তি class Person() { private sleep = new Sleep }ঘুমের মধ্যে "নতুন" কীটি কী বৈধ? বা একত্রিতকরণের কারণে আমি কি এটি রেফারেন্স হিসাবে পাস করব? class Person() { private Sleep _sleep; public addSleep(Sleep sleep) { this._sleep = sleep} }
রোল করুন

7

রচনা (যদি আপনি "সম্পূর্ণ", "অংশ" অপসারণ করেন তবে স্বয়ংক্রিয়ভাবে সরানো হয় - "মালিকানা")

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

  • সাধারণত সাধারণ সদস্য ভেরিয়েবল ব্যবহার করুন।

  • পয়েন্টার মানগুলি ব্যবহার করতে পারে যদি সংমিশ্রণ শ্রেণি স্বয়ংক্রিয়ভাবে বরাদ্দ / ডিফলোকেশন সাবক্লাসগুলির সৃষ্টি / ধ্বংসের জন্য দায়ী করে।

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

সি ++ তে রচনা

#include <iostream>
using namespace std;
/********************** Engine Class ******************/
class Engine
{
    int nEngineNumber;
    public:
    Engine(int nEngineNo);
    ~Engine(void);
};
Engine::Engine(int nEngineNo)
{
    cout<<" Engine :: Constructor " <<endl;
}
Engine::~Engine(void)
{
    cout<<" Engine :: Destructor " <<endl;
}
/********************** Car Class ******************/
class Car
{
    int nCarColorNumber;
    int nCarModelNumber;
    Engine objEngine;
    public:
    Car (int, int,int);
    ~Car(void);
};
Car::Car(int nModelNo,int nColorNo, int nEngineNo):
nCarModelNumber(nModelNo),nCarColorNumber(nColorNo),objEngine(nEngineNo)
{
    cout<<" Car :: Constructor " <<endl;
}
Car::~Car(void)
{
    cout<<" Car :: Destructor " <<endl;
    Car
    Engine
    Figure 1 : Composition
}
/********************** Bus Class ******************/
class Bus
{
    int nBusColorNumber;
    int nBusModelNumber;
    Engine* ptrEngine;
    public:
    Bus(int,int,int);
    ~Bus(void);
};
Bus::Bus(int nModelNo,int nColorNo, int nEngineNo):
nBusModelNumber(nModelNo),nBusColorNumber(nColorNo)
{
    ptrEngine = new Engine(nEngineNo);
    cout<<" Bus :: Constructor " <<endl;
}
Bus::~Bus(void)
{
    cout<<" Bus :: Destructor " <<endl;
    delete ptrEngine;
}
/********************** Main Function ******************/
int main()
{
    freopen ("InstallationDump.Log", "w", stdout);
    cout<<"--------------- Start Of Program --------------------"<<endl;
    // Composition using simple Engine in a car object
    {
        cout<<"------------- Inside Car Block ------------------"<<endl;
        Car objCar (1, 2,3);
    }
    cout<<"------------- Out of Car Block ------------------"<<endl;
    // Composition using pointer of Engine in a Bus object
    {
        cout<<"------------- Inside Bus Block ------------------"<<endl;
        Bus objBus(11, 22,33);
    }
    cout<<"------------- Out of Bus Block ------------------"<<endl;
    cout<<"--------------- End Of Program --------------------"<<endl;
    fclose (stdout);
}

আউটপুট

--------------- Start Of Program --------------------
------------- Inside Car Block ------------------
Engine :: Constructor
Car :: Constructor
Car :: Destructor
Engine :: Destructor
------------- Out of Car Block ------------------
------------- Inside Bus Block ------------------
Engine :: Constructor
Bus :: Constructor
Bus :: Destructor
Engine :: Destructor
------------- Out of Bus Block ------------------
--------------- End Of Program --------------------

সমষ্টি (আপনি "সম্পূর্ণ" সরিয়ে ফেললে, "অংশ" বিদ্যমান থাকতে পারে - "মালিকানা নেই")

  • সমষ্টি একটি নির্দিষ্ট ধরণের রচনা যা জটিল বস্তু এবং সাবোবজেক্টগুলির মধ্যে কোনও মালিকানা বোঝানো হয় না। যখন একটি সমষ্টি ধ্বংস হয়, সাবোবজেক্টগুলি ধ্বংস হয় না।

  • সাধারণত পয়েন্টার ভেরিয়েবল / রেফারেন্স ভেরিয়েবল ব্যবহার করুন যা সামগ্রীর শ্রেণির ক্ষেত্রের বাইরে বসবাস করে এমন কোনও বস্তুর দিকে নির্দেশ করে

  • সামগ্রীর শ্রেণীর ক্ষেত্রের বাইরে থাকা কোনও বস্তুর প্রতি নির্দেশিত রেফারেন্স মানগুলি ব্যবহার করতে পারেন

  • সাবক্লাস তৈরি / ধ্বংস করার জন্য দায়বদ্ধ নয়

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

সি ++ এ সমষ্টি কোড

#include <iostream>
#include <string>
using namespace std;
/********************** Teacher Class ******************/
class Teacher
{
    private:
    string m_strName;
    public:
    Teacher(string strName);
    ~Teacher(void);
    string GetName();
};
Teacher::Teacher(string strName) : m_strName(strName)
{
    cout<<" Teacher :: Constructor --- Teacher Name :: "<<m_strName<<endl;
}
Teacher::~Teacher(void)
{
    cout<<" Teacher :: Destructor --- Teacher Name :: "<<m_strName<<endl;
}
string Teacher::GetName()
{
    return m_strName;
}
/********************** Department Class ******************/
class Department
{
    private:
    Teacher *m_pcTeacher;
    Teacher& m_refTeacher;
    public:
    Department(Teacher *pcTeacher, Teacher& objTeacher);
    ~Department(void);
};
Department::Department(Teacher *pcTeacher, Teacher& objTeacher)
: m_pcTeacher(pcTeacher), m_refTeacher(objTeacher)
{
    cout<<" Department :: Constructor " <<endl;
}
Department::~Department(void)
{
    cout<<" Department :: Destructor " <<endl;
}
/********************** Main Function ******************/
int main()
{
    freopen ("InstallationDump.Log", "w", stdout);
    cout<<"--------------- Start Of Program --------------------"<<endl;
    {
        // Create a teacher outside the scope of the Department
        Teacher objTeacher("Reference Teacher");
        Teacher *pTeacher = new Teacher("Pointer Teacher"); // create a teacher
        {
            cout<<"------------- Inside Block ------------------"<<endl;
            // Create a department and use the constructor parameter to pass the teacher to it.
            Department cDept(pTeacher,objTeacher);
            Department
            Teacher
            Figure 2: Aggregation
        } // cDept goes out of scope here and is destroyed
        cout<<"------------- Out of Block ------------------"<<endl;
        // pTeacher still exists here because cDept did not destroy it
        delete pTeacher;
    }
    cout<<"--------------- End Of Program --------------------"<<endl;
    fclose (stdout);
}

আউটপুট

--------------- Start Of Program --------------------
Teacher :: Constructor --- Teacher Name :: Reference Teacher
Teacher :: Constructor --- Teacher Name :: Pointer Teacher
------------- Inside Block ------------------
Department :: Constructor
Department :: Destructor
------------- Out of Block ------------------
Teacher :: Destructor --- Teacher Name :: Pointer Teacher
Teacher :: Destructor --- Teacher Name :: Reference Teacher
--------------- End Of Program --------------------

যে কেউ এই উত্তরটি ভোট দিয়েছে। আপনি দয়া করে এটিকে ভোট দেওয়ার কারণ ব্যাখ্যা করতে পারেন?
সৌরভ রাউত

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

6

এই উত্তরগুলির সাথে সমস্যা হ'ল এগুলি হ'ল গল্প: তারা ব্যাখ্যা করে যে সংহতকরণ এবং রচনাটি সংঘবদ্ধতার রূপ, তবে তারা বলে না যে কোনও সংস্থার পক্ষে এই দুটির একটিও হওয়া সম্ভব কিনা if

আমি এসও এবং কয়েকটি ইউএমএল ডক্সের অনেকগুলি পোস্টের সংক্ষিপ্ত পাঠের উপর ভিত্তি করে সংগ্রহ করি যে ক্লাস অ্যাসোসিয়েশনের 4 টি প্রধান কংক্রিট ফর্ম রয়েছে:

  1. রচনা: এ-সমন্বিত-এ-বি; ঘরের ঘরের মতো এ ছাড়া বিয়ের অস্তিত্ব নেই
  2. সমষ্টি: A has-a B; ক্লাসরুমের শিক্ষার্থীর মতো এ ছাড়া বি বি বিদ্যমান থাকতে পারে
  3. নির্ভরতা: একটি ব্যবহার-এ বি; পদ্ধতি কল প্যারামিটার, রিটার্ন মান, বা একটি পদ্ধতি কল চলাকালীন একটি অস্থায়ী তৈরির মতো এ এবং বি এর মধ্যে কোনও জীবনচক্র নির্ভরতা নেই
  4. জেনারালাইজেশন: এ-এ-বি

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

আমার অনুমান যে "জেনেরিক সমিতি" মূলত দুটি পরিস্থিতিতে ব্যবহার করা যেতে পারে:

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

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

1
@ ডিয়ানপি এটি আপাতত জেনেরিক হতে পারে, এবং পরে এটি 4 টির মধ্যে একটিতে রূপান্তরিত হবে (তারপরে এটি কার্যকর হয়ে যায়); অথবা এটি এমন একটি সম্পর্ক হতে পারে যা 4 টির মতো নয়, যেমনটি বলে যে আপনি এমন একটি সমিতি চান যার অর্থ "দেখতে" যেমন জেনেরিক সমিতি ব্যতীত আপনি 4 টির মধ্যে একটিও ব্যবহার করতে বাধ্য হবেন, এভাবে পাঠককে বিভ্রান্ত করবেন, আপনি যদি ব্যবহার করেন তবে জেনেরিক আপনি সম্ভবত এটিকে বর্নিত করবেন বা এটি কী তা ব্যাখ্যা করে একটি নোট রাখবেন এবং বেশিরভাগ লোক কেবল প্রতীকটি বুঝতে না পারলে নোট পড়েন;)
অলিভার

5

আমি মনে করি এই লিঙ্কটি আপনার বাড়ির কাজ করবে: http://ootips.org/uml-hasa.html

শর্তগুলি বুঝতে আমার প্রথম প্রোগ্রামিংয়ের দিনগুলিতে একটি উদাহরণ মনে আছে:

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

আপনার যদি একটি 'বর্গক্ষেত্র' অবজেক্ট থাকে যার একটি 'রঙ' অবজেক্ট থাকে এবং বর্গক্ষেত্রটি মুছে যায় তবে 'রঙ' অবজেক্টটি এখনও বিদ্যমান থাকতে পারে, এটি সমষ্টি

উভয়ই সমিতি , মূল পার্থক্য ধারণাগত


5

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

সমষ্টি : এটি উপরোক্ত ( Composition) সংস্থার ঠিক বিপরীতদিকে সাজানো যেখানে আপনি একবার কোনও বস্তুকে ( Company) মেরে ফেলেন , তখন অন্য বস্তু ( Employees) যার সাথে আবদ্ধ থাকে তা নিজে থেকেই উপস্থিত থাকতে পারে।

এসোসিয়েশন
সংমিশ্রণ এবং সংহতকরণ দুটি ধরনের সংঘবদ্ধতা।


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

1
হ্যাঁ, একেবারে সম্মত হন ... +1 @ অ্যালেক্সপোপোভ এটি দেখানোর জন্য ধন্যবাদ। :)
কুলসঙ্গর

4
    Simple rules:
    A "owns" B = Composition : B has no meaning or purpose in the system 
    without A
    A "uses" B = Aggregation : B exists independently (conceptually) from A
    A "belongs/Have" B= Association; And B exists just have a relation
    Example 1:

    A Company is an aggregation of Employees.
    A Company is a composition of Accounts. When a Company ceases to do 
    business its Accounts cease to exist but its People continue to exist. 
    Employees have association relationship with each other.

    Example 2: (very simplified)
    A Text Editor owns a Buffer (composition). A Text Editor uses a File 
    (aggregation). When the Text Editor is closed,
    the Buffer is destroyed but the File itself is not destroyed.


2

আমি তিনটি শর্তাবলী কীভাবে প্রয়োগ করা হয় তা চিত্রিত করতে চাই। ActiveRecord দুটি মডেল একটি মধ্যে সম্পর্ক কোন প্রকার কল association। অ্যাক্টিভেকর্ড সম্পর্কিত ডকুমেন্টেশন বা নিবন্ধগুলি পড়ার সময়, একটি খুব প্রায়ই শর্তাবলী compositionএবং খুঁজে পাবেন না aggregation। অ্যাসোসিয়েশন ক্লাসের শরীরে অ্যাসোসিয়েশন ক্লাস ম্যাক্রোগগুলির মধ্যে একটি যুক্ত করে তৈরি করা হয়। এই ম্যাক্রো মধ্যে কয়েকটি হল belongs_to, has_one, has_manyইত্যাদি ..

আমরা সেট আপ করার চান compositionবা aggregation, আমরা যোগ করতে হবে belongs_toমালিকানাধীন মডেল (শিশু এছাড়াও বলা হয়) এবং has_oneবা has_manyমালিক মডেল (পিতা বা মাতা এছাড়াও বলা হয়) জন্য। আমরা শিশু মডেলটিতে কলটিতে যে বিকল্পগুলি সেট করি তার উপরে আমরা সেটআপ করি compositionবা aggregationনির্ভর করি depends belongs_toরেল 5 এর আগে, belongs_toকোনও বিকল্প ছাড়াই সেটআপ করা একটি aggregationবাচ্চাদের পিতামাতাকে ছাড়া থাকতে পারে। যদি আমরা একটি চাইতাম composition, আমাদের বিকল্পটি যুক্ত করে স্পষ্ট করে এটি প্রকাশ করা দরকার required: true:

class Room < ActiveRecord::Base
  belongs_to :house, required: true
end

5 কারাগারে এটি পরিবর্তন করা হয়েছিল। এখন, belongs_toঅ্যাসোসিয়েশনের ঘোষণাটি একটি compositionডিফল্টরূপে তৈরি করে, সন্তানের পিতা-মাতা ছাড়া থাকতে পারে না। সুতরাং উপরের উদাহরণটি আবার লিখিত হতে পারে:

class Room < ApplicationRecord
  belongs_to :house
end

আমরা যদি পিতা-মাতা ব্যতীত সন্তানের বস্তুর অস্তিত্বের অনুমতি দিতে চাই, তবে বিকল্পের মাধ্যমে আমাদের এটি স্পষ্টভাবে ঘোষণা করা দরকার optional

class Product < ApplicationRecord
  belongs_to :category, optional: true
end

2

থেকে: রেমো এইচ।

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

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

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


1

অ্যাসোসিয়েশন দুটি পৃথক শ্রেণীর মধ্যে একটি সম্পর্ক এবং সমিতি যেকোন প্রকারের হতে পারে এক থেকে এক, এক হতে পারে ইত্যাদি It এটি দুটি পৃথক পৃথক সত্তায় যোগদান করে।

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

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


1

https://www.linkedin.com/pulse/types-relationships-object-oriented-programming-oop-sarah-el-dawody/

রচনা: একটি "অংশের" সম্পর্ক।

উদাহরণস্বরূপ, "ইঞ্জিন গাড়ির অংশ", "হৃদয় শরীরের অঙ্গ"।

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

সমিতি: একটি "হ্যাস-এ" টাইপের সম্পর্ক

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

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

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

সমষ্টি: " হস -এ" সম্পর্কের উপর ভিত্তি করে এবং এটি association সংযুক্তির একটি বিশেষ রূপ

উদাহরণস্বরূপ, "ছাত্র" এবং "ঠিকানা"। প্রতিটি শিক্ষার্থীর একটি ঠিকানা থাকতে হবে সুতরাং শিক্ষার্থী শ্রেণি এবং ঠিকানা শ্রেণীর মধ্যে সম্পর্ক "হ্যাঁ-এ" টাইপের সম্পর্ক হবে তবে তদ্বিপরীত সত্য নয়।

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

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