java composition what is composition java
Denne Java Composition-opplæringen forklarer hva som er Composition and Aggregation i Java og forskjellene mellom dem:
I de siste par opplæringene diskuterte vi arv i Java i detalj. Arv i Java er en type “IS-A” -forhold som indikerer at ett objekt ‘er en slags’ et annet objekt. For eksempel, en bil er en type eller type kjøretøy.
Objektorientert programmering gir en annen type forhold som kalles “HAS-A” -forholdet. I denne opplæringen vil vi diskutere forholdet mellom-has i detalj.
=> Besøk her for å lære Java fra bunnen av.
Hva du vil lære:
- Java Composition Tutorial
- Association i Java
- Forskjeller mellom aggregering mot sammensetning
- Sammensetning vs. Arv
- Konklusjon
Java Composition Tutorial
‘Has-a’-forholdet i Java kalles Sammensetning . Ved å bruke 'has-a' forhold eller sammensetning sikrer vi kodenes gjenbrukbarhet i programmene våre.
Så ved å la programmene våre bruke 'has-a' -forhold, er det vi gjør her at vi får programmet til å bruke en forekomst av en klasse direkte i stedet for å 'utvide' den fra en annen klasse som vi gjør i tilfelle arv.
Diagrammet nedenfor viser både 'is-a' og 'has-a' forhold i Java.
Som det fremgår av diagrammet ovenfor, deler bil og kjøretøy forholdet ‘IS-A’ ettersom en bil er et kjøretøy. Derfor lager vi et bilobjekt fra det eksisterende kjøretøyobjektet ved å legge til flere egenskaper til det.
I diagrammet deler bil og motor ‘Has-a’-forholdet. En bil har alltid en motor. Så det vi gjør her er at vi ikke utvider egenskapene til motorobjektet, men vi bruker motorobjektet direkte. Dette gjøres i Java ved hjelp av komposisjon.
Sammen med innkapsling, abstraksjon og polymorfisme er arv og komposisjon også viktige trekk ved objektorientert programmering (OOP).
Relasjonene ‘has-a’ bestemmer vanligvis om et bestemt objekt har et annet objekt. Så det vi gjør her er at vi gjenbruker et objekt og dermed reduserer kodeduplisering så vel som feil. Dette er fordi vi bruker et fullstendig utviklet og testet objekt i klassen vår.
La oss starte med diskusjonen om en spesiell relasjon kalt 'Association' i Java som vi henter komposisjon og andre relasjoner fra.
Association i Java
Assosiasjon i Java kan defineres som et forhold som eksisterer mellom to individuelle klasser ved hjelp av sine separate objekter. Association i Java kan ha følgende forhold.
- En-til-en: Ett objekt assosiert med nøyaktig ett objekt.
- En-til-mange: Ett objekt kan assosieres med mange objekter.
- Mange-til-en: Mange objekter kan knyttes til ett objekt.
- Mange-til-mange: Mer enn ett objekt assosiert med mer enn ett annet objekt.
Når et forhold er etablert, kommuniserer de inneholder objektene (objekter som har andre objekter som sine medlemmer) med det inneholdte objektet for å gjenbruke deres egenskaper og egenskaper. Foreningen har to former, dvs. sammensetning og aggregering.
Figuren nedenfor viser dette:
Som det fremgår av diagrammet ovenfor, inkluderer foreningen sammensetning og aggregering. Sammensetning er et mer spesifikt begrep og aggregering er mer generelt enn sammensetning. Disse skjemaene er basert på hvilken type forhold de støtter.
Før vi går videre til Composition and Aggregation, la oss implementere et Java-program for å demonstrere Association in 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()); } }
Produksjon:
Ovennevnte program demonstrerer en forening i Java. Her har vi en klassekonto som har et banknavn og kontonummer som private medlemmer. Deretter har vi en ansatt klasse. Vi vet at hver ansatt vil ha et kontonummer for å sette inn lønn etc.
Så det vi gjør er, i stedet for å skrive en annen klasse eller metode for å lese i Ansattes bankkontodetaljer, bruker vi direkte den eksisterende kontoklassen. Med andre ord knytter vi et kontoobjekt til den ansatte slik at vi får den ansattes bankkontodetaljer. Ovennevnte eksempel gjør nøyaktig dette.
Komposisjon i Java
Sammensetningen er en form for forening. Sammensetningen kan defineres som en forening der en klasse inneholder en annen klasse, og denne inneholdte klassen avhenger av den inneholder klassen på en slik måte at den ikke kan eksistere uavhengig.
Vi har sett et eksempel på et forhold mellom forholdet ovenfor. I det hadde vi en bilgjenstand som har en motor. Dette er et eksempel på komposisjon. I dette kan en motor ikke eksistere uavhengig uten bil.
Komposisjonen er mer begrenset sammenlignet med Aggregation. Komposisjonen er ikke en Java-funksjon. Det regnes hovedsakelig som en designteknikk.
Følgende diagram viser et sammensetningseksempel.
intervju spørsmål og svar på nettjenesten
I dette har en ansatt en bankkonto. Vi vet at en bankkonto ikke kan eksistere uten en kontoinnehaver. Uten kontoinnehaver blir den sovende.
Vi kan bruke komposisjon til å modellere objekter som har andre objekter som medlemmer, og disse objektene har 'has-a' forhold mellom seg.
I sammensetning er et objekt inneholdt i et annet objekt, derav når det inneholder objektet blir ødelagt; det andre objektet blir også ødelagt
Så vi kan se på komposisjonsforholdet som et 'del-av-en-helhet' forhold der del eksisterer ikke uten hel . Når hele blir ødelagt, blir delen også slettet. Dette betyr at helheten har et sterkere forhold til delen.
Eksempel på Java-sammensetning
Nedenfor er programmet for å demonstrere komposisjon.
Systemet vi brukte her er representert som nedenfor.
Så i dette programmet har vi tre klasser som vist ovenfor. Honda er en bil, så den strekker seg fra klassen bil. CarEngine Object brukes i Honda-klassen.
Programmet er gitt nedenfor.
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(); } }
Produksjon:
Dermed viser produksjonen egenskapene til Honda-biler. Det viser også utdataene fra en metode fra CarEngine-klassen som vi har brukt som medlem av Honda-klassen ved hjelp av komposisjon.
Dette programmet viste hvordan vi kan bruke komposisjon i et Java-program.
Aggregering i Java
Aggregasjon er en annen form for tilknytning i Java. Men når det gjelder aggregering, tillater det bare enveisforholdet mellom objektene. For eksempel, en ansatt har hjemmeadresse. Men omvendt, hjemmeadressen har ansatte, høres ikke riktig ut.
Tilsvarende har en student en adresse, men 'adressen har en student' gir ikke mening. I likhet med komposisjon skildrer aggregering også forholdet 'has-a'. Dette betyr at en klasse inneholder et objekt fra en annen klasse.
Diagrammet nedenfor representerer et samleeksempel.
Ovennevnte eksempel kan tolkes slik at høgskolen har ansatte og studenter.
Så når skal vi nøye oss med Aggregation?
Vi bør bruke aggregering når det ikke er behov for å bruke et 'is-a' forhold eller arv. Hvis vi kan opprettholde 'is-a' -forholdet gjennom applikasjonen eller levetiden til et objekt, kan vi implementere arv for gjenbruk av kode.
Ellers er det best å bruke aggregering for gjenbrukbarhet. La oss nå implementere et eksempel på aggregering i Java.
Eksempelsystemet vi har brukt er som følger:
Her har vi en ‘Institute’ klasse. Instituttet kan ha forskjellige avdelinger eller grener. Hver gren har igjen flere studenter. I dette programmet vil vi telle det totale antallet studenter i hele instituttet. Vi bruker aggregering for dette formålet. Klassen Institutt inneholder filialobjektet.
Grenobjektet har et studentobjekt. Så i instituttklassen ved hjelp av filialobjektet teller vi det totale antallet studenter. For dette formålet bruker vi en liste over filialer i et institutt.
Java-programmet er gitt nedenfor.
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()); } }
Produksjon:
Derfor er aggregering og sammensetning to former for tilknytning som vi har diskutert her. Når vi ikke trenger eller ikke kan representere ‘is-a’ forholdet mellom objekter, kan vi gå for komposisjon hvis vi ønsker et sterkere forhold mellom objekter eller aggregering hvis vi ønsker et enveis forhold.
Både aggregering og sammensetning hjelper oss med å gjenbruke kode i Java.
Forskjeller mellom aggregering mot sammensetning
Både komposisjon og aggregering er deler av foreningen som skildrer et ‘has-a’ forhold. Begge teknikkene er ikke Java-funksjoner og har ikke en direkte måte å implementere, men kan implementeres ved hjelp av Java-kode.
Sammensetning og aggregering tillater oss å bruke koden på nytt. Kodenes gjenbrukbarhet reduserer feilene i koden og gjør applikasjonen også mer stabil.
Nedenfor er noen forskjeller mellom aggregering og komposisjon.
Aggregasjon | Sammensetning |
---|---|
Aggregering gjør at underordnede objekter eller gjenstander kan eksistere uavhengig. For eksempel i et forhold der skolen har ansatte, hvis vi sletter skolen, vil de forbli og kunne fungere alene. | I sammensetning kan det inneholdte objektet ikke eksistere uavhengig. For eksempel en bil har motor. Hvis vi sletter bil, kan ikke motorklassen fungere alene. |
Aggregering er et ‘has-a’ forhold. | Komposisjonen er en form for ‘has-a’-forhold, men sett på som en del-av-en-hel-relasjon. |
Aggregasjonen har bare en til en forening. | Komposisjon tillater andre forhold gitt i foreningen. |
Aggregasjonen har en svak sammenheng mellom objekter. | Komposisjonen har en sterk sammenheng mellom objekter. |
Sammensetning vs. Arv
Sammensetning | Arv |
---|---|
Komposisjonen skildrer forholdet ‘Has-A’. | Arv representerer ‘Is-A’ forhold. |
Lettere å endre implementeringen av gjenstander som inneholder. | Når en implementering endrer hele hierarkiet av arv. |
Har en dynamisk eller kjøre tidsbinding. | Har en statisk eller kompilerende tidsbinding. |
Front-end-klassegrensesnittet kan enkelt endres uten å påvirke back-end-klassene. | Eventuelle endringer i metoder eller prototyper påvirker alle klasser. |
Komposisjonen brukes når vi ikke trenger å legge til flere egenskaper eller funksjoner til et eksisterende objekt. | Arv brukes når flere funksjoner skal legges til i arvede klasser. |
ofte stilte spørsmål
Q # 1) Hva er forskjellen mellom 'IS - A' og 'HAS - A' forhold?
Svar: I Objektorientert programmering representerer IS-A-relasjoner arv der en barneklasse ‘er en slags’ en foreldreklasse. Has-a-forholdet er et 'part-of-a - whole' forhold som er representert av komposisjon og aggregering. Arv er en statisk binding mens sammensetning er dynamisk binding.
Q # 2) Hva er aggregering og komposisjon i Java?
Svar: I sammensetning er de to objektene tett sammenkoblet, dvs. når objektet (Containing object) som eier et annet objekt (inneholdt objekt) blir ødelagt, blir det andre objektet automatisk ødelagt, da det ikke kan fungere uavhengig av seg selv.
I Aggregation kan det inneholdende og det inneholdte objektet fungere uavhengig. Dette er fordi, i Aggregation, bruker et objekt et annet objekt.
Sp # 3) Hvorfor bruker vi komposisjon i Java?
Svar: Komposisjon lar oss bruke den eksisterende koden på nytt og dermed redusere kodens kompleksitet og reduserer også feilene i koden. Ved å bruke komposisjon kan vi bare gjenbruke det vi trenger fra objektet og også kontrollere synligheten.
Q # 4) Hva er bruken av Association?
Svar: Association representerer 'has-a' forholdet i Java. Assosiasjon i Java brukes når ett objekt trenger å bruke funksjonaliteten og tjenestene til et annet objekt. Sammensetning og aggregering er to former for tilknytning.
Sp # 5) Er sammensetning bedre enn arv?
Svar: Det avhenger av OOP-systemet at vi koder. Hvis vi kan representere objektene med IS-A-forhold gjennom hele levetiden i applikasjonen, er arv et bedre alternativ. Når vi ønsker å bruke koden på nytt og ikke kan representere objektsystemet med IS-A-forholdet, er sammensetningen bedre.
smidige intervjuspørsmål og svar for erfarne
Også når vi ofte vil endre front-end-klasser uten å forstyrre back-end-klassene, så er sammensetningen bedre fordi i tilfelle av arv påvirker små endringer stort sett hele arvshierarkiet.
Konklusjon
I denne veiledningen har vi diskutert HAS-A-forholdet i Java. Komposisjon og aggregering er formene som implementerer ‘HAS-A’ forholdet. Vi har sammenlignet begge disse implementeringene.
Mens begge inneholder objekter av en annen klasse, eier komposisjon objektet mens aggregering bare bruker objektet. Vi har også sammenlignet sammensetningen og arven i Java.
=> Sjekk her for å se AZ-opplæringsveiledninger for Java.
Anbefalt lesing
- Java SWING Tutorial: Container, Components and Event Handling
- JAVA-opplæring for nybegynnere: 100+ praktiske Java-videoveiledninger
- TreeMap In Java - Veiledning med Java TreeMap-eksempler
- Java Float Tutorial med programmeringseksempler
- Java String with String Buffer and String Builder Tutorial
- Java-distribusjon: Opprettelse og utføring av Java JAR-fil
- Java Class Vs Object - Hvordan bruke klasse og objekt i Java
- Java Basics: Java Syntax, Java Class og Core Java Concepts