java composition what is composition java
Tento výukový program Kompozice Java vysvětluje, co je Kompozice a agregace v Javě, a rozdíly mezi nimi:
V posledních několika cvičeních jsme podrobně diskutovali o dědičnosti v Javě. Dědičnost v Javě je typem vztahu „IS-A“, který naznačuje, že jeden objekt „je jakýmsi“ jiným objektem. Například, auto je typ nebo druh vozidla.
Objektově orientované programování poskytuje další typ vztahu, který se nazývá vztah „HAS-A“. V tomto tutoriálu budeme podrobně diskutovat o vztahu has-a.
=> Navštivte zde a dozvíte se Java od začátku.
Co se naučíte:
- Výukový program pro kompozici Java
- Sdružení v Javě
- Rozdíly mezi složením vs složení
- Složení vs. Dědictví
- Závěr
Výukový program pro kompozici Java
Vztah „has-a“ v Javě se nazývá Složení . Použitím vztahu „has-a“ nebo složení zajišťujeme opětovné použití kódu v našich programech.
Takže tím, že naše programy používáme vztah „má-a“, děláme zde to, že náš program přiměje používat instanci třídy přímo namísto „rozšiřování“ z jiné třídy, jako to děláme v případě dědičnosti.
Níže uvedený diagram zobrazuje vztahy „is-a“ a „has-a“ v Javě.
Jak je patrné z výše uvedeného diagramu, Car and Vehicle sdílejí vztah „IS-A“, protože auto je vozidlo. Proto vytvoříme objekt automobilu z existujícího objektu vozidla přidáním dalších charakteristik.
V diagramu Car and Engine sdílejí vztah „Has-a“. Auto má vždy motor. To, co zde děláme, je to, že nerozšiřujeme vlastnosti objektu Engine, ale používáme přímo objekt Engine. To se provádí v Javě pomocí složení.
Spolu se zapouzdřením, abstrakcí a polymorfismem jsou tedy dědičnost a složení také důležitými rysy objektově orientovaného programování (OOP).
Vztahy „has-a“ obvykle určují, zda určitý objekt má jiný objekt. Takže to, co zde děláme, je to, že znovu použijeme objekt, a tím omezíme duplikaci kódu i chyby. Je to proto, že v naší třídě používáme kompletně vyvinutý a testovaný objekt.
Začněme diskusí o speciální relaci zvané „Sdružení“ v Javě, z níž odvozujeme složení a další vztahy.
Sdružení v Javě
Sdružení v Javě lze definovat jako vztah, který existuje mezi dvěma jednotlivými třídami pomocí jejich samostatných objektů. Asociace v Javě může mít následující vztahy.
- Jeden na jednoho: Jeden objekt přidružený přesně k jednomu objektu.
- One-to-many: Jeden objekt může být spojen s mnoha objekty.
- Mnoho na jednoho: S jedním objektem lze spojit mnoho objektů.
- Mnoho k mnoha: Více než jeden objekt přidružený k více než jednomu dalšímu objektu.
Když je navázán vztah, obsahující objekty (objekty, jejichž členy jsou jiné objekty) komunikují s obsaženým objektem, aby znovu použily své vlastnosti a vlastnosti. Sdružení má dvě formy, tj. Složení a agregaci.
Níže uvedený obrázek ukazuje toto:
Jak je patrné z výše uvedeného diagramu, asociace zahrnuje složení a agregaci. Složení je konkrétnější termín a agregace je obecnější než složení. Tyto formy jsou založeny na tom, jaký typ vztahů podporují.
Než přejdeme ke složení a agregaci, implementujme program Java, který předvede asociaci v Javě.
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ýstup:
Výše uvedený program demonstruje přidružení v Javě. Tady máme účet třídy, který má název banky a číslo účtu jako soukromé členy. Dále máme třídu Zaměstnanec. Víme, že každý zaměstnanec bude mít číslo účtu pro složení platu atd.
Co tedy uděláme, je, že místo psaní další třídy nebo metody, která bude čtena v podrobnostech bankovního účtu zaměstnance, přímo znovu použijeme stávající třídu účtu. Jinými slovy, přidružíme objekt účtu k zaměstnanci, abychom získali podrobnosti o bankovním účtu zaměstnance. Výše uvedený příklad to přesně dělá.
Složení v Javě
Složení je jednou z forem sdružení. Složení lze definovat jako přidružení, ve kterém jedna třída obsahuje jinou třídu a tato obsažená třída závisí na třídě obsahující takovým způsobem, že nemůže existovat samostatně.
Výše jsme viděli příklad vztahu has-a. V tom jsme měli objekt automobilu, který měl motor. Toto je příklad složení. V tomto případě motor bez automobilu nemůže existovat samostatně.
Složení je ve srovnání s agregací omezenější. Složení není funkcí Java. Považuje se to hlavně za konstrukční techniku.
Následující diagram ukazuje příklad složení.
manuální testovací otázky pohovor pro 4 roky zkušeností
V tomto případě má zaměstnanec bankovní účet. Víme, že bankovní účet nemůže existovat bez majitele účtu. Bez držitele účtu to přestane platit.
Můžeme použít kompozici k modelování objektů, jejichž členy jsou jiné objekty, a tyto objekty mají mezi sebou vztah „has-a“.
Ve složení je objekt obsažen v jiném objektu, tedy když je obsah obsahující zničen; druhý objekt je také zničen
Můžeme tedy na kompoziční vztah pohlížet jako na vztah „části celého“, ve kterém část neexistuje bez Celý . Proto, když je zničen celek, je odstraněna také část. To znamená, že celek má silnější vztah s částí.
Příklad složení Java
Níže je uveden program demonstrace složení.
Systém, který jsme zde použili, je znázorněn níže.
Takže v tomto programu máme tři třídy, jak je uvedeno výše. Honda je auto, takže vychází z třídy Car. CarEngine Object se používá ve třídě Honda.
Program je uveden níže.
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ýstup:
Výstup tedy ukazuje vlastnosti automobilů Honda. Ukazuje také výstup metody ze třídy CarEngine, kterou jsme použili jako člena třídy Honda pomocí složení.
Tento program ukázal, jak můžeme použít složení v programu Java.
Agregace v Javě
Agregace je další forma přidružení v Javě. Ale v případě agregace umožňuje pouze jednosměrný vztah mezi objekty. Například, zaměstnanec má adresu bydliště. Ale naopak, domácí adresa má zaměstnance, nezní to dobře.
Podobně má student adresu, ale „adresa má studenta“ nedává smysl. Stejně jako složení, agregace také zobrazuje vztah „má-a“. To znamená, že třída obsahuje objekt jiné třídy.
Níže uvedený diagram představuje příklad agregace.
Výše uvedený příklad lze interpretovat tak, že akademie má zaměstnance a studenty.
Kdy přesně bychom tedy měli jít na agregaci?
Měli bychom použít agregaci, když není třeba používat vztah „je-a“ nebo dědičnost. Pokud dokážeme zachovat vztah „je-a“ po celou dobu aplikace nebo životnosti objektu, můžeme implementovat dědičnost pro opětovné použití kódu.
V opačném případě je nejlepší použít agregaci pro opětovné použití kódu. Pojďme nyní implementovat ukázkovou agregaci v Javě.
Ukázkový systém, který jsme použili, je následující:
Tady máme třídu „Institute“. Ústav může mít různá oddělení nebo pobočky. Každá pobočka má zase několik studentů. V tomto programu budeme počítat celkový počet studentů v celém ústavu. K tomuto účelu používáme agregaci. Třída Institute obsahuje objekt Branch.
Objekt větve má studentský objekt. Takže ve třídě Institute pomocí objektu Branch spočítáme celkový počet studentů. Pro tento účel používáme seznam poboček v ústavu.
Program Java je uveden níže.
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ýstup:
Agregace a složení jsou tedy dvě formy asociace, o kterých jsme zde diskutovali. Když nepotřebujeme nebo nemůžeme představovat vztah „je-a“ mezi objekty, můžeme jít na kompozici, pokud chceme silnější vztah mezi objekty nebo agregaci, pokud chceme jednosměrný vztah.
Agregace i složení nám pomáhají znovu použít kód v Javě.
Rozdíly mezi složením vs složení
Složení i agregace jsou součástí sdružení, které zobrazují vztah „má-a“. Obě techniky nejsou prvky Java a nemají přímý způsob implementace, ale lze je implementovat pomocí kódu Java.
Složení a agregace nám umožňují znovu použít kód. Opakovaná použitelnost kódu snižuje chyby v kódu a také zvyšuje stabilitu aplikace.
Níže jsou uvedeny některé rozdíly mezi agregací a složením.
Agregace | Složení |
---|---|
Agregace umožňuje nezávisle existovat podřízené objekty nebo obsažené objekty. Například ve vztahu, kde má škola zaměstnance, pokud školu odstraníme, zaměstnanci zůstanou a mohou fungovat sami. | Ve složení nemůže obsažený objekt existovat samostatně. Například auto má motor. Pokud odstraníme Car, třída Engine nemůže fungovat sama. |
Agregace je vztah „má“. | Skladba je formou vztahu „má-a“, ale je vnímána jako součást celku. |
Agregace má pouze jednu k jedné asociaci. | Složení umožňuje další vztahy poskytované v asociaci. |
Agregace má slabou asociaci mezi objekty. | Kompozice má silnou asociaci mezi objekty. |
Složení vs. Dědictví
Složení | Dědictví |
---|---|
Skladba zobrazuje vztah „Has-A“. | Dědičnost představuje vztah „Is-A“. |
Snadnější změna implementace obsahujících objektů. | Když jedna implementace změní celou hierarchii změn dědičnosti. |
Má dynamickou nebo běhovou časovou vazbu. | Má statickou nebo kompilační časovou vazbu. |
Rozhraní třídy front-end lze snadno změnit, aniž by to mělo dopad na třídy back-end. | Jakékoli změny v metodách nebo prototypech ovlivňují všechny třídy. |
Kompozice se používá, když k existujícímu objektu nepotřebujeme přidávat další vlastnosti nebo vlastnosti. | Dědičnost se používá, když se do zděděných tříd mají přidat další funkce. |
Často kladené otázky
Otázka č. 1) Jaký je rozdíl mezi vztahem „IS - A“ a „HAS - A“?
nejlepší bezplatný nástroj pro vyčištění systému Windows 10
Odpovědět: V objektově orientovaném programování představují vztahy IS-A dědičnost, ve které je podřízená třída „jakousi“ mateřskou třídou. Vztah Has-a je vztah „části celku“, který je reprezentován složením a agregací. Dědičnost je statická vazba, zatímco kompozice je dynamická vazba.
Otázka 2) Co je agregace a složení v Javě?
Odpovědět: Ve složení jsou dva objekty pevně spojeny, tj. Když je zničen objekt (obsahující objekt), který vlastní jiný objekt (obsažený objekt), pak je druhý objekt automaticky zničen, protože nemůže samostatně fungovat samostatně.
V agregaci mohou obsahující a obsažený objekt fungovat nezávisle. Je to proto, že v agregaci jeden objekt používá jiný objekt.
Otázka č. 3) Proč používáme složení v Javě?
Odpovědět: Složení nám umožňuje znovu použít existující kód a tím snížit složitost kódu a také snížit chyby v kódu. Pomocí kompozice můžeme znovu použít pouze to, co od objektu potřebujeme, a také řídit jeho viditelnost.
Otázka č. 4) Jaké je použití asociace?
Odpovědět: Asociace představuje vztah „has-a“ v Javě. Přidružení v Javě se používá, když jeden objekt potřebuje využívat funkčnost a služby jiného objektu. Složení a agregace jsou dvě formy asociace.
Otázka č. 5) Je složení lepší než dědičnost?
Odpovědět: Záleží na systému OOP, který kódujeme. Pokud můžeme v aplikaci reprezentovat objekty se vztahem IS-A po celou dobu jeho životnosti, pak je dědičnost lepší volbou. Když chceme znovu použít kód a nemůžeme reprezentovat objektový systém se vztahem IS-A, pak je složení lepší.
Také, když chceme často měnit front-endové třídy bez narušení back-endových tříd, pak je složení lepší, protože v případě dědičnosti malé změny většinou ovlivní celou hierarchii dědičnosti.
Závěr
V tomto kurzu jsme diskutovali o vztahu HAS-A v Javě. Složení a agregace jsou formy, které implementují vztah „HAS-A“. Porovnali jsme obě tyto implementace.
Zatímco oba obsahují objekty jiné třídy, kompozice vlastní objekt, zatímco agregace objekt jednoduše používá. Rovněž jsme porovnali složení a dědičnost v Javě.
=> Chcete-li zobrazit A-Z výukových kurzů Java, podívejte se sem.
Doporučené čtení
- Výukový program Java SWING: Kontejner, komponenty a zpracování událostí
- Výukový program JAVA pro začátečníky: 100+ praktických výukových programů Java Video
- TreeMap v Javě - výuka s příklady Java TreeMap
- Výukový program Java Float s příklady programování
- Výukový program Java String s funkcí String Buffer a String Builder
- Implementace Java: Vytvoření a spuštění souboru Java JAR
- Objekt Java Class Vs - Jak používat třídu a objekt v Javě
- Základy jazyka Java: Java Syntax, třída Java a základní koncepty Java