java composition what is composition 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()); } }
Излаз:
Горњи програм показује повезаност у Јави. Овде имамо рачун класе који има име банке и број рачуна као приватни чланови. Даље, имамо час запосленог. Знамо да ће сваки запослени имати број рачуна за депоновање зараде итд.
Дакле, оно што ми радимо је, уместо да напишемо другу класу или методу за читање у детаљима банковног рачуна запосленог, ми поново користимо постојећу класу Аццоунт. Другим речима, повезујемо објекат Рачуна са Запосленим тако да добијамо детаље о банковном рачуну Запосленог. Горњи пример управо то чини.
Састав на Јави
Састав је један облик удруживања. Састав се може дефинисати као асоцијација у којој једна класа садржи другу класу и ова садржана класа зависи од класе која садржи на такав начин да не може да постоји независно.
Изнад смо видели пример односа који има однос. У томе смо имали аутомобилски предмет који има мотор. Ово је пример композиције. У овом случају, мотор не може самостално постојати без аутомобила.
Састав је ограниченији у поређењу са агрегацијом. Састав није Јава функција. Углавном се сматра техником дизајна.
Следећи дијаграм приказује пример композиције.
који је најбољи иоутубе у мп3 претварач
У овом случају, запослени има банковни рачун. Знамо да банковни рачун не може постојати без власника рачуна. Без власника рачуна, он мирује.
Композицијом можемо да моделирамо објекте који имају друге предмете као своје чланове и ти објекти имају међусобни однос „има-а“.
По саставу, објекат је садржан у другом објекту, дакле, када је тај садржај уништен; уништен је и други објекат
Тако однос композиције можемо посматрати као однос „дела целине“ у коме део не постоји без целина . Дакле, када је целина уништена, део се такође брише. То значи да целина има јачи однос са делом.
Пример Јава композиције
Доље је дат програм за демонстрацију композиције.
Систем који смо овде користили представљен је у наставку.
Дакле, у овом програму имамо три часа као што је горе приказано. Хонда је аутомобил па се протеже од класе аутомобила. ЦарЕнгине Објецт се користи у класи Хонда.
Програм је дат у наставку.
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(); } }
Излаз:
Тако излаз показује својства Хонда аутомобила. Такође приказује резултате методе из класе ЦарЕнгине коју смо користили као члан Хонда класе користећи композицију.
Овај програм је показао како можемо да користимо композицију у Јава програму.
Агрегација у Јави
Агрегација је други облик удруживања у Јави. Али у случају агрегације, он дозвољава само једносмерни однос између објеката. На пример, запослени има кућну адресу. Али обрнуто, кућна адреса има запослене, не звучи добро.
који је најбољи добављач е-поште
Слично томе, студент има адресу, али „адреса има ученика“ нема смисла. Као и композиција, агрегација такође приказује однос „има-а“. То значи да класа садржи објекат друге класе.
Дијаграм у наставку представља пример агрегације.
Горе наведени пример може се протумачити као да колеџ има особље и студенте.
Па када тачно треба да идемо на агрегацију?
Требали бисмо да користимо агрегацију када нема потребе да користимо однос „је-а“ или наследство. Ако можемо да одржимо однос „је-а“ током примене или века трајања објекта, тада можемо применити наслеђивање за поновну употребу кода.
У супротном, најбоље је користити агрегацију за поновну употребу кода. Применимо сада пример агрегације у Јави.
Пример система који смо користили је следећи:
Овде имамо час „Института“. Институт може имати различита одељења или огранке. Свака филијала заузврат има неколико ученика. У овом програму рачунаћемо укупан број студената на целом институту. У ту сврху користимо агрегацију. Класа Институте садржи објект Бранцх.
Објекат грана има студентски објекат. Дакле, на часу Института помоћу објекта Бранцх рачунамо укупан број ученика. У ту сврху користимо списак огранака у институту.
Јава програм је дат у наставку.
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()); } }
Излаз:
Отуда су агрегација и састав два облика удруживања о којима смо овде разговарали. Када нам није потребан или не можемо да представимо однос „је-а“ између објеката, онда можемо да се одлучимо за композицију ако желимо јачи однос између предмета или агрегацију ако желимо једносмерну везу.
И агрегација и састав помажу нам да поново користимо код у Јави.
Разлике између агрегације и састава
И композиција и агрегација су делови Асоцијације која приказује однос „има-а“. Обе технике нису Јава карактеристике и немају директан начин примене, али се могу применити помоћу Јава кода.
Састав и агрегација омогућавају нам поновну употребу кода. Поновна употреба кода смањује грешке у коду и такође чини апликацију стабилнијом.
У наставку су наведене неке разлике између агрегације и састава.
Агрегација | Састав |
---|---|
Агрегација омогућава да подређени објекти или садржани објекти постоје независно. На пример у вези у којој школа има запослене, ако школу избришемо, запослени ће остати и моћи ће самостално да функционишу. | У композицији, садржани предмет не може постојати независно. На пример аутомобил има мотор. Ако избришемо аутомобил, класа мотора не може самостално да функционише. |
Агрегација је однос „има-има“. | Композиција је облик односа „има-а“, али се посматра као део „целине“. |
Агрегација има само једно повезивање. | Састав дозвољава и друге везе које пружа удружење. |
Агрегација има слабу повезаност између објеката. | Композиција има снажну везу између предмета. |
Цомпоситион Вс. Наслеђивање
Састав | Наслеђивање |
---|---|
Састав приказује однос ‘Хас-А’. | Наслеђивање представља однос „Је-А“. |
Лакше је променити примену објеката који садрже. | Када се једна примена промени, мења се читава хијерархија наследства. |
Има динамичко или покретање временског ограничења. | Има статичко или време компајлирања. |
Интерфејс предње класе може се лако променити без утицаја на позадинске класе. | Све промене у методама или прототиповима утичу на све класе. |
Састав се користи када не треба да додамо више карактеристика или обележја постојећем објекту. | Наслеђивање се користи када се наследним класама додаје још функција. |
Често постављана питања
П # 1) Која је разлика између односа „ИС - А“ и „ХАС - А“?
Одговор: У објектно оријентисаном програмирању, релације ИС-А представљају наследство у којем је класа детета „врста“ родитељске класе. Однос Хас-а је однос „део-целине“ који је представљен композицијом и агрегацијом. Наслеђивање је статично везивање, док је Композиција динамичко везивање.
П # 2) Шта је агрегирање и састав у Јави?
Одговор: У композицији, два објекта су чврсто повезана, тј. Када се уништи објекат (који садржи објекат) који поседује други објекат (садржани објекат), тада се други објект аутоматски уништава, јер не може самостално да функционише самостално.
У агрегацији, садржавајући и садржани објекат могу функционисати независно. То је зато што у агрегацији један објекат користи други објекат.
П # 3) Зашто користимо Цомпоситион у Јави?
Одговор: Састав нам омогућава поновну употребу постојећег кода, смањујући тако сложеност кода, а такође смањује грешке у коду. Коришћењем композиције можемо поново користити само оно што нам треба од објекта и такође контролисати његову видљивост.
П # 4) Каква је корист од Удружења?
Одговор: Удружење представља однос „има-а“ на Јави. Асоцијација у Јави користи се када један објекат треба да користи функционалност и услуге другог објекта. Састав и агрегација су два облика удруживања.
П # 5) Да ли је композиција боља од наслеђивања?
Одговор: Зависимо од ООП система који кодирамо. Ако у апликацији можемо да представимо објекте са односом ИС-А током његовог животног века, наследство је боља опција. Када желимо поново да користимо код и не можемо да представимо систем објеката са односом ИС-А, тада је композиција боља.
Такође, када желимо да често мењамо фронт-енд класе без ометања бацк-енд класа, тада је композиција боља јер у случају наследства мале промене углавном утичу на целокупну хијерархију наследства.
Закључак
У овом упутству смо разговарали о односу ХАС-А у Јави. Композиција и агрегација су облици који примењују однос „ХАС-А“. Упоредили смо обе ове примене.
Иако оба садрже објекте друге класе, композиција је власник објекта, док агрегација једноставно користи објекат. Такође смо упоредили састав и наследство у Јави.
=> Погледајте овде да бисте видели А-З Јава Водича за обуку.
Препоручено читање
- Јава СВИНГ лекције: Контејнери, компоненте и руковање догађајима
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- ТрееМап у Јави - Водич за примере Јава ТрееМап
- Водич за Јава Флоат са примерима програмирања
- Јава Стринг са Стринг бафером и Стринг Буилдер Туториал
- Примена Јава-а: Стварање и извршавање Јава ЈАР датотеке
- Јава Цласс Вс Објецт - Како се користи класа и објекат у Јави
- Основе Јава-а: Јава синтакса, Јава Цласс и основни Јава концепти