java composition what is composition java
Ta vadnica o sestavi Java pojasnjuje, kaj je sestava in združevanje v javi ter razlike med njimi:
V zadnjih nekaj vajah smo podrobno razpravljali o dedovanju v Javi. Dedovanje v Javi je vrsta odnosa 'IS-A', ki označuje, da je en predmet 'nekakšen' drug objekt. Na primer, avto je vrsta ali vrsta vozila.
Predmetno usmerjeno programiranje zagotavlja drugo vrsto odnosov, imenovano razmerje 'HAS-A'. V tej vadnici bomo podrobno razpravljali o razmerju, ki obstaja.
=> Obiščite tukaj, če se želite naučiti Jave iz nič.
Kaj se boste naučili:
- Vadnica za sestavljanje Java
- Združenje v Javi
- Razlike med združevanjem in sestavo
- Sestava Vs. Dedovanje
- Zaključek
Vadnica za sestavljanje Java
V Javi se imenuje razmerje „ima-a“ Sestava . Z uporabo razmerja ali sestave „ima-a“ zagotavljamo ponovno uporabo kode v naših programih.
Torej, tako da naši programi uporabljajo razmerje „ima-a“, tukaj počnemo tako, da naredimo, da program uporablja primer razreda, namesto da bi ga „razširil“ iz drugega razreda, kot to počnemo v primeru dedovanja.
Spodnji diagram prikazuje razmerja 'je-a' in 'ima-a' v Javi.

Kot je razvidno iz zgornjega diagrama, imata vozilo in vozilo skupno razmerje 'IS-A', saj je avtomobil vozilo. Zato iz obstoječega predmeta vozila ustvarimo avtomobilski objekt tako, da mu dodamo več značilnosti.
Na diagramu imata avtomobil in motor skupno razmerje „ima-a“. Avto ima vedno motor. Torej, kar počnemo tukaj, je, da lastnosti objekta Engine ne razširjamo, ampak objekt Engine uporabljamo neposredno. To se naredi v Javi z uporabo sestave.
Dedovanje in sestava sta skupaj z enkapsulacijo, abstrakcijo in polimorfizmom tudi pomembni značilnosti objektno usmerjenega programiranja (OOP).
Odnosi „ima-a“ običajno določajo, ali ima določen predmet drug predmet. Torej, kar tukaj počnemo, je, da objekt ponovno uporabimo in tako zmanjšamo podvajanje kode in tudi napake. To je zato, ker v svojem razredu uporabljamo popolnoma razvit in preizkušen predmet.
Začnimo z razpravo o posebni zvezi, imenovani 'Združenje' v Javi, iz katere izhajamo sestava in drugi odnosi.
Združenje v Javi
Povezavo v Javi lahko definiramo kot razmerje med dvema posameznima razredoma, ki uporabljata njihova ločena predmeta. Združenje v Javi ima lahko naslednja razmerja.
- Ena na ena: En objekt, povezan z natančno enim predmetom.
- Od enega do več: En predmet je lahko povezan z mnogimi predmeti.
- Mnogo do enega: Veliko predmetov je mogoče povezati z enim predmetom.
- Mnogo do mnogih: Več kot en objekt, povezan z več kot enim drugim predmetom.
Ko se vzpostavi razmerje, vsebujoči predmeti (predmeti, katerih člani imajo druge predmete) komunicirajo z njim, da ponovno uporabijo svoje lastnosti in značilnosti. Združenje ima dve obliki, to je sestava in združevanje.
Spodnja slika prikazuje to:

Kot je razvidno iz zgornjega diagrama, združenje vključuje sestavo in združevanje. Sestava je bolj specifičen izraz in združevanje je bolj splošno kot sestava. Te oblike temeljijo na vrsti odnosov, ki jih podpirajo.
Preden preidemo na sestavo in združevanje, uvedimo program Java za prikaz združitve v 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()); } }Izhod:

Zgornji program prikazuje povezavo v Javi. Tukaj imamo razred računa, ki ima kot ime zasebnega člana ime banke in številko računa. Nato imamo tečaj zaposlenega. Vemo, da bo imel vsak zaposleni številko računa za nakazilo plače itd.
Torej, namesto da bi v podrobnosti o bančnem računu zaposlenega prebrali drug razred ali metodo, bomo neposredno uporabili obstoječi razred Account. Z drugimi besedami, z računom povežemo objekt Račun, tako da dobimo podatke o bančnem računu zaposlenega. Zgornji primer točno to počne.
Sestava v Javi
Sestava je ena od oblik združevanja. Sestavo lahko definiramo kot asociacijo, v kateri en razred vsebuje drug razred, ta pa je odvisen od vsebnega razreda tako, da ne more obstajati neodvisno.
Zgoraj smo videli primer odnosa, ki ga ima. Pri tem smo imeli avtomobilski predmet z motorjem. To je primer sestave. Pri tem motor brez avtomobila ne more obstajati samostojno.
Sestava je bolj omejena v primerjavi z združevanjem. Sestava ni funkcija Java. Velja predvsem za tehniko oblikovanja.
Naslednji diagram prikazuje primer sestave.

