java composition what is composition java
Цей посібник із композиції Java пояснює, що таке склад та агрегація в Java та відмінності між ними:
В останніх кількох посібниках ми детально обговорили успадкування в Java. Спадкування в Java - це тип відносин “IS-A”, який вказує на те, що один об’єкт “є свого роду” іншим об’єктом. Наприклад, автомобіль - це тип або вид транспортного засобу.
Об'єктно-орієнтоване програмування забезпечує інший тип відносин, який називається зв'язком “HAS-A”. У цьому підручнику ми детально обговоримо взаємозв'язок між стосунками.
=> Завітайте сюди, щоб вивчити Java з нуля.
Що ви дізнаєтесь:
- Підручник з композиції Java
- Асоціація на Java
- Відмінності між агрегацією проти складу
- Склад проти Спадщина
- Висновок
Підручник з композиції Java
На Java називається взаємозв'язок 'має' Склад . Використовуючи взаємозв'язок або склад 'має', ми забезпечуємо повторне використання коду в наших програмах.
Отже, змушуючи наші програми використовувати взаємозв’язок «має-а», ми тут робимо те, що ми робимо так, щоб наша програма використовувала екземпляр класу безпосередньо, а не «розширювала» його з іншого класу, як це робиться у випадку успадкування.
На наведеній нижче схемі зображено взаємозв'язки 'є-а' та 'має-а' в Java.
Як видно з наведеної схеми, Автомобіль та транспортний засіб поділяють взаємозв'язок '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. Тут ми маємо Рахунок класу, який має назву банку та номер рахунку як приватні члени. Далі ми маємо клас Employee. Ми знаємо, що кожен працівник матиме номер рахунку для внесення зарплати тощо.
Отже, замість того, щоб писати інший клас чи метод для читання в реквізитах банківського рахунку Співробітника, ми безпосередньо використовуємо існуючий клас Account. Іншими словами, ми пов’язуємо об’єкт Рахунку з Працівником, щоб отримати реквізити банківського рахунку Співробітника. Наведений вище приклад саме це робить.
Композиція на Java
Склад є однією з форм асоціації. Композицію можна визначити як асоціацію, в якій один клас містить інший клас, і цей вміщений клас залежить від вміщуючого класу таким чином, що він не може існувати самостійно.
Вище ми бачили приклад відносин між стосунками. У цьому ми мали автомобільний об'єкт з двигуном. Це приклад композиції. При цьому двигун не може існувати самостійно без автомобіля.
Склад є більш обмеженим у порівнянні з агрегацією. Композиція не є функцією Java. В основному це вважається технікою проектування.
На наступній схемі показаний приклад композиції.
найкращий безкоштовний завантажувач музики для android
При цьому працівник має банківський рахунок. Ми знаємо, що банківський рахунок не може існувати без власника рахунку. Без власника рахунку він перебуває в стані неактивності.
Ми можемо використовувати композицію для моделювання об’єктів, до складу яких входять інші об’єкти, і ці об’єкти мають взаємозв’язок «має-а» між собою.
За складом об'єкт міститься в іншому об'єкті, отже, коли вміщуваний об'єкт руйнується; інший об’єкт також знищений
Таким чином, ми можемо розглядати композиційні відносини як відносини 'частина цілого', в яких частина не існує без ціле . Отже, коли ціле знищено, частина також також видаляється. Це означає, що ціле має міцніші стосунки з частиною.
Приклад композиції Java
Нижче наведена програма для демонстрації композиції.
Система, яку ми використовували тут, представлена нижче.
Отже, у цій програмі ми маємо три класи, як показано вище. Honda - це Автомобіль, тому вона поширюється на клас Car. CarEngine Object використовується в класі Honda.
Програма подана нижче.
найпростіший спосіб конвертувати YouTube у mp3
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.
Агрегація в Java
Агрегація - це ще одна форма асоціації на Java. Але у випадку агрегації це дозволяє лише односторонні відносини між об’єктами. Наприклад, працівник має домашню адресу. Але навпаки, за домашньою адресою працюють працівники, це звучить не так.
Так само у студента є адреса, але 'адреса має студента' не має сенсу. Як і композиція, агрегація також відображає взаємозв'язок 'має'. Це означає, що клас містить об’єкт іншого класу.
Наведена нижче схема представляє приклад агрегації.
Наведений вище приклад можна інтерпретувати, оскільки в коледжі працюють співробітники та студенти.
Тож коли саме ми повинні піти на агрегацію?
Ми повинні використовувати агрегацію, коли немає потреби використовувати відносини або спадщину «є-а». Якщо ми можемо підтримувати взаємозв'язок 'є-а' протягом усієї програми або терміну служби об'єкта, тоді ми можемо реалізувати успадкування для повторного використання коду.
В іншому випадку найкраще використовувати агрегацію для повторного використання коду. Давайте тепер реалізуємо приклад агрегування на Java.
Приклад системи, який ми використовували, такий:
Тут ми маємо клас «Інститут». Інститут може мати різні відділи або філії. Кожне відділення по черзі має декількох учнів. У цій програмі ми підрахуємо загальну кількість студентів у всьому інституті. Для цього ми використовуємо агрегацію. Клас Institute містить об'єкт Branch.
Об’єкт гілки має об’єкт студента. Отже, в класі Institute за допомогою об’єкта 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()); } }
Вихід:
Отже, агрегація та склад - це дві форми асоціації, про які ми тут говорили. Коли ми не потребуємо або не можемо представити взаємозв'язок 'є-а' між об'єктами, тоді ми можемо піти на композицію, якщо хочемо міцніших зв'язків між об'єктами або агрегацію, якщо хочемо односторонні відносини.
І агрегація, і композиція допомагають нам повторно використовувати код в Java.
Відмінності між агрегацією проти складу
Як Склад, так і Агрегація є частинами Асоціації, яка відображає взаємозв'язок 'має'. Обидва методи не є функціями Java і не мають прямого способу реалізації, але можуть бути реалізовані за допомогою коду Java.
Склад та агрегація дозволяють нам використовувати код повторно. Повторне використання коду зменшує помилки в коді, а також робить додаток більш стабільним.
Нижче наведено деякі відмінності між агрегацією та складом.
Агрегація | Склад |
---|---|
Агрегація дозволяє дочірнім об’єктам або вміщеним об’єктам існувати незалежно. Наприклад у відносинах, де в школі є працівники, якщо ми видалимо школу, працівники залишаться і можуть функціонувати самостійно. | За композицією вміщений об'єкт не може існувати самостійно. Наприклад машина має двигун. Якщо ми видалимо автомобіль, клас двигуна не може працювати самостійно. |
Агрегація - це взаємозв'язок 'має'. | Композиція є формою взаємозв'язку 'має', але розглядається як відношення 'частина цілого'. |
Агрегація має лише одну асоціацію. | Склад дозволяє інші відносини, передбачені в асоціації. |
Агрегація має слабкий зв'язок між об'єктами. | Композиція має сильний зв'язок між предметами. |
Склад проти Спадщина
Склад | Спадщина |
---|---|
Композиція зображує взаємозв'язок 'має-А'. | Спадщина являє собою стосунки 'Є-А'. |
Простіше змінити реалізацію містять об'єкти. | Коли одна реалізація змінює, змінюється вся ієрархія успадкування. |
Має динамічний або запущений прив'язка часу. | Має статичну або часову прив'язку компіляції. |
Інтерфейс інтерфейсу класу можна легко змінити, не впливаючи на фони класів. | Будь-які зміни в методах або прототипах торкаються всіх класів. |
Композиція використовується, коли нам не потрібно додавати більше характеристик або особливостей до існуючого об’єкта. | Спадщина використовується, коли до успадкованих класів потрібно додати більше функцій. |
Часті запитання
Q # 1) Яка різниця між відносинами „Є - А” та „Є - А”?
Відповідь: В об'єктно-орієнтованому програмуванні відносини IS-A представляють успадкування, в якому дочірній клас «є свого роду» батьківським класом. Взаємозв'язок Has-a - це взаємозв'язок 'частина-цілого', яка представлена складом та агрегацією. Спадкування - це статичне прив'язування, тоді як Композиція - це динамічне прив'язування.
Q # 2) Що таке агрегація та склад у Java?
Відповідь: У композиції два об’єкти тісно пов’язані, тобто коли об’єкт (що містить об’єкт), що володіє іншим об’єктом (вміщений об’єкт), буде знищений, тоді інший об’єкт автоматично знищується, оскільки він не може самостійно функціонувати самостійно.
В агрегації вміщуючий та вміщений об'єкт можуть функціонувати незалежно. Це пов’язано з тим, що в Агрегації один об’єкт використовує інший об’єкт.
Q # 3) Чому ми використовуємо Composition у Java?
Відповідь: Склад дозволяє повторно використовувати існуючий код, тим самим зменшуючи складність коду, а також зменшує помилки в коді. Використовуючи композицію, ми можемо повторно використовувати лише те, що нам потрібно від об’єкта, а також контролювати його видимість.
Q # 4) Яка користь від Асоціації?
Відповідь: Асоціація представляє взаємозв'язок 'має' у Java. Асоціація в Java використовується, коли одному об’єкту потрібно використовувати функціональність та послуги іншого об’єкта. Склад та агрегація - дві форми об’єднання.
Q # 5) Чи композиція краща за спадщину?
Відповідь: Ми кодуємо це залежно від системи ООП. Якщо ми можемо представляти об'єкти із зв'язком IS-A протягом усього життя в додатку, то наслідування є кращим варіантом. Коли ми хочемо повторно використати код і не можемо представити об'єктну систему із зв'язком IS-A, тоді склад кращий.
Крім того, коли ми хочемо часто міняти інтерфейсні класи, не порушуючи фонові класи, тоді склад є кращим, оскільки у випадку успадкування незначні зміни здебільшого зачіпають всю ієрархію успадкування.
Висновок
У цьому підручнику ми обговорили взаємозв'язок HAS-A у Java. Композиція та агрегація - це форми, що реалізують взаємозв'язок 'HAS-A'. Ми порівняли обидві ці реалізації.
Хоча обидва містять об’єкти іншого класу, композиція володіє об’єктом, тоді як агрегація просто використовує об’єкт. Ми також порівняли склад та спадщину в Java.
=> Перегляньте тут, щоб побачити A-Z підручників із навчання Java.
Рекомендована література
- Підручник з Java SWING: Контейнер, компоненти та обробка подій
- Підручник JAVA для початківців: 100+ практичних навчальних посібників Java
- TreeMap в Java - Підручник з прикладами Java TreeMap
- Підручник з Java Float із прикладами програмування
- Рядок Java із підручником для буфера рядків та побудови рядків
- Розгортання Java: створення та виконання файлу Java JAR
- Java Class Vs Object - Як використовувати клас і об'єкт в Java
- Основи Java: Синтаксис Java, клас Java та основні концепції Java