|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Wild_klas : 54 Новичок
|
Янв 22, 2012 19:35 |
|
|
Здравствуйте! Я разбираюсь с агрегацией и композицией. Что это такое я вычитал из литературы и здесь на форуме очень хорошо расписано. Но есть одно но, я не могу понять как это все использовать в коде.
Кто знает объясните пожалуйста. _________________
 |
|
|
|
 |
Pomkine : 2 Новичок
|
Янв 22, 2012 21:13 |
|
|
Например, у нас есть независимые друг от друга классы Car, Driver, Speed.
Создаём класс MovingCar :
| Код: |
public class MovingCar extends Car {
Driver driver;
Speed speed;
...
} |
|
|
|
|
 |
мсье клоц : 556 Постоянный посетитель
|
Янв 22, 2012 22:07 |
|
|
| Pomkine писал(а): |
Например, у нас есть независимые друг от друга классы Car, Driver, Speed.
Создаём класс MovingCar :
| Код: |
public class MovingCar extends Car {
Driver driver;
Speed speed;
...
} |
|
И что это, агрегация или композиция?
| Wild_klas писал(а): |
Здравствуйте! Я разбираюсь с агрегацией и композицией. Что это такое я вычитал из литературы и здесь на форуме очень хорошо расписано. Но есть одно но, я не могу понять как это все использовать в коде.
Кто знает объясните пожалуйста. |
Думаю, для начала будет неплохо уяснить для себя (мне, кстати, тоже), что именно означают термины агрегация и композиция в отрыве от контекста ООП. Предлагаю начать с этого: http://www.thefreedictionary.com/aggregate http://www.thefreedictionary.com/compose.
[from Old French composer, from Latin compōnere to put in place; see component]
[from Latin aggregāre to add to a flock or herd, attach (oneself) to, from grex flock]
Из этого можно сделать вывод, что композиция представляет собой объект, состоящий из компонентов, т.е. то, без чего ну никак нельзя (человек - печень), агрегация же, скорее, означает принадлежность к этому объекту (человек - номер телефона).
Не подумайте, что я издеваюсь, это на самом деле может многое прояснить.
p.s.
Я могу ошибаться, т.к. сам не имею четкого представления по этому поводу, но, как понимаю, использовать в коде можно вот так:
| Код: |
public class Person {
String name;
String phoneNumber;
Liver liver;
Person(String name, String phoneNumber){
this.name = name;
this.phoneNumber = phoneNumber;
liver = new Liver();
}
public static void main(String[] args) {
String phoneNumber = "555-SHOE";
Person pa = new Person("Al", phoneNumber);
Person ma = new Person("Peggy", phoneNumber);
Person son = new Person("Bud", phoneNumber);
Person daughter = new Person("Kelly", phoneNumber);
}
}
|
Каждая персона имеет печень, имя и номер телефона, однако номер телефона они делят между собой, в то время как печень и имя у каждого свои. Мне кажется это логичным. |
|
|
|
 |
Wild_klas : 54 Новичок
|
Янв 29, 2012 10:16 |
|
|
Спасибо. _________________
 |
|
|
|
 |
Wild_klas : 54 Новичок
|
Янв 30, 2012 20:04 |
|
|
В конечном итоге у меня получилось такое:
| Код: |
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
}
}
class Computer{
float chastota;
float ram;
String nameProc;
float video;
Keyboard kl;
Computer(){
}
}
class Keyboard {
String name;
int knopok;
Button but1[];
public Keyboard() {
}
}
class Mouse{
String name;
MouseButton mb;
public Mouse() {
}
}
class MouseButton{
int knopok;
public MouseButton() {
}
}
class Button{
public Button() {
}
} |
Понятное определение:
| Цитата: |
Агрегация – это свободный тип отношения между объектами – как
между компьютером и его периферийным оборудованием.
Композиция – это очень строгий тип отношения между объектами –
как между деревом и его листьями.
|
В моем примере:
Компьютер - клавиатура - это агрегация.
Мишка - кнопки мишки - композиция. Клавиатура - кнопки клавиатуры - тоже композиция.
Может кому - то пригодиться. _________________
 |
|
|
|
 |
__teoREtik__ : 64 Новичок
|
Янв 30, 2012 20:56 |
|
|
Да, уж.
А если проще: композиция - это разновидность жесткой взаимосвязи между объектами, составляющими класс. Когда объект уничтожается, объекты, составляющие его, также уничтожаются.
Агрегация - это вид взаимосвязи объектов в классе, когда при уничтожении объекта этого класса, они могут и не уничтожиться (на них ссылаются в другом месте программы). |
|
|
|
 |
Taky_ : 491 Бывалый
|
Янв 31, 2012 14:57 |
|
|
На практике, важное различие - время жизни.
Если время жизни у объектов одинаковое, то это композиция и отношение можно рассматривать как "владение".
Если время жизни разное, то это просто агрегация. Мы осведомлены об этом объекте, однако он живет сам по себе. |
|
|
|
 |
Староверъ : 7620 Ктапубеп Откуда: Elfland
|
Янв 31, 2012 16:14 |
|
|
|
|
|
|
 |
Taky_ : 491 Бывалый
|
Янв 31, 2012 17:06 |
|
|
Т.е. там утверждается обратное про время жизни?
Но не опровергается тот факт, что композиция является более сильным отношением, относительно агрегации? |
|
|
|
 |
Староверъ : 7620 Ктапубеп Откуда: Elfland
|
Янв 31, 2012 23:50 |
|
|
|
|
|
|
 |
Taky_ : 491 Бывалый
|
Фев 01, 2012 11:14 |
|
|
Цитата из UML основы, Фаулера:
| Цитата: |
| При композиции объект-часть может принадлежать только единственному целому; кроме того как правило, жизненый цикл частей совпадает с жизненным циклом целого: части живут и умирают вместе с целым. |
Также Фаулер упоминает, что понятие агрегация не совсем согласована в разных работах.
Если обратиться к "UML. Руководтсво пользователя". То она дает следующие отношения агрегирования и композиции:
| Цитата: |
Агрегирование - специальный вид ассоциации, описывающий отношение между агрегатом(целым) и компонентом (частью).
Композиция - форма агрегирования, в котором целое владеет своими частями, имеющими одинаковое время жизни. |
У меня это расхождение ни раз вызывало путаницу.
А нечто обратное надо полагать сказано в: http://www.ozon.ru/context/detail/id/5497184/
Domain-Driven Design. Tackling Complexity in the Heart of Software
Автор: Эрик Эванс
Переводчик В. Бродов
P.S. Я немного сконфужен, казалось бы базовые понятия... |
|
|
|
 |
javadranik : 18 Новичок
|
Фев 01, 2012 21:30 |
|
|
Сразу скажу, то что написано ниже может быть не верным.
Я воспринимаю так:
Есть класс Дом(я имею ввиду 16-этажку) и есть класс Квартира.
Дом состоит из Квартир. Квартира и Дом - очень взаимосвязанные, одно без другого существовать не может, нельзя взять и выбросить из дома квартиру.
Если не будет дома, не будет и квартир. Если удалят дом, то и квартиры пропадут тоже.
Это композиция, жесткая связь.
И есть Мебель. Мебель обычно принято иметь в Квартире, но если ее не будет, то мир от этого не разрушиться.
Это агрегация.
Если я воспринимаю неправильно, исправьте пожалуйста. |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Основы языка Java |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|