c # vprašanja in odgovori za izkušene s primeri
Pri tem ima zaposleni bančni račun. Vemo, da bančni račun ne more obstajati brez imetnika računa. Brez imetnika računa ta ostane v mirovanju.
Sestavo lahko uporabimo za modeliranje predmetov, katerih člani so drugi predmeti in ti predmeti imajo med seboj razmerje „ima-a“.
Po sestavi je predmet vsebovan v drugem predmetu, torej kadar je predmet, ki ga vsebuje, uničen; drugi objekt je prav tako uničen
Tako lahko na kompozicijsko razmerje gledamo kot na odnos 'del celote', v katerem del ne obstaja brez celota . Ko je celota uničena, se tudi del izbriše. To pomeni, da ima celota močnejši odnos do dela.
Primer sestave Java
Spodaj je program za predstavitev kompozicije.
Sistem, ki smo ga uporabili tukaj, je predstavljen spodaj.

V tem programu imamo tri razrede, kot je prikazano zgoraj. Honda je avtomobil, zato sega od razreda Car. CarEngine Object se uporablja v razredu Honda.
Program je podan spodaj.
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(); } }Izhod:

Tako rezultat prikazuje lastnosti avtomobilov Honda. Prav tako prikazuje rezultate metode iz razreda CarEngine, ki smo jo uporabili kot član razreda Honda z uporabo sestave.
Ta program je pokazal, kako lahko uporabimo kompozicijo v programu Java.
Združevanje v Javi
Združevanje je druga oblika združevanja v Javi. Toda v primeru združevanja omogoča le enosmerno razmerje med predmeti. Na primer, zaposleni ima domači naslov. A obratno, domači naslov ima zaposlene, ne zveni prav.
Podobno ima študent naslov, a »naslov ima študenta« nima smisla. Tako kot kompozicija tudi agregacija prikazuje odnos »ima-a«. To pomeni, da razred vsebuje objekt drugega razreda.
Spodnji diagram predstavlja primer združevanja.

Zgornji primer si lahko razlagamo kot kolegij z osebjem in študenti.
Kdaj natančno naj gremo za združevanje?
Združevanje bi morali uporabiti, kadar ni treba uporabiti razmerja ali dedovanja 'je-a'. Če lahko ohranimo razmerje 'je-a' v celotni aplikaciji ali življenjski dobi predmeta, potem lahko za nadaljnjo uporabo kode izvedemo dedovanje.
vprašanja in odgovori za intervju s selenom javo za izkušene
V nasprotnem primeru je za ponovno uporabo kode najbolje uporabiti združevanje. Zdaj izvedimo primer združevanja v Javi.
Primer sistema, ki smo ga uporabili, je naslednji:

Tukaj imamo razred 'Inštitut'. Inštitut ima lahko različne oddelke ali podružnice. Vsaka podružnica ima po več učencev. V tem programu bomo prešteli skupno število študentov na celotnem inštitutu. V ta namen uporabljamo združevanje. Razred Institute vsebuje objekt Branch.
Predmet veje ima predmet študenta. Torej v razredu Institute s pomočjo predmeta Branch preštejemo skupno število študentov. V ta namen uporabljamo seznam podružnic v inštitutu.
Program Java je naveden spodaj.
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()); } } Izhod:

