java composition what is composition java
यह जावा कंपोज़िट ट्यूटोरियल बताता है कि जावा में संरचना और एकत्रीकरण क्या है और उनके बीच अंतर क्या है:
ट्यूटोरियल के अंतिम जोड़े में, हमने जावा में विरासत पर विस्तार से चर्चा की। जावा में इनहेरिटेंस 'आईएस-ए' संबंध का एक प्रकार है जो इंगित करता है कि एक वस्तु ance एक अन्य वस्तु है। उदाहरण के लिए, कार एक प्रकार या वाहन है।
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग 'एचएएस-ए' रिश्ते को एक अन्य प्रकार का संबंध प्रदान करता है। इस ट्यूटोरियल में, हम विस्तार से एक संबंध पर चर्चा करेंगे।
=> स्क्रैच से जावा सीखने के लिए यहां जाएं।
आप क्या सीखेंगे:
जावा संरचना ट्यूटोरियल
जावा में The-a 'संबंध कहा जाता है रचना । Or-a ’संबंध या संरचना का उपयोग करके हम अपने कार्यक्रमों में कोड पुन: प्रयोज्य सुनिश्चित करते हैं।
इसलिए हमारे कार्यक्रमों का उपयोग करने से what संबंध है, जो हम यहां कर रहे हैं, वह यह है कि हम अपने कार्यक्रम का उपयोग किसी वर्ग के उदाहरण के बजाय सीधे दूसरे वर्ग से कर रहे हैं जैसा कि हम विरासत के मामले में करते हैं।
नीचे दिए गए चित्र में जावा में Java-a ’और Java-Java रिश्तों को दर्शाया गया है।
जैसा कि ऊपर चित्र से देखा गया है, कार और वाहन एक वाहन के रूप में A IS-A 'संबंध साझा करते हैं। इसलिए हम मौजूदा वाहन ऑब्जेक्ट से अधिक विशेषताओं को जोड़कर एक कार ऑब्जेक्ट बनाते हैं।
आरेख में, कार और इंजन 'हस-ए' संबंध साझा करते हैं। एक कार में हमेशा एक इंजन होता है। तो हम यहाँ क्या करते हैं कि हम इंजन ऑब्जेक्ट के गुणों का विस्तार नहीं करते हैं लेकिन हम सीधे इंजन ऑब्जेक्ट का उपयोग करते हैं। यह जावा में कंपोजिशन का उपयोग करते हुए किया जाता है।
इसलिए एनकैप्सुलेशन, एब्स्ट्रक्शन और पॉलिमोर्फ़िज्म के साथ, इनहेरिटेंस और कंपोज़िशन भी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) की महत्वपूर्ण विशेषताएं हैं।
The के 'ए' संबंध आमतौर पर निर्धारित करते हैं कि क्या किसी निश्चित वस्तु में कोई अन्य वस्तु है। तो हम यहाँ क्या करते हैं, हम एक वस्तु का पुन: उपयोग करते हैं और इस प्रकार कोड दोहराव और त्रुटियों को कम करते हैं। ऐसा इसलिए है क्योंकि हम अपनी कक्षा में पूरी तरह से विकसित और परीक्षण की गई वस्तु का उपयोग करते हैं।
आइए जावा में 'एसोसिएशन' नामक एक विशेष संबंध की चर्चा के साथ शुरू करें जिसमें से हम संरचना और अन्य संबंधों को प्राप्त करते हैं।
जावा में एसोसिएशन
जावा में एसोसिएशन को एक संबंध के रूप में परिभाषित किया जा सकता है जो दो अलग-अलग वर्गों के बीच अपनी अलग-अलग वस्तुओं का उपयोग करके मौजूद है। जावा में एसोसिएशन के निम्नलिखित संबंध हो सकते हैं।
- एक से एक: ठीक एक वस्तु से जुड़ी हुई एक वस्तु।
- कई लोगों के लिए एक: एक वस्तु को कई वस्तुओं के साथ जोड़ा जा सकता है।
- कई-से-एक: कई वस्तुएं एक वस्तु से जुड़ी हो सकती हैं।
- कई कई: एक से अधिक ऑब्जेक्ट एक से अधिक अन्य ऑब्जेक्ट से जुड़े हुए हैं।
जब कोई संबंध स्थापित होता है, तो सम्मिलित वस्तुएं (ऐसी वस्तुएं जो उनके सदस्यों के रूप में अन्य वस्तुएं हैं) सम्मिलित ऑब्जेक्ट के साथ संपत्तियों और विशेषताओं का पुन: उपयोग करने के लिए संचार करती हैं। एसोसिएशन के दो रूप होते हैं यानि रचना और एकत्रीकरण।
नीचे दिया गया आंकड़ा यह दिखाता है:
जैसा कि ऊपर चित्र से देखा गया है, एसोसिएशन में संरचना और एकत्रीकरण शामिल है। रचना एक अधिक विशिष्ट शब्द है और संयोजन रचना की तुलना में अधिक सामान्य है। ये रूप इस बात पर आधारित हैं कि वे किस प्रकार के संबंधों का समर्थन करते हैं।
इससे पहले कि हम संरचना और एकत्रीकरण पर आगे बढ़ें, आइए जावा में एसोसिएशन को प्रदर्शित करने के लिए एक जावा प्रोग्राम को लागू करें।
import java.io.*; // class Account class Account { private String bank_name; private long Account_number; // initialize bank name and account number Account(String bank_name, long Account_number) { this.bank_name = bank_name; this.Account_number = Account_number; } //read bank name public String getBankName() { returnthis.bank_name; } //read account number public long getAccountNumber() { returnthis.Account_number; } } // employee class class Employee { private String emp_name; // initialize employee name Employee(String emp_name) { this.emp_name = emp_name; } //read employee name public String getEmployeeName() { return this.emp_name; } } // Associate both the classes class Main { public static void main (String() args) { Employee emp = new Employee('Andrew'); Account acc = new Account('Citi Bank', 13319); System.out.println(emp.getEmployeeName() + ' has an account with ' + acc.getBankName() + ' with Account Number:' + acc.getAccountNumber()); } }
आउटपुट:
उपरोक्त कार्यक्रम जावा में एक संघ को प्रदर्शित करता है। यहां, हमारे पास एक वर्ग खाता है जिसमें एक बैंक का नाम और निजी सदस्यों के रूप में खाता संख्या है। अगला, हमारे पास एक कर्मचारी वर्ग है। हम जानते हैं कि हर कर्मचारी के पास वेतन आदि जमा करने के लिए एक खाता संख्या होगी।
इसलिए हम जो करते हैं, वह कर्मचारी के बैंक खाते के विवरण में पढ़ने के लिए किसी अन्य वर्ग या पद्धति को लिखने के बजाय, हम मौजूदा मौजूदा वर्ग का पुन: उपयोग करते हैं। दूसरे शब्दों में, हम एक कर्मचारी को कर्मचारी के साथ जोड़ते हैं ताकि हमें कर्मचारी के बैंक खाते का विवरण मिल जाए। उपरोक्त उदाहरण बिल्कुल यही करता है।
जावा में रचना
रचना एसोसिएशन का एक रूप है। संरचना को एक संघ के रूप में परिभाषित किया जा सकता है जिसमें एक वर्ग में एक और वर्ग होता है और यह निहित वर्ग इस तरह से युक्त वर्ग पर निर्भर करता है कि यह स्वतंत्र रूप से मौजूद हो सकता है।
हमने एक के बाद एक संबंधों का एक उदाहरण देखा है। उस में, हमारे पास एक कार ऑब्जेक्ट था जिसमें एक इंजन है। यह रचना का एक उदाहरण है। इसमें, एक कार के बिना एक इंजन स्वतंत्र रूप से मौजूद नहीं हो सकता है।
एकत्रीकरण की तुलना में रचना अधिक प्रतिबंधित है। रचना एक जावा सुविधा नहीं है। इसे मुख्य रूप से एक डिजाइन तकनीक माना जाता है।
निम्नलिखित आरेख एक रचना उदाहरण दिखाता है।
कैसे ग्रहण में maven सेटअप करने के लिए
इसमें एक कर्मचारी का बैंक खाता होता है। हम जानते हैं कि एक खाताधारक के बिना एक बैंक खाता मौजूद नहीं हो सकता है। खाताधारक के बिना, यह निष्क्रिय हो जाता है।
हम संरचना का उपयोग उन वस्तुओं के मॉडल के लिए कर सकते हैं जिनकी अन्य वस्तुएँ इसके सदस्य हैं और इन वस्तुओं का आपस में 'रिश्ता' है।
रचना में, एक वस्तु किसी अन्य वस्तु में निहित होती है, इसलिए जब युक्त वस्तु नष्ट हो जाती है; दूसरी वस्तु भी नष्ट हो गई है
इसलिए हम संरचना संबंध को 'भाग-ए-संपूर्ण' संबंध के रूप में देख सकते हैं जिसमें अंश के बिना अस्तित्व में नहीं है पूरा का पूरा । इसलिए, जब पूरा नष्ट हो जाता है, तो भाग को भी हटा दिया जाता है। इसका मतलब है कि पूरे हिस्से के साथ एक मजबूत रिश्ता है।
जावा संरचना उदाहरण
नीचे दिए गए रचना को प्रदर्शित करने का कार्यक्रम है।
हमारे द्वारा यहां उपयोग की जाने वाली प्रणाली नीचे दी गई है।
तो इस कार्यक्रम में, हमारे पास तीन कक्षाएं हैं जैसा कि ऊपर दिखाया गया है। होंडा एक कार है इसलिए यह क्लास कार से फैली हुई है। CarEngine ऑब्जेक्ट का उपयोग होंडा क्लास में किया जाता है।
कार्यक्रम नीचे दिया गया है।
class CarEngine { public void startEngine(){ System.out.println('Car Engine Started.'); } public void stopEngine(){ System.out.println('Car Engine Stopped.'); } } class Car { private String color; private int max_Speed; public void carDetails(){ System.out.println('Car Color= '+color + '; Max Speed= ' + max_Speed); } //set car color public void setColor(String color) { this.color = color; } //set car max_Speed public void setMaxSpeed(int max_Speed) { this.max_Speed = max_Speed; } } class Honda extends Car{ public void HondaStart(){ CarEngine Honda_Engine = new CarEngine(); //composition Honda_Engine.startEngine(); } } public class Main { public static void main(String() args) { Honda HondaCity = new Honda(); HondaCity.setColor('Silver'); HondaCity.setMaxSpeed(180); HondaCity.carDetails(); HondaCity.HondaStart(); } }
आउटपुट:
विंडोज़ 10 में .eps फ़ाइल कैसे खोलें
इस प्रकार आउटपुट होंडा कारों के गुणों को दर्शाता है। यह CarEngine वर्ग से एक विधि के आउटपुट को भी दिखाता है जिसे हमने होंडा क्लास के एक सदस्य के रूप में उपयोग करके बनाया है।
इस कार्यक्रम ने दिखाया कि कैसे हम जावा प्रोग्राम में रचना का उपयोग कर सकते हैं।
जावा में एकत्रीकरण
एकत्रीकरण जावा में संघ का दूसरा रूप है। लेकिन एकत्रीकरण के मामले में, यह केवल वस्तुओं के बीच एक-तरफ़ा संबंध की अनुमति देता है। उदाहरण के लिए, एक कर्मचारी का घर का पता होता है। लेकिन इसके विपरीत, घर के पते में कर्मचारी हैं, यह सही नहीं है।
इसी तरह, एक छात्र के पास एक पता होता है, लेकिन 'एक छात्र के पास एक पता' होता है। रचना की तरह, एकत्रीकरण में भी 'एक' संबंध दर्शाया गया है। इसका मतलब है कि एक वर्ग में दूसरे वर्ग की वस्तु शामिल है।
नीचे दिया गया चित्र एक उदाहरण उदाहरण प्रस्तुत करता है।
उपरोक्त उदाहरण की व्याख्या की जा सकती है क्योंकि कॉलेज में कर्मचारी और छात्र हैं।
तो वास्तव में हमें एकत्रीकरण के लिए कब जाना चाहिए?
हमें एकत्रीकरण का उपयोग तब करना चाहिए जब 'संबंध' या वंशानुक्रम का उपयोग करने की कोई आवश्यकता न हो। यदि हम किसी वस्तु के अनुप्रयोग या जीवन भर ‘-a’ संबंध बनाए रख सकते हैं, तो हम कोड पुन: उपयोग के लिए विरासत को लागू कर सकते हैं।
अन्यथा, कोड पुन: प्रयोज्य के लिए एकत्रीकरण का उपयोग करना सबसे अच्छा है। अब जावा में एक उदाहरण एकत्रीकरण लागू करते हैं।
हमारे द्वारा उपयोग की जाने वाली उदाहरण प्रणाली इस प्रकार है:
यहाँ हमारे पास एक 'संस्थान' वर्ग है। संस्थान में विभिन्न विभाग या शाखाएँ हो सकती हैं। बदले में प्रत्येक शाखा में कई छात्र हैं। इस कार्यक्रम में, हम पूरे संस्थान में छात्रों की कुल संख्या की गणना करेंगे। हम इस उद्देश्य के लिए एकत्रीकरण का उपयोग करते हैं। क्लास इंस्टीट्यूट में ब्रांच ऑब्जेक्ट होता है।
शाखा वस्तु में एक छात्र वस्तु होती है। इसलिए ब्रांच ऑब्जेक्ट का उपयोग करके संस्थान वर्ग में हम छात्रों की कुल संख्या की गणना करते हैं। इस उद्देश्य के लिए, हम एक संस्थान में शाखाओं की एक सूची का उपयोग करते हैं।
जावा प्रोग्राम नीचे दिया गया है।
import java.io.*; import java.util.*; // Class Student class Student { String student_name; int student_id ; String student_dept; //Initialize Student class members Student(String student_name, int student_id, String student_dept) { this.student_name = student_name; this.student_id = student_id; this.student_dept = student_dept; } } //Branch class indiates the branch or department to which the student belongs class Branch { String Branch_name; private List students; //Each branch contain students //Initialize class members Branch(String Branch_name, List students) { this.Branch_name = Branch_name; this.students = students; } //return list of students public List getStudents() { return students; } } //Institure class contains branches which in turn have students class Institute { String instituteName; private List branches; //each institure have various branches //initialize members Institute(String instituteName, List branches) { this.instituteName = instituteName; this.branches = branches; } // count and return number of all students in the institute public int getAllStudentsInInstitute() { int noOfStudents = 0; List students; for(Branch branch : branches) { students = branch.getStudents(); for(Student s : students) { noOfStudents++; } } return noOfStudents; } } //Aggregate all the classes=> Institute (contains) branches (contains) Students class Main { public static void main (String() args) { //declare student objects Student s1 = new Student('Megan', 1, 'CSE'); Student s2 = new Student('Mia', 2, 'CSE'); Student s3 = new Student('John', 1, 'ETC'); Student s4 = new Student('Finn', 2, 'ETC'); // List of CSE Students. List cse_students = new ArrayList(); cse_students.add(s1); cse_students.add(s2); //List of ETC Students List etc_students = new ArrayList(); etc_students.add(s3); etc_students.add(s4); //declare Branch objects Branch CSE = new Branch('CSE', cse_students); Branch ETC = new Branch('ETC', etc_students); //make list of branches List branches = new ArrayList(); branches.add(CSE); branches.add(ETC); // creating an object of Institute. Institute institute = new Institute('NIT', branches); //display total number of students System.out.print('Total students in NIT institute: '); System.out.print(institute.getAllStudentsInInstitute()); } }
आउटपुट:
इसलिए एकत्रीकरण और रचना संघ के दो रूप हैं जिनकी हमने यहां चर्चा की है। जब हमें वस्तुओं के बीच objects-a ’संबंध का प्रतिनिधित्व करने की आवश्यकता नहीं है या नहीं कर सकते हैं तो हम रचना के लिए जा सकते हैं यदि हम वस्तुओं या एकत्रीकरण के बीच एक मजबूत संबंध चाहते हैं यदि हम एकतरफा संबंध चाहते हैं।
एकत्रीकरण और रचना दोनों जावा में कोड का पुन: उपयोग करने में हमारी सहायता करते हैं।
अलगाव बनाम रचना के बीच अंतर
रचना और एकत्रीकरण दोनों एसोसिएशन के ऐसे भाग हैं जो एक 'संबंध' को दर्शाते हैं। दोनों तकनीकें जावा सुविधाएँ नहीं हैं और इन्हें लागू करने का एक सीधा तरीका नहीं है लेकिन जावा कोड का उपयोग करके इसे लागू किया जा सकता है।
रचना और एकत्रीकरण हमें कोड का पुन: उपयोग करने की अनुमति देता है। कोड पुन: प्रयोज्य कोड में बग्स को कम करता है और अनुप्रयोग को और अधिक स्थिर बनाता है।
नीचे सूचीबद्ध एग्रीगेशन और संरचना के बीच कुछ अंतर हैं।
एकत्रीकरण | रचना |
---|---|
एकत्रीकरण बाल वस्तुओं या निहित वस्तुओं को स्वतंत्र रूप से अस्तित्व में रखने की अनुमति देता है। उदाहरण के लिए एक रिश्ते में जहां स्कूल के कर्मचारी होते हैं, अगर हम स्कूल को हटाते हैं, तो कर्मचारी बने रहेंगे और अपने काम कर सकते हैं। | रचना में, निहित वस्तु स्वतंत्र रूप से मौजूद नहीं हो सकती है। उदाहरण के लिए एक कार में इंजन है। यदि हम कार हटाते हैं, तो इंजन वर्ग अपने आप काम नहीं कर सकता है। |
एकत्रीकरण एक 'एक' संबंध है। | रचना-के-’संबंध का एक रूप है लेकिन इसे पूरे-के-पूरे संबंध के रूप में देखा जाता है। |
एकत्रीकरण में केवल एक से एक एसोसिएशन है। | रचना संघ में प्रदान किए गए अन्य संबंधों की अनुमति देती है। |
एकत्रीकरण का वस्तुओं के बीच कमजोर संबंध है। | रचना का वस्तुओं के बीच एक मजबूत संबंध है। |
रचना बनाम। विरासत
रचना | विरासत |
---|---|
रचना में 'हस-ए' संबंध को दर्शाया गया है। | वंशानुक्रम-Is-A ’संबंध का प्रतिनिधित्व करता है |
ऑब्जेक्ट्स के कार्यान्वयन को बदलने में आसान। | जब एक कार्यान्वयन वंशानुक्रम के पूरे पदानुक्रम को बदलता है। |
एक गतिशील या रन-टाइम है। | एक स्थिर या संकलन समय बाध्यकारी है। |
फ्रंट-एंड क्लास इंटरफ़ेस को बैक-एंड कक्षाओं को प्रभावित किए बिना आसानी से बदला जा सकता है। | तरीकों या प्रोटोटाइप में कोई भी परिवर्तन सभी वर्गों को प्रभावित करता है। |
रचना का उपयोग तब किया जाता है जब हमें किसी मौजूदा ऑब्जेक्ट में अधिक विशेषताओं या विशेषताओं को जोड़ने की आवश्यकता नहीं होती है। | वंशानुक्रम का उपयोग तब किया जाता है जब विरासत वाले वर्गों में अधिक सुविधाएँ जोड़ी जानी हैं। |
बार बार पूछे जाने वाले प्रश्न
Q # 1) 1 IS - A 'और A HAS - A' संबंध में क्या अंतर है?
उत्तर: ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, IS-A संबंध वंशानुक्रम का प्रतिनिधित्व करता है जिसमें एक बाल वर्ग oriented एक प्रकार का 'मूल वर्ग है। हस-ए रिलेशनशिप एक-पार्ट-ऑफ-ए - पूरा ’रिलेशनशिप है जिसे कंपोजिशन और एग्रीगेशन द्वारा दर्शाया जाता है। वंशानुक्रम एक स्थिर बंधन है जबकि संरचना गतिशील बंधन है।
Q # 2) जावा में एकत्रीकरण और संरचना क्या है?
उत्तर: रचना में, दो ऑब्जेक्ट्स को कसकर युग्मित किया जाता है यानी जब ऑब्जेक्ट (युक्त वस्तु) जो किसी अन्य ऑब्जेक्ट (समाहित ऑब्जेक्ट) का मालिक होता है, तो दूसरी वस्तु स्वचालित रूप से नष्ट हो जाती है क्योंकि यह अपने आप स्वतंत्र रूप से कार्य नहीं कर सकती है।
एकत्रीकरण में, युक्त और निहित वस्तु स्वतंत्र रूप से कार्य कर सकती है। ऐसा इसलिए है, क्योंकि एकत्रीकरण में, एक वस्तु दूसरी वस्तु का उपयोग करती है।
क्यू # 3) हम जावा में संरचना का उपयोग क्यों करते हैं?
उत्तर: रचना हमें मौजूदा कोड का पुन: उपयोग करने की अनुमति देती है जिससे कोड जटिलता कम हो जाती है और कोड में कीड़े भी कम हो जाते हैं। रचना का उपयोग करके हम केवल उसी चीज़ का पुनः उपयोग कर सकते हैं जो हमें ऑब्जेक्ट से चाहिए और इसकी दृश्यता को भी नियंत्रित करता है।
Q # 4) एसोसिएशन का उपयोग क्या है?
उत्तर: एसोसिएशन जावा में in-a ’संबंध का प्रतिनिधित्व करता है। जावा में एसोसिएशन का उपयोग तब किया जाता है जब एक ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट की कार्यक्षमता और सेवाओं का उपयोग करने की आवश्यकता होती है। रचना और एकत्रीकरण एसोसिएशन के दो रूप हैं।
Q # 5) क्या संरचना वंशानुक्रम से बेहतर है?
उत्तर: यह OOP सिस्टम पर निर्भर करता है कि हम कोडिंग कर रहे हैं। यदि हम अपने पूरे जीवनकाल में IS-A संबंध वाली वस्तुओं को अनुप्रयोग में प्रस्तुत कर सकते हैं तो उत्तराधिकार एक बेहतर विकल्प है। जब हम कोड का पुन: उपयोग करना चाहते हैं और आईएस-ए संबंध के साथ ऑब्जेक्ट सिस्टम का प्रतिनिधित्व नहीं कर सकते हैं तो रचना बेहतर है।
इसके अलावा, जब हम बैक-एंड कक्षाओं को परेशान किए बिना अक्सर फ्रंट-एंड क्लासेस को बदलना चाहते हैं, तो रचना बेहतर होती है क्योंकि विरासत के मामले में मामूली बदलाव ज्यादातर संपूर्ण विरासत पदानुक्रम को प्रभावित करते हैं।
निष्कर्ष
इस ट्यूटोरियल में, हमने जावा में एचएएस-ए संबंध पर चर्चा की है। संरचना और एकत्रीकरण ऐसे रूप हैं जो ation HAS-A ’संबंध को लागू करते हैं। हमने इन दोनों कार्यान्वयनों की तुलना की है।
जबकि दोनों में एक और वर्ग की वस्तुएं हैं, रचना वस्तु का मालिक है जबकि एकत्रीकरण केवल वस्तु का उपयोग करता है। हमने जावा में रचना और विरासत की तुलना भी की है।
=> जावा प्रशिक्षण ट्यूटोरियल के ए-जेड को देखने के लिए यहां देखें।
अनुशंसित पाठ
- Java SWING Tutorial: कंटेनर, कंपोनेंट्स एंड इवेंट हैंडलिंग
- जावा ट्यूटोरियल फॉर बिगिनर्स: 100+ हैंड्स-ऑन जावा वीडियो ट्यूटोरियल
- जावा में ट्रीमैप - ट्यूटोरियल जावा ट्रीपैप उदाहरणों के साथ
- जावा फ्लोट ट्यूटोरियल प्रोग्रामिंग उदाहरण के साथ
- स्ट्रिंग स्ट्रिंग बफर और स्ट्रिंग बिल्डर ट्यूटोरियल के साथ जावा स्ट्रिंग
- जावा परिनियोजन: जावा जार फ़ाइल का निर्माण और निष्पादन
- जावा क्लास बनाम ऑब्जेक्ट - जावा में क्लास और ऑब्जेक्ट का उपयोग कैसे करें
- जावा बेसिक्स: जावा सिंटैक्स, जावा क्लास और कोर जावा कॉन्सेप्ट