java composition what is composition java
Ovaj tutorial Java Composition objašnjava što je Composition and Aggregation u Javi i razlike između njih:
U posljednjih nekoliko vodiča detaljno smo razgovarali o nasljeđivanju u Javi. Nasljeđivanje u Javi vrsta je odnosa “IS-A” koja ukazuje da je jedan objekt ‘vrsta’ drugog objekta. Na primjer, automobil je vrsta ili vrsta vozila.
Objektno orijentirano programiranje pruža još jedan tip odnosa koji se naziva odnos “HAS-A”. U ovom uputstvu detaljno ćemo razmotriti odnos has-a-odnosa.
=> Posjetite ovdje da biste naučili Javu ispočetka.
Što ćete naučiti:
- Vodič za sastav Java
- Udruženje u Javi
- Razlike između agregacije i sastava
- Sastav vs. Nasljeđivanje
- Zaključak
Vodič za sastav Java
U Javi se naziva odnos ‘ima-a’ Sastav . Korištenjem odnosa ili sastava 'ima-a' osiguravamo ponovnu upotrebu koda u našim programima.
Dakle, čineći da naši programi koriste odnos „ima-a“, ono što ovdje radimo jest da svoj program natjeramo da izravno koristi instancu klase, umjesto da je „proširuje“ iz druge klase kao što je to slučaj u slučaju nasljeđivanja.
Dijagram u nastavku prikazuje veze 'je-a' i 'ima-a' u Javi.

Kao što se vidi iz gornjeg dijagrama, automobil i vozilo dijele odnos „IS-A“ jer je automobil vozilo. Stoga kreiramo automobilski objekt od postojećeg objekta vozila dodajući mu više karakteristika.
Na dijagramu, automobil i motor dijele odnos 'ima-a'. Automobil uvijek ima Motor. Dakle, ono što ovdje radimo je da ne proširujemo svojstva objekta Engine, već izravno koristimo objekt Engine. To se radi na Javi pomoću sastava.
Stoga su, uz enkapsulaciju, apstrakciju i polimorfizam, nasljeđivanje i sastav također važne značajke Objektno orijentiranog programiranja (OOP).
Odnosi ‘ima-a’ obično određuju ima li određeni objekt drugi objekt. Dakle, ono što ovdje radimo je da ponovno koristimo objekt i tako smanjujemo dupliciranje koda kao i pogrešaka. To je zato što u svojoj klasi koristimo potpuno razvijen i testiran objekt.
Počnimo s raspravom o posebnoj relaciji koja se na Javi naziva 'Udruženje' iz koje izvodimo sastav i druge odnose.
Udruženje u Javi
Asocijacija u Javi može se definirati kao veza koja postoji između dviju pojedinačnih klasa koristeći njihove zasebne objekte. Udruživanje u Javi može imati sljedeće odnose.
- Jedan na jedan: Jedan objekt povezan s točno jednim objektom.
- Jedan prema mnogima: Jedan objekt može biti povezan s mnogim objektima.
- Mnogo prema jednom: Mnogi se objekti mogu povezati s jednim objektom.
- Mnogo-mnogima: Više objekata povezano s više od jednog drugog objekta.
Kada se uspostavi odnos, sadržajni objekti (objekti koji imaju druge predmete kao svoje članove) komuniciraju s sadržanim objektom kako bi ponovno iskoristili njihova svojstva i karakteristike. Udruženje ima dva oblika, tj. Sastav i agregaciju.
Sljedeća slika pokazuje ovo:

Kao što se vidi iz gornjeg dijagrama, Udruženje uključuje sastav i agregaciju. Sastav je specifičniji pojam, a agregacija je općenitija od sastava. Ti se oblici temelje na vrsti odnosa koju podržavaju.
Prije nego što prijeđemo na Sastav i agregaciju, provedimo Java program za demonstraciju udruživanja u Javi.
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()); } }Izlaz:

Gornji program pokazuje povezanost u Javi. Ovdje imamo račun klase koji ima ime banke i broj računa kao privatni članovi. Dalje, imamo tečaj zaposlenika. Znamo da će svaki zaposlenik imati broj računa za polaganje plaće itd.
Dakle, ono što mi radimo je, umjesto da napišemo drugu klasu ili metodu za čitanje u pojedinostima bankovnog računa zaposlenika, izravno ponovno koristimo postojeću klasu Račun. Drugim riječima, objekt Računa povezujemo sa Zaposlenikom kako bismo dobili podatke o bankovnom računu Zaposlenika. Gornji primjer upravo to čini.
Sastav na Javi
Sastav je jedan od oblika udruživanja. Sastav se može definirati kao asocijacija u kojoj jedna klasa sadrži drugu klasu, a ona sadrži ovisnu klasu na takav način da ne može samostalno postojati.
Iznad smo vidjeli primjer odnosa koji ima odnos. U tome smo imali automobilski objekt koji ima motor. Ovo je primjer sastava. U tome motor ne može samostalno postojati bez automobila.
Sastav je ograničeniji u usporedbi s agregacijom. Sastav nije značajka Java. Uglavnom se smatra tehnikom dizajna.
Sljedeći dijagram prikazuje primjer sastava.