Zato sta združevanje in sestava dve obliki združevanja, o katerih smo tukaj razpravljali. Kadar ne potrebujemo ali ne moremo predstavljati razmerja „je-a“ med predmeti, lahko pojdemo na sestavo, če želimo močnejše razmerje med predmeti ali združevanje, če želimo enosmerno razmerje.
Tako združevanje kot sestava nam pomagata k ponovni uporabi kode v Javi.
Razlike med združevanjem in sestavo
Sestava in združevanje sta del združenja, ki prikazuje odnos „ima-ima“. Obe tehniki nista značilnosti Java in nimata neposrednega načina za izvajanje, vendar ju je mogoče uporabiti s kodo Java.
Sestava in združevanje nam omogočata ponovno uporabo kode. Ponovna uporaba kode zmanjšuje napake v kodi in omogoča tudi stabilnejšo aplikacijo.
Spodaj je navedenih nekaj razlik med združevanjem in sestavo.
| Združevanje | Sestava |
|---|---|
| Združevanje omogoča, da podrejeni predmeti ali predmeti v njih obstajajo neodvisno. Na primer v razmerju, kjer ima šola zaposlene, če šolo izbrišemo, zaposleni ostanejo in lahko delujejo sami. | V sestavi vsebovani predmet ne more obstajati neodvisno. Na primer avtomobil ima motor. Če izbrišemo Car, razred motorja ne more delovati sam. |
| Združevanje je razmerje 'ima-ima'. | Sestava je oblika razmerja 'ima-a', vendar je obravnavana kot del-celote. |
| Združevanje ima samo eno povezavo. | Sestava omogoča druge odnose, ki jih nudi združenje. |
| Združevanje ima šibko povezavo med predmeti. | Sestava ima močno povezavo med predmeti. |
Sestava Vs. Dedovanje
| Sestava | Dedovanje |
|---|---|
| Sestava prikazuje odnos 'Has-A'. | Dedovanje predstavlja odnos 'Je-A'. |
| Preprosteje spremeniti izvedbo, ki vsebuje predmete. | Ko se ena izvedba spremeni, se spremeni celotna hierarhija dedovanja. |
| Ima dinamično ali časovno vezavo. | Ima statično ali časovno vezavo prevajanja. |
| Front-end razred vmesnik je mogoče enostavno spremeniti, ne da bi to vplivalo na back-end razrede. | Kakršne koli spremembe metod ali prototipov vplivajo na vse razrede. |
| Sestava se uporablja, kadar nam obstoječemu predmetu ni treba dodati več značilnosti ali lastnosti. | Dedovanje se uporablja, kadar je treba podedovanim razredom dodati več funkcij. |
Pogosto zastavljena vprašanja
V # 1) Kakšna je razlika med razmerjem »IS - A« in »HAS - A«?
Odgovor: V objektno usmerjenem programiranju relacije IS-A predstavljajo dedovanje, pri katerem je podrejeni razred 'nekakšen' nadrejeni razred. Razmerje Has-a je odnos 'del-a-celote', ki ga predstavljata sestava in združevanje. Dedovanje je statična vezava, medtem ko je Composition dinamična vezava.
V # 2) Kaj je združevanje in sestava v Javi?
Odgovor: Pri sestavi sta oba predmeta tesno povezana, tj. Ko je objekt (ki vsebuje predmet), ki je lastnik drugega predmeta (predmet v zaprtem sistemu) uničen, se drugi objekt samodejno uniči, saj sam ne more delovati neodvisno.
Pri združevanju lahko vsebujoči in vsebovani objekt delujeta neodvisno. To je zato, ker pri združevanju en objekt uporablja drug objekt.
V # 3) Zakaj uporabljamo Composition v Javi?
Odgovor: Sestava nam omogoča, da ponovno uporabimo obstoječo kodo, s čimer zmanjšujemo njeno kompleksnost in zmanjšuje tudi napake v kodi. Z uporabo kompozicije lahko ponovno uporabimo samo tisto, kar potrebujemo od predmeta, in nadzorujemo njegovo vidnost.
V # 4) Kakšna je uporaba združenja?
Odgovor: Združenje predstavlja odnos 'ima-a' v Javi. Povezava v Javi se uporablja, kadar mora en objekt uporabljati funkcionalnost in storitve drugega predmeta. Sestava in združevanje sta dve obliki združevanja.
V # 5) Ali je sestava boljša od dedovanja?
Odgovor: Kodiranje je odvisno od sistema OOP. Če lahko v aplikaciji predstavimo predmete z razmerjem IS-A skozi njegovo življenjsko dobo, potem je dedovanje boljša možnost. Kadar želimo ponovno uporabiti kodo in ne moremo predstaviti objektnega sistema z razmerjem IS-A, je sestava boljša.
Kadar želimo pogosto spreminjati čelne razrede, ne da bi motili zaledne razrede, je sestava boljša, ker v primeru dedovanja rahle spremembe večinoma vplivajo na celotno hierarhijo dedovanja.
Zaključek
V tej vadnici smo razpravljali o razmerju HAS-A v Javi. Sestava in združevanje sta obliki, ki izvajata razmerje „HAS-A“. Primerjali smo obe izvedbi.
Medtem ko oba vsebujeta predmete drugega razreda, je sestav v lasti predmeta, medtem ko združevanje preprosto uporablja predmet. Primerjali smo tudi sestavo in dedovanje v Javi.
=> Tukaj si oglejte A-Z vadnic za učenje Java.
Priporočeno branje
- Java SWING Vadnica: Vsebnik, komponente in obdelava dogodkov
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic
- TreeMap v Javi - Vadnica z primeri Java TreeMap
- Vadnica Java Float s primeri programiranja
- Java String z vmesnikom String Buffer in String Builder
- Uvajanje Java: Ustvarjanje in izvajanje datoteke Java JAR
- Predmet Java Class Vs - Kako uporabljati razred in predmet v Javi
- Osnove Java: Sintaksa Java, Razred Java in Osnovni koncepti Java