Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Композиция vs Делегирование |
Автор: initmax 13.10.2009, 21:52 | ||||||||||
Перерыл инфы, пытаюсь разобраться в нижеизложеных понятиях, если чего не верно/полно прошу подправить 0) Делегирование : Создание классов с использованием объектов сторонних классов, например
Данный подход позволят создать новый класс на основе готовых объектов с дальнейшим вызовом их методов 1) Композиция || Агрегирование || Агрегация: Включение в тело класса тела сторонних классов, подразумевают методику создания нового класса из уже существующих классов
если в результате будут использованы методы из классов зачем это разделение на Композицию и Делегирование? только ради того дабы получить доступ к методам сторонних классов в теле базового класса не создавая при этом объект? |
Автор: Старовъръ 13.10.2009, 22:06 |
Лень было все читать, просто напишу: Делегирование - передача обязанностей другому объекту. Ассоциация - обычное владение объектом. Агрегация - владелец состоит из объектов, которые есть неотъемлемой его частью. Композиция - владелец состоит из объектов, которые есть неотъемлемой его частью, и эти объекты не могут жить вне владельца. |
Автор: Старовъръ 14.10.2009, 08:06 | ||
Можно сказать так: агрегация - это разновидность ассоциации, когда один объект состоит из других. композиция - это разновидность агрегации, когда объект-владелец контролирует еще и жизненный цикл других объектов(т.е. они умирают вместе с ним, они не существуют вне его). В UML ассоциация обозначается обычной стрелочкой(некоторые обозначают без наконечника), агрегация - стрелочкой с ромбиком, композиция - стрелочкой с закрашенным ромбиком. |
Автор: Andy_L20066 21.10.2009, 15:50 | ||
привет, интересный вопрос... я когда-то читал нечто подобное... вот что думаю по этому поводу: делегирование это нечто более "сложное" чем композиция, вот пример простой композиции:
здесь идет просто передача управления листу который фактически входит в состав обьекта A. Но это не совсем делегация, так как делегация предусматривает передачу обьекта (обьект1 передает получает риквест, и потом просто передает себя и риквест делегату(обьекту2). Ярким примером делегации является паттерн State, когда робота происходит в контексте, который делегирует себя конкретному обьекту (стейту), который изменяет контекст... вот здесь почитай про State: http://java-x.blogspot.com/2006/12/implementing-state-pattern-in-java.html |