youtube u mp3 pretvarač s uređivanjem
U ovom slučaju zaposlenik ima bankovni račun. Znamo da bankovni račun ne može postojati bez vlasnika računa. Bez vlasnika računa postaje neaktivan.
Kompozicijom možemo modelirati objekte koji imaju druge predmete kao svoje članove i ti objekti imaju međusobni odnos „ima-a“.
Po sastavu, objekt je sadržan u drugom objektu, dakle kada je predmet koji je uništen; uništen je i drugi objekt
Tako odnos kompozicije možemo promatrati kao odnos 'dijela cjeline' u kojem dio ne postoji bez cijela . Dakle, kad se cjelina uništi, briše se i dio. To znači da cjelina ima jači odnos s dijelom.
Primjer Java kompozicije
Dolje je dan program za demonstraciju kompozicije.
Sustav koji smo ovdje koristili predstavljen je u nastavku.

Dakle, u ovom programu imamo tri razreda kako je gore prikazano. Honda je automobil pa se proteže od klase automobila. CarEngine Object koristi se u klasi Honda.
Program je dan u nastavku.
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(); } }Izlaz:

Tako izlaz pokazuje svojstva Honda automobila. Također prikazuje rezultate metode iz klase CarEngine koju smo koristili kao član Honda klase koristeći sastav.
Ovaj je program pokazao kako možemo koristiti kompoziciju u Java programu.
Agregacija u Javi
Agregacija je drugi oblik udruživanja u Javi. Ali u slučaju agregacije, dopušta samo jednosmjerni odnos između predmeta. Na primjer, zaposlenik ima kućnu adresu. Ali obrnuto, kućna adresa ima zaposlenike, ne zvuči dobro.
Slično tome, student ima adresu, ali 'adresa ima učenika' nema smisla. Kao i kompozicija, agregacija također prikazuje odnos 'ima-a'. To znači da klasa sadrži objekt druge klase.
Dijagram u nastavku predstavlja primjer agregiranja.

Gornji primjer može se protumačiti kao da kolegij ima osoblje i studente.
Pa kada bismo točno trebali ići na agregaciju?
Trebali bismo koristiti agregaciju kada nema potrebe za korištenjem odnosa 'je-a' ili nasljeđa. Ako možemo održavati odnos 'je-a' tijekom aplikacije ili vijeka trajanja objekta, tada možemo implementirati nasljeđivanje za ponovnu upotrebu koda.
Inače je najbolje koristiti agregaciju za ponovnu upotrebu koda. Primijenimo sada agregaciju primjera u Javi.
Primjer sustava koji smo koristili je sljedeći:

Ovdje imamo nastavu 'Instituta'. Institut može imati različite odjele ili podružnice. Svaka grana zauzvrat ima nekoliko učenika. U ovom ćemo programu računati ukupan broj studenata na cijelom institutu. U tu svrhu koristimo agregaciju. Klasa Institute sadrži objekt Branch.
test slučajevi u primjerima za testiranje softvera
Objekt grane ima objekt učenika. Dakle, u klasi Instituta pomoću objekta Branch računamo ukupan broj učenika. U tu svrhu koristimo popis podružnica u institutu.
Java program je dan u nastavku.
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()); } } Izlaz:

