java composition what is composition java
Acest tutorial Java Composition explică ce este Compoziție și agregare în Java și diferențele dintre acestea:
În ultimele două tutoriale, am discutat în detaliu moștenirea în Java. Moștenirea în Java este un tip de relație „IS-A” care indică faptul că un obiect ‘este un fel’ de alt obiect. De exemplu, o mașină este un tip sau un fel de vehicul.
Programarea orientată pe obiecte oferă un alt tip de relație numită relația „HAS-A”. În acest tutorial, vom discuta în detaliu relația are o relație.
=> Vizitați aici pentru a afla Java de la zero.
Ce veți învăța:
- Tutorial de compoziție Java
- Asociere în Java
- Diferențele dintre agregare și compoziție
- Compoziție vs. Moştenire
- Concluzie
Tutorial de compoziție Java
Relația „are-a” din Java se numește Compoziţie . Utilizând relația sau compoziția „are-a” asigurăm reutilizarea codului în programele noastre.
Deci, făcând programele noastre să folosească relația „are-a”, ceea ce facem aici este că facem ca programul nostru să folosească o instanță dintr-o clasă direct în loc să o „extindă” de la o altă clasă, așa cum facem în caz de moștenire.
Diagrama de mai jos descrie atât relațiile „este-a”, cât și „are-a” în Java.
După cum se vede din diagrama de mai sus, Mașina și vehiculul împărtășesc relația „IS-A” întrucât o mașină este un vehicul. Prin urmare, creăm un obiect auto din obiectul vehiculului existent adăugându-i mai multe caracteristici.
În diagramă, Car and Engine împărtășesc relația „Are-a”. O mașină are întotdeauna un motor. Deci, ceea ce facem aici este că nu extindem proprietățile obiectului Motor, ci îl folosim direct. Acest lucru se face în Java folosind compoziția.
Prin urmare, împreună cu încapsularea, abstractizarea și polimorfismul, moștenirea și compoziția sunt, de asemenea, caracteristici importante ale programării orientate pe obiecte (OOP).
Relațiile „are-a” determină de obicei dacă un anumit obiect are un alt obiect. Deci, ceea ce facem aici este reutilizarea unui obiect și astfel reducem duplicarea codului, precum și erorile. Acest lucru se datorează faptului că folosim un obiect complet dezvoltat și testat în clasa noastră.
Să începem cu discuția despre o relație specială numită „Asociere” în Java din care derivăm compoziția și alte relații.
Asociere în Java
Asocierea în Java poate fi definită ca o relație care există între două clase individuale folosind obiectele lor separate. Asocierea în Java poate avea următoarele relații.
- Unu la unu: Un obiect asociat cu exact un obiect.
- Unul la mulți: Un obiect poate fi asociat cu multe obiecte.
- Multe la unu: Multe obiecte pot fi asociate unui singur obiect.
- Multe-la-multe: Mai multe obiecte asociate cu mai multe obiecte.
Când se stabilește o relație, obiectele care conțin (obiecte care au alte obiecte ca membri) comunică cu obiectul conținut pentru a reutiliza proprietățile și caracteristicile lor. Asocierea are două forme, adică Compoziție și Agregare.
Figura de mai jos arată acest lucru:
După cum se vede din diagrama de mai sus, Asociația include Compoziție și agregare. Compoziția este un termen mai specific, iar agregarea este mai generală decât compoziția. Aceste forme se bazează pe ce tip de relații susțin.
Înainte de a trece la Compoziție și agregare, să implementăm un program Java pentru a demonstra asocierea în Java.
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()); } }
Ieșire:
Programul de mai sus demonstrează o asociere în Java. Aici, avem un cont de clasă care are un nume de bancă și un număr de cont ca membri privați. Apoi, avem o clasă de angajați. Știm că fiecare angajat va avea un număr de cont pentru depunerea salariului etc.
Deci, ceea ce facem este, în loc să scriem o altă clasă sau metodă de citit în detaliile contului bancar al angajatului, reutilizăm direct clasa de cont existentă. Cu alte cuvinte, asociem un obiect de cont cu angajatul, astfel încât să obținem detaliile contului bancar al angajatului. Exemplul de mai sus face exact acest lucru.
Compoziție în Java
Compoziția este o formă de asociere. Compoziția poate fi definită ca o asociație în care o clasă conține o altă clasă și această clasă conținută depinde de clasa conținătoare în așa fel încât să nu poată exista independent.
Am văzut un exemplu de relație de mai sus. În aceasta, am avut un obiect de mașină care are un motor. Acesta este un exemplu de compoziție. În acest sens, un motor nu poate exista independent fără o mașină.
Compoziția este mai restricționată în comparație cu Agregarea. Compoziția nu este o caracteristică Java. Este considerată în principal o tehnică de proiectare.
Următoarea diagramă prezintă un exemplu de compoziție.
faza de testare a ciclului de viață al dezvoltării software-ului
În acest sens, un angajat are un cont bancar. Știm că un cont bancar nu poate exista fără un titular de cont. Fără un titular de cont, acesta devine inactiv.
Putem folosi compoziția pentru a modela obiecte care au alte obiecte ca membri și aceste obiecte au o relație „are-o” între ele.
În compoziție, un obiect este conținut într-un alt obiect, deci atunci când obiectul conținut este distrus; celălalt obiect este, de asemenea, distrus
Deci putem privi relația de compoziție ca o relație „parte dintr-un întreg” în care parte nu există fără întreg . Prin urmare, atunci când întregul este distrus, și partea este ștearsă. Aceasta înseamnă că întregul are o relație mai puternică cu partea.
Exemplu de compoziție Java
Mai jos este prezentat programul pentru a demonstra compoziția.
Sistemul pe care l-am folosit aici este reprezentat ca mai jos.
Deci, în acest program, avem trei clase așa cum se arată mai sus. Honda este o mașină, deci se extinde din clasa Mașină. CarEngine Object este utilizat în clasa Honda.
Programul este prezentat mai jos.
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(); } }
Ieșire:
Astfel, ieșirea arată proprietățile mașinilor Honda. De asemenea, arată rezultatul unei metode din clasa CarEngine pe care am folosit-o ca membru al clasei Honda folosind compoziția.
Acest program a arătat cum putem folosi compoziția într-un program Java.
Agregare în Java
Agregarea este o altă formă de asociere în Java. Dar, în cazul agregării, aceasta permite doar relația unidirecțională dintre obiecte. De exemplu, un angajat are o adresă de domiciliu. Dar invers, adresa de acasă are angajați, nu sună corect.
În mod similar, un student are o adresă, dar „adresa are un student” nu are sens. La fel ca și compoziția, agregarea descrie și relația „are-a”. Aceasta înseamnă că o clasă conține un obiect al altei clase.
Diagrama de mai jos reprezintă un exemplu de agregare.
Exemplul de mai sus poate fi interpretat deoarece Colegiul are personal și studenți.
Atunci când anume ar trebui să mergem pentru agregare?
site web furnizor de date pentru oferte online
Ar trebui să folosim agregarea atunci când nu este nevoie să folosim o relație „sau este o moștenire”. Dacă putem menține relația „este-o” pe tot parcursul aplicației sau a duratei de viață a unui obiect, atunci putem implementa moștenirea pentru reutilizarea codului.
În caz contrar, este mai bine să utilizați agregarea pentru reutilizarea codului. Să implementăm acum un exemplu de agregare în Java.
Exemplul de sistem pe care l-am folosit este următorul:
Aici avem o clasă de „Institut”. Institutul poate avea diverse departamente sau sucursale. Fiecare ramură are la rândul ei mai mulți studenți. În acest program, vom număra numărul total de studenți din întregul institut. Folosim agregarea în acest scop. Clasa Institute conține obiectul Sucursală.
Obiectul ramură are un obiect student. Așadar, la clasa Institutului folosind obiectul Sucursală, numărăm numărul total de studenți. În acest scop, folosim o listă de sucursale dintr-un institut.
Programul Java este prezentat mai jos.
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()); } }
Ieșire:
Prin urmare, agregarea și compoziția sunt două forme de asociere pe care le-am discutat aici. Atunci când nu avem nevoie sau nu putem reprezenta relația „este-o” între obiecte, atunci putem alege compoziția dacă dorim o relație mai puternică între obiecte sau agregare dacă vrem o relație unidirecțională.
Atât agregarea, cât și compoziția ne ajută să refolosim codul în Java.
Diferențele dintre agregare și compoziție
Atât Compoziția, cât și Agregarea sunt părți ale Asociației care descrie o relație „are-a”. Ambele tehnici nu sunt caracteristici Java și nu au o modalitate directă de implementare, dar pot fi implementate folosind cod Java.
Compoziția și agregarea ne permit să refolosim codul. Reutilizarea codului reduce erorile din cod și, de asemenea, face aplicația mai stabilă.
Mai jos sunt prezentate câteva diferențe între agregare și compoziție.
Agregare | Compoziţie |
---|---|
Agregarea permite obiectelor copil sau obiectelor conținute să existe independent. De exemplu într-o relație în care școala are angajați, dacă ștergem școala, angajații vor rămâne și pot funcționa singuri. | În compoziție, obiectul conținut nu poate exista independent. De exemplu o mașină are Motor. Dacă ștergem Mașina, clasa Motor nu poate funcționa singură. |
Agregarea este o relație „are-a”. | Compoziția este o formă de relație „are-o”, dar privită ca o relație parte-dintr-un întreg ”. |
Agregarea are o asociere unu la unu. | Compoziția permite alte relații oferite în asociație. |
Agregarea are o asociere slabă între obiecte. | Compoziția are o asociere puternică între obiecte. |
Compoziție vs. Moştenire
Compoziţie | Moştenire |
---|---|
Compoziția descrie relația „Are-A”. | Moștenirea reprezintă relația „Is-A”. |
Mai ușor de schimbat implementarea obiectelor care conțin. | Când o implementare schimbă întreaga ierarhie a moștenirii se schimbă. |
Are o legare dinamică sau de execuție. | Are o legare de timp statică sau de compilare. |
Interfața clasei front-end poate fi schimbată cu ușurință fără a afecta clasele back-end. | Orice modificare a metodelor sau prototipurilor afectează toate clasele. |
Compoziția este utilizată atunci când nu este nevoie să adăugăm mai multe caracteristici sau caracteristici unui obiect existent. | Moștenirea este utilizată atunci când mai multe caracteristici trebuie adăugate claselor moștenite. |
întrebări frecvente
Q # 1) Care este diferența dintre relația „IS - A” și „HAS - A”?
Răspuns: În programarea orientată pe obiecte, relațiile IS-A reprezintă moștenire în care o clasă copil „este un fel” de clasă părinte. Relația „Are o relație” este o relație „parte a întregului”, care este reprezentată de compoziție și agregare. Moștenirea este o legare statică, în timp ce Compoziția este o legare dinamică.
Q # 2) Ce este agregarea și compoziția în Java?
Răspuns: În Compoziție, cele două obiecte sunt strâns cuplate, adică atunci când obiectul (obiect care conține) care deține un alt obiect (obiect conținut) este distrus, atunci celălalt obiect este distrus automat, deoarece nu poate funcționa independent de unul singur.
În agregare, obiectul conținut și obiectul conținut pot funcționa independent. Acest lucru se datorează faptului că, în Agregare, un obiect folosește un alt obiect.
Î. 3) De ce folosim Compoziția în Java?
Răspuns: Compoziția ne permite să refolosim codul existent, reducând astfel complexitatea codului și, de asemenea, reducerea bug-urilor din cod. Folosind compoziția putem reutiliza doar ceea ce avem nevoie de la obiect și, de asemenea, putem controla vizibilitatea acestuia.
Î # 4) La ce folosește Asociația?
Răspuns: Asocierea reprezintă relația „are-a” în Java. Asocierea în Java este utilizată atunci când un obiect trebuie să utilizeze funcționalitatea și serviciile unui alt obiect. Compoziția și agregarea sunt două forme de asociere.
Q # 5) Compoziția este mai bună decât Moștenirea?
Răspuns: Depinde de sistemul OOP pe care îl codificăm. Dacă putem reprezenta obiectele cu relația IS-A pe tot parcursul vieții sale în aplicație, atunci moștenirea este o opțiune mai bună. Când vrem să refolosim codul și nu putem reprezenta sistemul de obiecte cu relația IS-A, atunci compoziția este mai bună.
De asemenea, atunci când vrem să schimbăm frecvent clasele front-end fără a deranja clasele back-end, atunci compoziția este mai bună deoarece, în cazul moștenirii, modificări ușoare afectează în mare parte întreaga ierarhie a moștenirii.
Concluzie
În acest tutorial, am discutat despre relația HAS-A în Java. Compoziția și agregarea sunt formele care implementează relația „HAS-A”. Am comparat ambele implementări.
În timp ce ambele conțin obiecte din altă clasă, compoziția deține obiectul, în timp ce agregarea folosește pur și simplu obiectul. De asemenea, am comparat compoziția și moștenirea în Java.
=> Verificați aici pentru a vedea tutorialele de instruire Java A-Z.
Lectură recomandată
- Tutorial Java SWING: Container, componente și gestionarea evenimentelor
- Tutorial JAVA pentru începători: peste 100 de cursuri video Java practice
- TreeMap în Java - Tutorial cu exemple de TreeMap Java
- Tutorial Java Float cu exemple de programare
- Java String cu buffer de șiruri și tutorial de generare de șiruri
- Implementarea Java: crearea și executarea fișierului Java JAR
- Obiect Java Class Vs - Cum se utilizează clasa și obiectul în Java
- Noțiuni de bază Java: Sintaxă Java, Java Class și concepte de bază Java