LINUX.ORG.RU

Нужна помощь в создание иерархтии объектов

 


0

2

В общем придумал 2 варианта, но мне они «леповатыми» кажутся:
http://imageshack.us/f/33/tmp1.png
http://imageshack.us/f/210/tmp2y.png

Надеюсь идея понятна.
Сделать класс для управления группами наследников от Obj, который сам образован от Obj. Как лучше всего организовать подобную архитектуру? Как правильно ответвить Template-классы.

Спасибо.

★★★★★

Надеюсь идея понятна.

Только твоим дружкам-грибам.

anonymous
()

Шаблоны хороши как раз тем, что не вносят требований типа «все объекты наследуются от Obj».

annulen ★★★★★
()

Когда я вижу такие иерархии, то у меня складывается впечатление, что это нагромождение ради нагромождения при строительстве которого напрочь забыли исходную задачу.

Reset ★★★★★
()

Надеюсь идея понятна.

Мне с большим трудом, учитывая форму её представления. Уж лучше бы подробнее словами, UML-диаграмму или декларации классов как в заголовочных файлах.

Но судя по тому, что я понял, кажется тут подойдёт шаблон с двумя параметрами: типом объекта и контейнера. А дальше уже путём специализаций добавлять в них необходимые методы и поля.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Если подробнее, то я хотел бы сделать абстрактный класс(предок всех менеджеров), но не знаю как быть с полем objs.
Сначала хотел опустить его, тем самым подразумевая добавление поля в классах-наследниках(естественно снабдив предупредительным комментарием). Но побоялся, что на это будут плевать и имена пойдут в разнобой, что может ухудшить читаемость кода.
Затем решил создать шаблон, но не знал как правильно его реализовать.
Не знал как разрулить ту ситуацию, что одни контейнеры принимают один параметр, другие 2, ну и вдруг кому пригодиться запилить свой велосипед или еще чего. По этому я склоняюсь к супер-предку от которого можно и шаблоны строить и седьмую воду на киселе.
Может где опять туго выразился или неверен ход мысли говорите.
Буду рад услышать конструктивную критику.

Еще раз спасибо всем, кто откликнулся.

deterok ★★★★★
() автор топика
Ответ на: комментарий от Reset

Мне это самому не нравится. Я думал много о том, как все это правильно реализовать но пока в голову приходят только эти нагромождения.

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

но пока в голову приходят только эти нагромождения.

Про делегирование благородный дон, по ходу, не слышал. Исходная задача то какая, проэктировщег?

anonymous
()
Ответ на: комментарий от Reset

Когда я вижу такие иерархии, то у меня складывается впечатление, что это нагромождение ради нагромождения при строительстве которого напрочь забыли исходную задачу.

Сразу видно опытного программиста и архитектора, одного уровня с Фаулером, Бучем, Блохом.

anonymous
()
Ответ на: комментарий от deterok

Наследование - сильная связь, сильнее только дружба. Сильных связей лучше избегать.

annulen ★★★★★
()
Ответ на: комментарий от deterok

Как то странно называть такие классы менеджерами, они скорее коллекции, по моим представлениям. Но, видимо, дело привычки, да и что их методы будут делать мне не известно.

Единый предок для таких вещей скорее не будет содержать реализации вообще, учитывая отличия контейнеров. А общий интерфейс будет очень ограниченным; различия в доступе к данным будет тому причиной. Можно извратиться и поместить разные типы данных в базовый класс на шаблонах, но его инстансы будут иметь различные типы для каждого типа данных, а значит не будут взаимозаменяемыми. Так что это не имеет большого смысла. Если посмотреть на те же коллекции в Java, то там для разных групп контейнеров различные интерфейсы (List, Map), просто потому что свести их в один общий получится с трудом (интерфейс Collection тому пример, он очень ограничен по своим возможностям).

Как указали другие отвечающие, лучше проанализировать решаемую задачу ещё раз и не пытаться изобрести универсальное решение. Если разработка такой иерархии это попытка использовать все контейнеры единым образом, то это не совсем в стиле C++. «C++ way» будет определить шаблонные функции-алгоритмы для обработки контейнеров любого типа (с которыми работать только через итераторы). Если есть и другие причины, то иерархия коллекций Java может быть хорошим примером (разработать лучше врятли получится).

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Спасибо, почитаю про устройство коллекций.

deterok ★★★★★
() автор топика

Чувак, осиль UML же.

Dudraug ★★★★★
()
Ответ на: комментарий от Reset

Вы оказались правы, все эти нагромождения уводили меня от истинной задачи, обошелся 2-мя простенькими шаблонами.

deterok ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.