Stoga su agregacija i sastav dva oblika udruživanja o kojima smo ovdje razgovarali. Kada ne trebamo ili ne možemo predstaviti odnos „je-a“ između objekata, onda možemo ići na kompoziciju ako želimo jači odnos između predmeta ili agregaciju ako želimo jednosmjernu vezu.
I agregacija i sastav pomažu nam u ponovnoj upotrebi koda u Javi.
Razlike između agregacije i sastava
Sastav i agregacija dijelovi su Udruženja koji prikazuje odnos 'ima-a'. Obje tehnike nisu Java značajke i nemaju izravan način implementacije, ali se mogu implementirati pomoću Java koda.
Sastav i agregacija omogućuju nam ponovnu upotrebu koda. Ponovna upotreba koda smanjuje greške u kodu, a također čini aplikaciju stabilnijom.
U nastavku su navedene neke razlike između agregacije i sastava.
| Zbrajanje | Sastav |
|---|---|
| Agregacija omogućuje neovisno postojanje podređenih predmeta ili sadržanih predmeta. Na primjer u vezi u kojoj škola ima zaposlenike, ako školu izbrišemo, zaposlenici će ostati i moći će samostalno funkcionirati. | U sastavu, sadržani objekt ne može postojati neovisno. Na primjer automobil ima Motor. Ako izbrišemo Car, klasa motora ne može samostalno funkcionirati. |
| Agregacija je odnos ‘ima-ima’. | Sastav je oblik odnosa 'ima-a', ali se promatra kao odnos dijela-cjeline. |
| Agregacija ima samo jedno povezivanje. | Sastav omogućuje druge odnose osigurane u udruzi. |
| Agregacija ima slabu povezanost između objekata. | Sastav ima snažnu povezanost između predmeta. |
Sastav vs. Nasljeđivanje
| Sastav | Nasljeđivanje |
|---|---|
| Sastav prikazuje odnos ‘Ima-A’. | Nasljeđivanje predstavlja odnos „Je-A“. |
| Jednostavnije je promijeniti implementaciju sadrzaja objekata. | Kada se jedna implementacija promijeni, mijenja se cijela hijerarhija nasljeđivanja. |
| Ima dinamičko ili pokretanje vremenskog vezanja. | Ima statično ili vremensko vezivanje kompajliranja. |
| Sučelje prednje klase može se lako mijenjati bez utjecaja na pozadinske klase. | Sve promjene u metodama ili prototipovima utječu na sve klase. |
| Sastav se koristi kada ne trebamo dodati više karakteristika ili značajki postojećem objektu. | Nasljeđivanje se koristi kada se u naslijeđene klase treba dodati više značajki. |
Često postavljana pitanja
P # 1) Koja je razlika između odnosa „JESTE - A“ i „IMA - A“?
Odgovor: U objektno orijentiranom programiranju, relacije IS-A predstavljaju nasljeđivanje u kojem je podređena klasa 'vrsta' roditeljske klase. Odnos Has-a odnos je 'dio-a-cjeline' koji je predstavljen sastavom i agregacijom. Nasljeđivanje je statično vezanje, dok je Kompozicija dinamičko vezanje.
P # 2) Što je agregiranje i sastav u Javi?
Odgovor: U kompoziciji su dva objekta čvrsto povezana, tj. Kada je objekt (koji sadrži objekt) koji posjeduje drugi objekt (sadržani objekt) uništen, tada se drugi objekt automatski uništava jer ne može samostalno samostalno funkcionirati.
U agregaciji sadržavajući i sadržani objekt mogu funkcionirati neovisno. To je zato što u agregaciji jedan objekt koristi drugi objekt.
P # 3) Zašto koristimo Composition u Javi?
Odgovor: Sastav nam omogućuje ponovnu upotrebu postojećeg koda, smanjujući tako složenost koda, a također smanjuje greške u kodu. Korištenjem kompozicije možemo ponovno upotrijebiti samo ono što nam treba od objekta i također kontrolirati njegovu vidljivost.
P # 4) Kakva je korist od udruživanja?
Odgovor: Udruženje predstavlja odnos 'ima-a' u Javi. Udruživanje u Javi koristi se kada jedan objekt treba koristiti funkcionalnost i usluge drugog objekta. Sastav i agregacija dva su oblika udruživanja.
P # 5) Je li sastav bolji od nasljeđivanja?
Odgovor: Ovisimo o OOP sustavu koji kodiramo. Ako objekte s odnosom IS-A možemo predstavljati u aplikaciji, bolja je opcija nasljeđivanje. Kad želimo ponovno koristiti kôd i ne možemo predstaviti objektni sustav s odnosom IS-A, tada je sastav bolji.
Također, kada želimo često mijenjati front-end klase bez ometanja back-end klasa, tada je sastav bolji jer u slučaju nasljeđivanja male promjene uglavnom utječu na cijelu hijerarhiju nasljeđivanja.
Zaključak
U ovom uputstvu raspravljali smo o odnosu HAS-A u Javi. Sastav i agregacija oblici su koji provode odnos ‘HAS-A’. Usporedili smo obje ove implementacije.
Iako obje sadrže objekte druge klase, kompozicija posjeduje objekt, dok agregacija jednostavno koristi objekt. Također smo uspoređivali sastav i nasljedstvo u Javi.
=> Ovdje pogledajte kako biste vidjeli A-Z vodiča za Java obuku.
Preporučena literatura
- Java SWING Vodič: Spremnici, komponente i upravljanje događajima
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala
- TreeMap u Javi - Vodič uz primjere Java TreeMap
- Vodič za Java Float s primjerima programiranja
- Java string sa String Buffer-om i String Builder Tutorial
- Implementacija Jave: Izrada i izvršavanje Java JAR datoteke
- Java Class Vs Objekt - Kako koristiti klasu i objekt u Javi
- Osnove Java-a: Java sintaksa, Java Class i osnovni Java koncepti