Название: Агрегация по указателю или агрегация объекта Отправлено: blood_shadow от Октябрь 19, 2011, 21:01 Добрый вечер,
не хочу разводить холивары, но мучает постоянно один и тот же вопрос Допустим есть форма и класс диалога который должен использовать функционал этой формы, Диалог можно сделать 3 способами: множественным наследованием, агрегацией с помощью указателя и просто агрегацией объекта Код
Понятно что множественное наследование здесь вариант хуже всего, да и вообще множественное наследование редко когда сулит что-нибудь хорошее, а вот вопрос именно про 2 последних варианта, в первом случае наш объект формы будет жить в куче, а во втором на стеке, хотелось бы услышать мнение экспертов каков вариант лучше и какие есть +/- двух последних Спасибо :) Название: Re: Агрегация по указателю или агрегация объекта Отправлено: alexman от Октябрь 19, 2011, 21:12 2 и 3 мало чем отличаются, так как в форме все равно указатели хранятся.
Название: Re: Агрегация по указателю или агрегация объекта Отправлено: kambala от Октябрь 19, 2011, 21:30 тоже всегда интересовал этот вопрос применимо к UI в Qt - нигде не написано что и когда лучше использовать, а спросить как-то стеснялся :)
минус агрегации через указатель - надо писать delete в деструкторе и new в конструкторе (лишние символы) :) потому всегда пользуюсь "просто" агрегацией. Название: Re: Агрегация по указателю или агрегация объекта Отправлено: blood_shadow от Октябрь 19, 2011, 21:32 тоже всегда интересовал этот вопрос применимо к UI в Qt - нигде не написано что и когда лучше использовать, а спросить как-то стеснялся :) та тут все свои нечего стеснятся ;)Цитировать минус агрегации через указатель - надо писать delete в деструкторе и new в конструкторе (лишние символы) :) потому всегда пользуюсь "просто" агрегацией. я тож так делаюНазвание: Re: Агрегация по указателю или агрегация объекта Отправлено: Akon от Октябрь 19, 2011, 21:38 В общем случае вариан с указателем более гибкий:
- позволительно forward declaration (т.е. меньше зависимостей времени компиляции); - есть возможность хранить агрегаты полиморфных типов (паттерн стратегия); - полный контроль над временем жизни агрегата (создание и удаление в любое время); в частности, очень распространена lazy initialization; - в случаях, где это имеет смысл, можно использовать shared-агрегаты. Вариант с объектом-членом более прост, и если перечисленные выше достоинства по боку, следует использовать именно его. Вариант с множественным наследованием, но только с закрытым (наследование реализации), близок варианту с объектом-членом, но имеет "потенциальные проблемы множественного наследования". Если таких проблем не предвидится, возможно, следует использовать его по причине меньшего синтаксиса (в ущерб читаемости). В литературе под тем, что вы обозначили агрегацией, используется термин композиция (composition - закрашенный ромб в UML). Агрегация - это когда агрегируемые объекты не уничтожаются владельцем. В русском переводе GoF агрегация именуется "отношением осведомленности". Название: Re: Агрегация по указателю или агрегация объекта Отправлено: Igors от Октябрь 20, 2011, 08:40 В данном случае "без разницы", экономия на написании неск строк несущественна. В любом случае "Ui" всецело принадлежит диалогу. Не видно реальных вариантов когда член Ui может передаваться "из рук в руки", совместно использоваться, быть полиморфным и.т.п. (здесь хорош указатель). Множ наследование, на мой взгляд, ничем здесь не плохо, пожалуй даже "самое идейное". Но раскрыть здесь свои сильные стороны - тоже не видно где.
Ну и как вариант - обойтись вообще без "ритуального" класса Ui :) Название: Re: Агрегация по указателю или агрегация объекта Отправлено: blood_shadow от Октябрь 20, 2011, 10:35 Ну и как вариант - обойтись вообще без "ритуального" класса Ui :) насчет этого не понял это как? прописывать форму вручную?Название: Re: Агрегация по указателю или агрегация объекта Отправлено: Igors от Октябрь 20, 2011, 17:50 насчет этого не понял это как? прописывать форму вручную? Лучше грузить из ресурса |