java composition what is composition java
Tento výukový program Java Composition vysvetľuje, čo je to zloženie a agregácia v Jave a rozdiely medzi nimi:
V posledných pár tutoriáloch sme sa podrobne venovali dedičstvu v Jave. Dedenie v Jave je typ vzťahu „IS-A“, ktorý naznačuje, že jeden objekt „je akýmsi“ iným objektom. Napríklad, auto je typ alebo druh vozidla.
Objektovo orientované programovanie poskytuje ďalší typ vzťahu, ktorý sa nazýva vzťah „HAS-A“. V tomto tutoriáli si podrobne rozoberieme vzťah has-a.
=> Navštívte tu a dozviete sa Java od začiatku.
Čo sa dozviete:
- Výukový program pre zloženie Java
- Asociácia v Jave
- Rozdiely medzi zložením vs zložením
- Zloženie vs. Dedenie
- Záver
Výukový program pre zloženie Java
Vzťah ‘má-a‘ v Jave sa nazýva Zloženie . Použitím vzťahu „has-a“ alebo zloženia zaisťujeme opätovné použitie kódu v našich programoch.
Takže tým, že naše programy používame vzťah „má-a“, robíme tu to, že náš program núti používať inštanciu triedy priamo namiesto toho, aby sme ju „rozširovali“ z inej triedy, ako to robíme v prípade dedičstva.
Nasledujúci diagram zobrazuje vzťahy „is-a“ a „has-a“ v prostredí Java.
Ako je zrejmé z vyššie uvedeného diagramu, Car and Vehicle zdieľajú vzťah „IS-A“, keďže auto je vozidlo. Preto vytvoríme objekt automobilu z existujúceho objektu vozidla pridaním ďalších charakteristík.
Na diagrame Car and Engine zdieľajú vzťah „má-a“. Auto má vždy motor. To, čo tu robíme, je, že nerozširujeme vlastnosti objektu Engine, ale používame priamo objekt Engine. To sa deje v Jave pomocou zloženia.
Preto spolu so zapuzdrením, abstrakciou a polymorfizmom sú dedičnosť a zloženie tiež dôležitými vlastnosťami objektovo orientovaného programovania (OOP).
Vzťahy typu „has-a“ zvyčajne určujú, či má určitý objekt iný objekt. To, čo tu robíme, je teda to, že znovu použijeme objekt, a tým znížime duplikáciu kódu a chyby. Je to tak preto, lebo v našej triede používame úplne vyvinutý a testovaný objekt.
Začnime diskusiou o špeciálnom vzťahu zvanom „Asociácia“ v Jave, od ktorého odvodzujeme zloženie a ďalšie vzťahy.
Asociácia v Jave
Asociáciu v Jave možno definovať ako vzťah, ktorý existuje medzi dvoma jednotlivými triedami pomocou ich samostatných objektov. Asociácia v Jave môže mať nasledujúce vzťahy.
- Jeden na jedného: Jeden objekt priradený presne k jednému objektu.
- Individuálne: Jeden objekt môže byť spojený s mnohými objektmi.
- Mnoho na jedného: K jednému objektu je možné priradiť veľa objektov.
- Mnoho k mnohým: Viac ako jeden objekt spojený s viac ako jedným ďalším objektom.
Keď sa vytvorí vzťah, obsahujúce objekty (objekty, ktorých členmi sú iné objekty) komunikujú s obsiahnutým objektom s cieľom opätovného použitia ich vlastností a charakteristík. Asociácia má dve formy, tj zloženie a agregácia.
Toto ukazuje nasledujúci obrázok:
Ako je zrejmé z vyššie uvedeného diagramu, asociácia zahŕňa zloženie a agregáciu. Zloženie je konkrétnejší pojem a agregácia je všeobecnejšia ako zloženie. Tieto formy sú založené na tom, aký typ vzťahov podporujú.
Predtým, ako prejdeme k zloženiu a agregácii, implementujme program Java na demonštráciu asociácie v Jave.
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()); } }
Výkon:
Vyššie uvedený program demonštruje asociáciu v prostredí Java. Tu máme triedny účet, ktorý má názov banky a číslo účtu ako súkromných členov. Ďalej tu máme triedu zamestnancov. Vieme, že každý zamestnanec bude mať číslo účtu na zloženie mzdy atď.
To, čo robíme, je, že namiesto toho, aby sme napísali inú triedu alebo metódu na prečítanie podrobností o bankovom účte zamestnanca, priamo znova použijeme existujúcu triedu účtu. Inými slovami, priradíme objekt účtu k zamestnancovi, aby sme získali podrobnosti o bankovom účte zamestnanca. Vyššie uvedený príklad to presne robí.
Zloženie v Jave
Zloženie je jednou z foriem združenia. Zloženie možno definovať ako združenie, v ktorom jedna trieda obsahuje inú triedu a táto obsiahnutá trieda závisí od obsahujúcej triedy takým spôsobom, že nemôže existovať nezávisle.
Vyššie sme videli príklad vzťahu typu has-a. V tom sme mali objekt automobilu, ktorý mal motor. Toto je príklad zloženia. V takom prípade nemôže motor bez automobilu existovať samostatne.
Zloženie je v porovnaní s agregáciou obmedzenejšie. Skladba nie je funkciou Java. Považuje sa to hlavne za dizajnovú techniku.
Nasledujúca schéma zobrazuje príklad zloženia.
najlepší bezplatný sťahovač hudby pre Android
V tomto prípade má zamestnanec bankový účet. Vieme, že bankový účet nemôže existovať bez majiteľa účtu. Bez majiteľa účtu sa stáva neaktívnym.
Pomocou kompozície môžeme modelovať objekty, ktorých členmi sú ďalšie objekty, a tieto objekty majú medzi sebou vzťah „has-a“.
V kompozícii je objekt obsiahnutý v inom objekte, teda keď je obsah, ktorý ho obsahuje, zničený; druhý predmet je tiež zničený
Na vzťah kompozície sa teda môžeme pozerať ako na vzťah „časti celého“, v ktorom časť neexistuje bez celý . Preto keď je zničený celok, je odstránená aj jeho časť. To znamená, že celok má s časťou pevnejší vzťah.
Príklad zloženia Java
Ďalej je uvedený program na demonštráciu zloženia.
Systém, ktorý sme tu použili, je znázornený nižšie.
Takže v tomto programe máme tri triedy, ako je uvedené vyššie. Honda je auto, takže sa rozširuje od triedy automobilov. CarEngine Object sa používa v triede Honda.
Program je uvedený nižšie.
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(); } }
Výkon:
Výstup teda ukazuje vlastnosti automobilov Honda. Ukazuje tiež výstup metódy z triedy CarEngine, ktorú sme použili ako člena triedy Honda pomocou kompozície.
Tento program ukázal, ako môžeme použiť zloženie v programe Java.
Agregácia v prostredí Java
Agregácia je ďalšou formou združovania v prostredí Java. Ale v prípade agregácie umožňuje iba jednosmerný vzťah medzi objektmi. Napríklad, zamestnanec má adresu bydliska. Ale naopak, domáca adresa má zamestnancov, neznie to dobre.
Podobne má študent adresu, ale „adresa má študenta“ nedáva zmysel. Rovnako ako zloženie, aj agregácia zobrazuje vzťah „má“. To znamená, že trieda obsahuje objekt inej triedy.
Nasledujúci diagram predstavuje príklad agregácie.
Vyššie uvedený príklad možno interpretovať tak, že akadémia má zamestnancov a študentov.
Kedy presne by sme teda mali ísť na agregáciu?
Mali by sme použiť agregáciu, keď nie je potrebné používať vzťah „je-a“ alebo dedičstvo. Ak dokážeme zachovať vzťah „je-a“ počas celej aplikácie alebo počas životnosti objektu, môžeme implementovať dedenie na opätovné použitie kódu.
V opačnom prípade je najlepšie použiť agregáciu pre opätovné použitie kódu. Poďme teraz implementovať ukážkovú agregáciu v Jave.
Príklad systému, ktorý sme použili, je nasledovný:
Máme tu triedu inštitút. Ústav môže mať rôzne oddelenia alebo pobočky. Každá pobočka má zase niekoľko študentov. V tomto programe spočítame celkový počet študentov v celom ústave. Na tento účel používame agregáciu. Inštitút triedy obsahuje objekt Branch.
Objekt vetvy má objekt študenta. Takže v triede Inštitútu pomocou objektu Pobočka spočítame celkový počet študentov. Na tento účel používame zoznam pobočiek v ústave.
Program Java je uvedený nižšie.
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()); } }
Výkon:
Agregácia a zloženie sú teda dve formy asociácie, o ktorých sme tu hovorili. Keď nepotrebujeme alebo nemôžeme predstavovať vzťah „je-a“ medzi objektmi, môžeme ísť o kompozíciu, ak chceme pevnejší vzťah medzi objektmi, alebo agregáciu, ak chceme jednosmerný vzťah.
vodopád model životného systému vývojový cyklus
Agregácia aj zloženie nám pomáhajú opätovne použiť kód v Jave.
Rozdiely medzi zložením vs zložením
Zloženie aj agregácia sú súčasťou asociácie, ktorá zobrazuje vzťah „has-a“. Obidve tieto techniky nie sú funkciami jazyka Java a nemajú priamy spôsob implementácie, ale môžu byť implementované pomocou kódu Java.
Zloženie a agregácia nám umožňujú znova použiť kód. Opätovné použitie kódu znižuje chyby v kóde a tiež zvyšuje stabilitu aplikácie.
Nižšie sú uvedené niektoré rozdiely medzi agregáciou a zložením.
Agregácia | Zloženie |
---|---|
Agregácia umožňuje samostatnú existenciu podradených objektov alebo obsiahnutých objektov. Napríklad vo vzťahu, v ktorom má škola zamestnancov, ak školu odstránime, zamestnanci zostanú a môžu fungovať sami. | V zložení nemôže obsiahnutý objekt existovať samostatne. Napríklad auto má motor. Ak vymažeme Car, trieda Engine nemôže fungovať sama. |
Agregácia je vzťah „má“. | Kompozícia je formou vzťahu „má“, ale je považovaná za súčasť celku. |
Agregácia má iba jednu k jednej asociácii. | Zloženie umožňuje ďalšie vzťahy poskytované v združení. |
Agregácia má slabú asociáciu medzi objektmi. | Kompozícia má silnú asociáciu medzi objektmi. |
Zloženie vs. Dedenie
Zloženie | Dedenie |
---|---|
Kompozícia zobrazuje vzťah „Has-A“. | Dedenie predstavuje vzťah „Is-A“. |
Ľahšie meniť implementáciu obsahujúcich objektov. | Keď jedna implementácia zmení celú hierarchiu dedičstva, zmení sa to. |
Má dynamické viazanie alebo časovú väzbu. | Má statickú alebo kompilačnú časovú väzbu. |
Rozhranie triedy front-end je možné ľahko zmeniť bez toho, aby to malo vplyv na triedy back-end. | Akékoľvek zmeny v metódach alebo prototypoch ovplyvňujú všetky triedy. |
Kompozícia sa používa, keď nepotrebujeme k existujúcemu objektu pridávať ďalšie vlastnosti alebo vlastnosti. | Dedenie sa používa, ak sa do zdedených tried majú pridať ďalšie funkcie. |
často kladené otázky
Otázka č. 1) Aký je rozdiel medzi vzťahom „IS - A“ a „HAS - A“?
Odpoveď: V objektovo orientovanom programovaní vzťahy IS-A predstavujú dedičstvo, v ktorom je podradená trieda „akousi“ rodičovskou triedou. Vzťah Has-a je vzťahom „celku“, ktorý je reprezentovaný zložením a agregáciou. Dedičstvo je statické viazanie, zatiaľ čo zloženie je dynamické viazanie.
Otázka 2) Čo je agregácia a zloženie v prostredí Java?
Odpoveď: V zložení sú dva objekty pevne spojené, t. J. Keď je zničený objekt (obsahujúci objekt), ktorý vlastní ďalší objekt (obsiahnutý objekt), potom je druhý objekt automaticky zničený, pretože nemôže samostatne fungovať.
V agregácii môžu obsahujúci a obsiahnutý objekt fungovať nezávisle. Je to tak preto, lebo pri agregácii jeden objekt používa iný objekt.
Otázka č. 3) Prečo používame zloženie v Jave?
Odpoveď: Zloženie nám umožňuje opätovne použiť existujúci kód, čím sa znižuje zložitosť kódu a tiež sa znižujú chyby v kóde. Pomocou kompozície môžeme z objektu znova použiť iba to, čo potrebujeme, a tiež kontrolovať jeho viditeľnosť.
Otázka č. 4) Aké je použitie asociácie?
Odpoveď: Association predstavuje „vzťah typu„ má “v Jave. Asociácia v Jave sa používa, keď jeden objekt potrebuje využívať funkčnosť a služby iného objektu. Zloženie a agregácia sú dve formy asociácie.
Otázka č. 5) Je zloženie lepšie ako dedičstvo?
Odpoveď: Závisí to od systému OOP, ktorý kódujeme. Ak môžeme v aplikácii reprezentovať objekty so vzťahom IS-A počas celej ich životnosti, potom je dedičstvo lepšou voľbou. Keď chceme znova použiť kód a nemôžeme reprezentovať objektový systém so vzťahom IS-A, potom je zloženie lepšie.
Tiež, keď chceme často meniť front-endové triedy bez narušenia back-endových tried, potom je zloženie lepšie, pretože v prípade dedičstva mierne zmeny väčšinou ovplyvnia celú hierarchiu dedičstva.
Záver
V tomto tutoriáli sme diskutovali o vzťahu HAS-A v Jave. Zloženie a agregácia sú formy, ktoré implementujú vzťah „HAS-A“. Porovnali sme obe tieto implementácie.
Aj keď oba obsahujú objekty inej triedy, objekt vlastní kompozícia, zatiaľ čo agregácia objekt jednoducho používa. Porovnali sme tiež zloženie a dedičnosť v Jave.
=> Ak chcete vidieť A-Z výučbových kurzov Java, pozrite si tu.
Odporúčané čítanie
- Výukový program Java SWING: Kontajnery, komponenty a spracovanie udalostí
- Výukový program JAVA pre začiatočníkov: viac ako 100 praktických výučbových programov Java Video
- TreeMap In Java - návod s príkladmi Java TreeMap
- Výukový program Java Float s príkladmi programovania
- Výukový program Java String s programom String Buffer a String Builder
- Nasadenie Java: Vytvorenie a vykonanie súboru Java JAR
- Objekt Java Class Vs - Ako používať triedy a objekty v Jave
- Základy jazyka Java: Java Syntax, trieda Java a základné koncepty Java