java composition what is composition java
Този урок за Java Composition обяснява какво е Composition and Aggregation в Java и разликите между тях:
В последните няколко урока обсъдихме подробно наследяването в Java. Наследяването в Java е тип връзка „IS-A”, което показва, че един обект ‘е вид’ на друг обект. Например, автомобил е вид или вид превозно средство.
Обектно-ориентираното програмиране осигурява друг тип връзка, наречена връзка „HAS-A“. В този урок ще обсъдим подробно връзката „има“.
=> Посетете тук, за да научите Java от нулата.
Какво ще научите:
- Урок за композиция на Java
- Асоциация в Java
- Разлики между агрегирането срещу състава
- Състав Vs. Наследяване
- Заключение
Урок за композиция на Java
Извиква се връзката „има-а“ в Java Състав . Използвайки връзката или композицията „има-а“, ние гарантираме повторната употреба на кода в нашите програми.
Така че, като правим нашите програми да използват връзката „има-а“, това, което правим тук, е, че правим нашата програма да използва екземпляр на клас директно, вместо да го „разширява“ от друг клас, както правим в случай на наследяване.
Диаграмата по-долу изобразява връзките „is-a“ и „has-a“ в Java.
Както се вижда от горната диаграма, Car and Vehicle споделят връзката ‘IS-A’, тъй като колата е превозно средство. Следователно ние създаваме автомобилен обект от съществуващия обект на превозно средство, като добавяме повече характеристики към него.
На схемата Автомобилът и Двигателят споделят връзката „Има-а“. Колата винаги има двигател. Така че това, което правим тук, е, че не разширяваме свойствата на обекта Engine, а използваме директно обекта Engine. Това се прави в Java с помощта на композиция.
Следователно, наред с капсулирането, абстракцията и полиморфизма, наследяването и композицията също са важни характеристики на обектно-ориентираното програмиране (ООП).
Връзките „има-а“ обикновено определят дали даден обект има друг обект. Така че това, което правим тук, е, че използваме обект повторно и по този начин намаляваме дублирането на код, както и грешките. Това е така, защото използваме напълно разработен и тестван обект в нашия клас.
Нека започнем с обсъждането на специална връзка, наречена „Асоциация“ в Java, от която извличаме композиция и други взаимоотношения.
Асоциация в Java
Асоциацията в Java може да се определи като връзка, която съществува между два отделни класа, използвайки техните отделни обекти. Асоциацията в Java може да има следните връзки.
- Едно към едно: Един обект, свързан с точно един обект.
- Един към много: Един обект може да бъде свързан с много обекти.
- Много към едно: Много обекти могат да бъдат свързани с един обект.
- Много към много: Повече от един обект, свързан с повече от един друг обект.
Когато се установи връзка, съдържащите обекти (обекти, които имат други обекти като свои членове) комуникират със съдържащия се обект, за да използват повторно техните свойства и характеристики. Асоциацията има две форми, т.е. състав и агрегация.
Фигурата по-долу показва това:
Както се вижда от горната диаграма, Асоциацията включва Състав и агрегиране. Съставът е по-специфичен термин и обобщаването е по-общо от състава. Тези форми се основават на това какъв тип отношения поддържат.
Преди да преминем към Композиция и агрегиране, нека внедрим програма Java, за да демонстрираме асоциацията в 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()); } }
Изход:
Горната програма демонстрира асоциация в Java. Тук имаме сметка в клас, която има име на банка и номер на сметка като частни членове. След това имаме клас на служител. Знаем, че всеки служител ще има номер на сметка за депозиране на заплата и т.н.
Така че това, което правим е, вместо да напишем друг клас или метод за четене в данните за банковата сметка на служителя, ние използваме директно съществуващия клас Account. С други думи, ние свързваме обект на акаунт със служителя, така че да получим данните за банковата сметка на служителя. Горният пример прави точно това.
Състав в Java
Съставът е една форма на асоциация. Съставът може да се определи като асоциация, в която един клас съдържа друг клас и този съдържащ се клас зависи от съдържащия клас по такъв начин, че да не може да съществува независимо.
Видяхме по-горе пример за взаимоотношение има-и-връзка. В това имахме автомобилен обект, който има двигател. Това е пример за композиция. При това двигателят не може да съществува независимо без кола.
Съставът е по-ограничен в сравнение с агрегирането. Съставът не е функция на Java. Счита се главно за дизайнерска техника.
Следващата диаграма показва пример за състав.
въпроси и отговори за интервю за техническа поддръжка pdf
При това служител има банкова сметка. Знаем, че банкова сметка не може да съществува без притежател на сметка. Без титуляр на акаунт, той става неактивен.
Можем да използваме композиция, за да моделираме обекти, които имат други обекти като негови членове и тези обекти имат връзка „има-а“ помежду си.
По състав обектът се съдържа в друг обект, следователно когато съдържащият обект е унищожен; другият обект също е унищожен
Така че можем да разглеждаме композиционната връзка като връзка „част от цялото”, в която част не съществува без цяло . Следователно, когато цялото е унищожено, частта също се изтрива. Това означава, че цялото има по-силна връзка с частта.
Пример за композиция на Java
По-долу е дадена програмата за демонстрация на композиция.
Системата, която използвахме тук, е представена по-долу.
В тази програма имаме три класа, както е показано по-горе. Honda е автомобил, така че се простира от класа Car. CarEngine Object се използва в клас Honda.
Програмата е дадена по-долу.
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(); } }
Изход:
По този начин продукцията показва свойствата на автомобилите на Honda. Той също така показва резултата от метод от клас CarEngine, който сме използвали като член на клас Honda, използвайки състав.
как да създадете java проект в eclipse
Тази програма показа как можем да използваме композицията в Java програма.
Агрегация в Java
Агрегирането е друга форма на асоцииране в Java. Но в случая на агрегиране той позволява само еднопосочната връзка между обектите. Например, служител има домашен адрес. Но обратно, домашният адрес има служители, не звучи правилно.
По същия начин студентът има адрес, но „адресът има студент“ няма смисъл. Подобно на композицията, агрегирането също изобразява връзката „има-а“. Това означава, че клас съдържа обект от друг клас.
Диаграмата по-долу представлява пример за агрегиране.
Горният пример може да се тълкува, тъй като колежът има персонал и студенти.
И така, кога точно трябва да отидем за агрегиране?
Трябва да използваме агрегиране, когато няма нужда да използваме връзка или наследство „е-а“. Ако можем да поддържаме връзката „is-a“ по време на приложението или живота на обект, тогава можем да внедрим наследяване за повторно използване на кода.
В противен случай е най-добре да използвате агрегиране за повторна употреба на кода. Нека сега да приложим пример за агрегиране в Java.
Примерната система, която използвахме, е както следва:
Тук имаме клас „Институт“. Институтът може да има различни отдели или клонове. Всеки клон от своя страна има по няколко ученика. В тази програма ще преброим общия брой студенти в целия институт. За тази цел използваме агрегиране. Класът Institute съдържа обекта Branch.
Клонният обект има студентски обект. Така в класа на института, използвайки обекта Branch, броим общия брой студенти. За тази цел използваме списък с клонове в институт.
Програмата Java е дадена по-долу.
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()); } }
Изход:
Следователно агрегирането и съставът са две форми на асоцииране, които обсъдихме тук. Когато не се нуждаем или не можем да представим връзката ‘is-a’ между обектите, тогава можем да отидем за композиция, ако искаме по-силна връзка между обектите или агрегиране, ако искаме еднопосочна връзка.
Както агрегирането, така и състава ни помагат да използваме повторно кода в Java.
Разлики между агрегирането срещу състава
Съставът и агрегирането са части от Асоциацията, която изобразява връзка „има-има“. И двете техники не са функции на Java и нямат директен начин за изпълнение, но могат да бъдат приложени с помощта на Java код.
Съставът и агрегирането ни позволяват да използваме кода повторно. Повторната употреба на кода намалява грешките в кода и също така прави приложението по-стабилно.
По-долу са изброени някои разлики между агрегирането и състава.
Агрегиране | Състав |
---|---|
Агрегирането позволява на дъщерни обекти или съдържащи се обекти да съществуват независимо. Например в отношения, при които училището има служители, ако изтрием училище, служителите ще останат и могат да функционират сами. | По състав съдържащият се обект не може да съществува независимо. Например една кола има двигател. Ако изтрием Car, класът на двигателя не може да функционира самостоятелно. |
Агрегирането е връзка „има-има“. | Съставът е форма на връзка „има-а“, но се разглежда като част-от-цялост. |
Агрегирането има само едно към едно свързване. | Съставът позволява други взаимоотношения, предвидени в асоциацията. |
Агрегацията има слаба връзка между обектите. | Композицията има силна връзка между обектите. |
Състав Vs. Наследяване
Състав | Наследяване |
---|---|
Композицията изобразява връзката „Има-А“. | Наследството представлява връзка „Is-A“. |
По-лесно е да промените изпълнението на съдържащи обекти. | Когато една реализация промени цялата йерархия на наследяване се променя. |
Има динамично или времево обвързване. | Има статично или компилирано времево обвързване. |
Интерфейсът на предния клас може да се променя лесно, без да се влияе на задните класове. | Всички промени в методите или прототипите засягат всички класове. |
Съставът се използва, когато не е необходимо да добавяме повече характеристики или характеристики към съществуващ обект. | Наследството се използва, когато трябва да се добавят повече функции към наследените класове. |
често задавани въпроси
В # 1) Каква е разликата между връзката „ИС - А“ и „ИМА - А“?
Отговор: В обектно-ориентираното програмиране връзките IS-A представляват наследяване, при което дъщерният клас ‘е един вид’ родителски клас. Връзката Has-a е връзка „част от цялото“, която е представена чрез композиция и агрегиране. Наследяването е статично обвързване, докато Composition е динамично обвързване.
В # 2) Какво представлява агрегирането и композицията в Java?
Отговор: В Composition двата обекта са тясно свързани, т.е.когато обектът (Съдържащ обект), който притежава друг обект (съдържащ обект) е унищожен, тогава другият обект се унищожава автоматично, тъй като не може да функционира самостоятелно самостоятелно.
В агрегирането съдържащият и съдържащият се обект могат да функционират независимо. Това е така, защото в агрегирането един обект използва друг обект.
В # 3) Защо използваме Composition в Java?
Отговор: Съставът ни позволява да използваме отново съществуващия код, като по този начин намаляваме сложността на кода и също така намаляваме грешките в кода. Използвайки композиция, можем да използваме повторно само това, от което се нуждаем, от обекта и също така да контролираме видимостта му.
В # 4) Каква е ползата от Асоциацията?
Отговор: Асоциацията представлява връзката „има-а“ в Java. Асоциацията в Java се използва, когато един обект трябва да използва функционалността и услугите на друг обект. Съставът и агрегирането са две форми на асоцииране.
В # 5) Композицията по-добра ли е от наследяването?
Отговор: Зависи от OOP системата, която кодираме. Ако можем да представим обектите с връзка IS-A през целия си живот в приложението, тогава наследяването е по-добър вариант. Когато искаме да използваме повторно кода и не можем да представим обектната система с връзката IS-A, тогава съставът е по-добър.
Също така, когато искаме често да променяме класовете от предния край, без да нарушаваме задните класове, тогава съставът е по-добър, защото в случай на наследяване леки промени засягат най-вече цялата йерархия на наследяването.
Заключение
В този урок обсъдихме връзката HAS-A в Java. Композицията и агрегирането са формите, които прилагат връзката „HAS-A“. Сравнихме и двете изпълнения.
Докато и двете съдържат обекти от друг клас, композицията притежава обекта, докато агрегирането просто използва обекта. Също така сравнихме състава и наследяването в Java.
=> Проверете тук, за да видите A-Z на Java уроци за обучение.
Препоръчително четене
- Java SWING Урок: Контейнер, компоненти и обработка на събития
- Урок за JAVA за начинаещи: 100+ практически ръководства за Java видео
- TreeMap в Java - Урок с примери за TreeMap на Java
- Урок за Java Float с примери за програмиране
- Java String с урок за String Buffer и String Builder
- Разполагане на Java: Създаване и изпълнение на Java JAR файл
- Java Class Vs Object - Как да използвам клас и обект в Java
- Основи на Java: Синтаксис на Java, клас Java и основни концепции на Java