আমি সমষ্টি এবং রচনার মধ্যে ধারণাগত পার্থক্য সম্পর্কে সচেতন। কেউ আমাকে উদাহরণ সহ জাভা বাস্তবায়ন পার্থক্য বলতে পারেন?
আমি সমষ্টি এবং রচনার মধ্যে ধারণাগত পার্থক্য সম্পর্কে সচেতন। কেউ আমাকে উদাহরণ সহ জাভা বাস্তবায়ন পার্থক্য বলতে পারেন?
উত্তর:
গঠন
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();
}
}
সংমিশ্রণের ক্ষেত্রে, ইঞ্জিন সম্পূর্ণরূপে গাড়ি দ্বারা সজ্জিত। বাইরের বিশ্বের ইঞ্জিনের রেফারেন্স পাওয়ার কোনও উপায় নেই। ইঞ্জিন বেঁচে থাকে এবং গাড়িটি দিয়ে মারা যায়। সংহতকরণের সাথে সাথে গাড়িটি ইঞ্জিনের মাধ্যমেও তার কার্য সম্পাদন করে তবে ইঞ্জিন সর্বদা গাড়ির অভ্যন্তরীণ অংশ হয় না। ইঞ্জিনগুলি অদলবদল হতে পারে, বা এমনকি পুরোপুরি সরানো হতে পারে। কেবল এটিই নয়, বাইরের বিশ্বের এখনও ইঞ্জিনের একটি রেফারেন্স থাকতে পারে এবং এটি গাড়ীর মধ্যে থাকুক না কেন এ নিয়ে টিঙ্কার দিতে পারে।
new Engine(EngineSpecs)
এক্ষেত্রে গাড়ি না থাকলেও কলটি ব্যবহার করে একটি ইঞ্জিন তৈরি করা যেতে পারে । রচনা অর্জনের উপায় হ'ল ইঞ্জিনটিকে একটি অভ্যন্তরীণ শ্রেণি হিসাবে তৈরি করা, যাতে ইঞ্জিনের একটি অবজেক্ট সর্বদা কার অবজেক্টের রেফারেন্স সহ তৈরি করা যায়
আমি একটি দুর্দান্ত ইউএমএল উদাহরণ ব্যবহার করব।
এমন একটি বিশ্ববিদ্যালয় নিন যেখানে 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);
}
}
এর আশেপাশে কিছু।
নীচে প্রদত্ত ইউআরএলটিতে একটি দুর্দান্ত ব্যাখ্যা রয়েছে।
http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit
দয়া করে চেক করুন !!!
শর্তাবলী সেট করা যাক। সমষ্টিটি ইউএমএল স্ট্যান্ডার্ডের একটি রূপক, এবং এর অর্থ দুটি রচনা এবং ভাগ করা সমষ্টি, যার নাম দেওয়া হয়েছে কেবল ভাগ করা । প্রায়শই এটির নামকরণ হয়েছে ভুলভাবে "সমষ্টি"। এটি খারাপ, কারণ রচনাটিও একটি সমষ্টি। যেমনটি আমি বুঝতে পেরেছি, আপনার অর্থ "ভাগ করা"।
ইউএমএল স্ট্যান্ডার্ড থেকে আরও:
সংমিশ্রণ - ইঙ্গিত দেয় যে সম্পত্তিটি সুসংগতভাবে সংযুক্ত, অর্থাত, সংমিশ্রিত বস্তুর রচিত বস্তুর অস্তিত্ব এবং সংরক্ষণের জন্য দায়বদ্ধতা রয়েছে (অংশ)।
সুতরাং, ইউনিভার্সিটি টু ক্যাথেড্রস অ্যাসোসিয়েশন একটি সংমিশ্রণ, কারণ বিশ্ববিদ্যালয় থেকে বাইরে ক্যাথেড্রার অস্তিত্ব নেই (আইএমএইচও)
ভাগ করা সমষ্টিগুলির যথার্থ শব্দার্থবিজ্ঞান অ্যাপ্লিকেশন অঞ্চল এবং মডেলারের দ্বারা পরিবর্তিত হয়।
অর্থাত্, যদি আপনি কেবল আপনার বা অন্য কারও কোনও নীতি অনুসরণ করে থাকেন তবে অন্যান্য সমস্ত সমিতিগুলি ভাগ করা সমষ্টি হিসাবে আঁকতে পারে। এছাড়াও এখানে দেখুন ।
একটি সাধারণ রচনা প্রোগ্রাম
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);
}
}
প্রথমে আমাদের একই পৃষ্ঠায় আসলে কী পার্থক্য রয়েছে 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();
}
}
দয়া করে নোট করুন যে একই ব্যবহারের ক্ষেত্রে প্রয়োগের দৃশ্যের উপর ভিত্তি করে একত্রিতকরণ / রচনার আওতায় পড়তে পারে। উদাহরণস্বরূপ, আপনি যদি কোনও সংস্থায় কর্মরত লোকদের জন্য একটি অ্যাপ্লিকেশন বিকাশ করছেন এবং সাইন আপের জন্য সংগঠনের রেফারেন্স অবশ্যই প্রয়োজন হয় তবে ব্যক্তি-সংস্থার কেসটি সংমিশ্রণে পরিণত হতে পারে। একইভাবে, আপনি যদি কোনও গাড়ির অংশগুলির জন্য তালিকা বজায় রাখেন তবে গাড়ি-চাকা সম্পর্ক একত্রিত হতে পারে।
সমষ্টি বনাম রচনা
সমষ্টিটি এমন একটি সম্পর্ককে বোঝায় যেখানে শিশু পিতামাতার থেকে স্বাধীনভাবে থাকতে পারে । উদাহরণস্বরূপ, ব্যাংক এবং কর্মচারী, ব্যাংক মুছুন এবং কর্মচারী এখনও বিদ্যমান।
যদিও রচনাটি এমন একটি সম্পর্ককে বোঝায় যেখানে সন্তানের পিতামাতার থেকে আলাদা থাকতে পারে না । উদাহরণ: মানব এবং হৃদয়, হৃদয় একটি মানুষের পৃথক অস্তিত্ব নেই।
সমষ্টিগত সম্পর্ক হ'ল-এ-এ এবং রচনাটি "অংশের" সম্পর্ক।
সংমিশ্রণ একটি শক্তিশালী সংস্থা যেখানে সমষ্টিটি একটি দুর্বল সমিতি।
উভয় প্রকার অবশ্যই অ্যাসোসিয়েশন এবং এ জাতীয় ভাষার উপাদানগুলিতে সত্যই ম্যাপ করা হয়নি। পার্থক্যটি উদ্দেশ্য, প্রসঙ্গে এবং সিস্টেমটি কীভাবে মডেল করা হয় is
ব্যবহারিক উদাহরণ হিসাবে, অনুরূপ সত্তার সাথে দুটি ভিন্ন ধরণের সিস্টেমের তুলনা করুন:
একটি গাড়ি নিবন্ধকরণ সিস্টেম যা মূলত গাড়ি এবং তাদের মালিক ইত্যাদির উপর নজর রাখে Here এখানে আমরা পৃথক সত্তা হিসাবে ইঞ্জিনে আগ্রহী নই, তবে আমাদের এখনও শক্তি এবং জ্বালানীর ধরণের মতো ইঞ্জিন সম্পর্কিত বৈশিষ্ট্য থাকতে পারে। এখানে ইঞ্জিনটি গাড়ী সত্তার একটি সংমিশ্রিত অংশ হতে পারে ।
একটি গাড়ি পরিষেবা শপ ম্যানেজমেন্ট সিস্টেম যা গাড়ির যন্ত্রাংশ পরিচালনা করে, গাড়ি সার্ভিস করে, এবং অংশগুলি প্রতিস্থাপন করে, সম্ভবত সম্পূর্ণ ইঞ্জিন। এখানে আমাদের এমনকি ইঞ্জিনগুলি স্টক থাকতে পারে এবং তাদের এবং অন্যান্য অংশগুলি গাড়ি থেকে আলাদা এবং স্বতন্ত্র রাখতে প্রয়োজন। এখানে ইঞ্জিনটি গাড়ী সত্তার একত্রিত অংশ হতে পারে ।
আপনি আপনার ভাষায় এটি কীভাবে প্রয়োগ করেন তা সামান্য উদ্বেগের কারণ যে স্তরটিতে পাঠযোগ্যতার মতো বিষয়গুলি অনেক বেশি গুরুত্বপূর্ণ।