मैं एकत्रीकरण और संरचना के बीच वैचारिक मतभेदों से अवगत हूं। क्या कोई मुझे उदाहरणों के साथ जावा में कार्यान्वयन अंतर बता सकता है?
मैं एकत्रीकरण और संरचना के बीच वैचारिक मतभेदों से अवगत हूं। क्या कोई मुझे उदाहरणों के साथ जावा में कार्यान्वयन अंतर बता सकता है?
जवाबों:
रचना
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);
}
}
इसके आसपास कुछ है।
नीचे दिए गए url में एक महान विवरण है।
http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit
कृपया जांचें!!!
शर्तें तय करते हैं। एकत्रीकरण यूएमएल मानक में एक मेटाटर्म है, और इसका अर्थ है बीओटीएच रचना और साझा एकत्रीकरण, जिसका नाम केवल साझा है । बहुत बार इसे गलत तरीके से "एकत्रीकरण" नाम दिया गया है। यह BAD है, रचना के लिए एक एकत्रीकरण भी है। जैसा कि मैं समझता हूं, आपका मतलब "साझा" है।
UML मानक से आगे:
सम्मिश्र - इंगित करता है कि संपत्ति को समग्र रूप से संयोजित किया गया है, अर्थात, मिश्रित वस्तु की रचना (ऑब्जेक्ट) के अस्तित्व और भंडारण के लिए जिम्मेदारी है।
अतः, कैथेड्रस एसोसिएशन के लिए विश्वविद्यालय एक रचना है, क्योंकि कैथेड्रा विश्वविद्यालय (IMHO) से बाहर नहीं है
साझा एकत्रीकरण का सटीक शब्दार्थ आवेदन क्षेत्र और मॉडलर द्वारा भिन्न होता है।
यानी, अन्य सभी संघों को साझा एकत्रीकरण के रूप में तैयार किया जा सकता है, यदि आप केवल आपके या किसी और के कुछ सिद्धांतों का पालन कर रहे हैं। इसके अलावा देखने के लिए यहाँ ।
एक साधारण रचना कार्यक्रम
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
एक ही पृष्ठ पर होना चाहिए।
एकत्रीकरण एक संघ है जहां संबद्ध इकाई संघ से स्वतंत्र मौजूद हो सकती है। उदाहरण के लिए, एक व्यक्ति किसी संगठन से जुड़ा हो सकता है, लेकिन उसका सिस्टम में स्वतंत्र अस्तित्व हो सकता है।
जहाँ तक
रचना एक ऐसी स्थिति को संदर्भित करती है जब संबद्ध संस्थाओं में से एक दृढ़ता से दूसरे से संबंधित होती है और दूसरे के अस्तित्व के बिना मौजूद नहीं हो सकती। वास्तव में उस इकाई की पहचान हमेशा अन्य वस्तु की पहचान से जुड़ी होती है। उदाहरण के लिए, एक कार में पहिए।
अब, एकत्रीकरण को एक इकाई की संपत्ति को दूसरे में नीचे रखकर प्राप्त किया जा सकता है:
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;
}
}
रचना के लिए यह आवश्यक है कि आश्रित वस्तु हमेशा अपने संबंधित वस्तु की पहचान के साथ बनाई जाती है। आप उसी के लिए एक आंतरिक वर्ग का उपयोग कर सकते हैं।
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();
}
}
कृपया ध्यान दें कि समान उपयोग मामला आवेदन परिदृश्य के आधार पर एकत्रीकरण / संरचना के अंतर्गत आ सकता है। उदाहरण के लिए, यदि आप किसी संगठन में काम कर रहे लोगों के लिए एक एप्लिकेशन विकसित कर रहे हैं और संगठन के संदर्भ में साइन अप करना है तो व्यक्ति-संगठन का मामला बन सकता है। इसी तरह, यदि आप कार के कुछ हिस्सों के लिए इन्वेंट्री बनाए हुए हैं, तो कार-व्हील संबंध एकत्रीकरण हो सकता है।
एकत्रीकरण बनाम रचना
एकत्रीकरण का तात्पर्य एक ऐसे संबंध से है जहां बच्चा माता-पिता से स्वतंत्र रूप से मौजूद हो सकता है । उदाहरण के लिए, बैंक और कर्मचारी, बैंक को हटा दें और कर्मचारी अभी भी मौजूद है।
जबकि रचना का तात्पर्य एक ऐसे संबंध से है जहां बच्चा माता-पिता से स्वतंत्र नहीं हो सकता । उदाहरण: मानव और हृदय, हृदय एक मानव से अलग नहीं होते हैं।
एकत्रीकरण संबंध "है-ए" और रचना "संबंध का हिस्सा" है।
रचना एक मजबूत एसोसिएशन है जबकि एकत्रीकरण एक कमजोर एसोसिएशन है।
दोनों प्रकार के पाठ्यक्रम संघों के हैं, और वास्तव में उस तरह के भाषा तत्वों के लिए सख्ती से मैप नहीं किए जाते हैं। अंतर उद्देश्य, संदर्भ और सिस्टम को किस प्रकार से तैयार किया गया है।
एक व्यावहारिक उदाहरण के रूप में, समान संस्थाओं के साथ दो अलग-अलग प्रकार की प्रणालियों की तुलना करें:
एक कार पंजीकरण प्रणाली जो मुख्य रूप से कारों, और उनके मालिकों, आदि का ट्रैक रखती है। यहां हम एक अलग इकाई के रूप में इंजन में रुचि नहीं रखते हैं, लेकिन हमारे पास अभी भी इंजन से संबंधित विशेषताएं हो सकती हैं, जैसे बिजली, और ईंधन का प्रकार। यहां इंजन कार इकाई का एक संयुक्त हिस्सा हो सकता है ।
एक कार सेवा की दुकान प्रबंधन प्रणाली जो कार के पुर्जों, कारों की सर्विसिंग और पुर्जों को बदलने का काम करती है, शायद पूर्ण इंजन। यहां हमारे पास इंजन भी हो सकते हैं और उन्हें और अन्य हिस्सों को अलग-अलग और कारों से स्वतंत्र रखने की आवश्यकता होती है। यहाँ इंजन कार इकाई का एक संयुक्त हिस्सा हो सकता है ।
आप इसे अपनी भाषा में कैसे लागू करते हैं यह मामूली चिंता का विषय है क्योंकि उस स्तर पर पठनीयता जैसी चीजें बहुत अधिक महत्वपूर्ण हैं।