| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Системный анализ, проектирование и UML > Возможна ли замена типа поля у предков |
| Автор: AnTeml 16.7.2012, 09:18 | ||
| Здравствуйте. Который раз уже наталкиваюсь на одну и ту же проблему. Особенно часто она возникает, когда сопровождаются две параллельные структуры. Вот, наконец-то, вычленился простой для понимания пример. Пишу базис для игры, для возможности замены технических средств отображения контролов использую паттерн "мост". Получается, у меня две параллельные структуры - структура классов контролов, которая развивается по своим законам и структура конкретных реализаций, которая местами схожа, а местами живёт совершенно своей жизнью Проблема возникает на самом первом этапе:
можно ли в классе TMyWindow - наследнике от TMyControl под именем imp использовать не TControlImp, а TWindowImp, который, в свою очередь, является наследником TControlImp? Или без приведения типов тут никак не обойтись? Вопрос интересует как по Delphi, так и по другим языкам, где как решается подобное? Или можно структуры классов как-нибудь по-другому определить? |
| Автор: AnTeml 22.7.2012, 18:48 |
| Мда, присмотрелся я к своей структуре, и понял, что структуру "имплементаций" так, как я создаю, создавать нельзя - для каждого контрола должен быть отдельный объект, без какой-либо иерархии. Похоже, что так. Товарисчи! Не подскажете какой-нибудь тред, а лучше форум, где обсуждают вопросы проектирования? |
| Автор: k0rvin 28.8.2012, 21:05 | ||||
Че-то я нифига не понял. Обычно в таких случаях используют интерфейсы, что-то типа:
соответственно использовать примерно так
Или я чего-то не понял? В общем-то можно обойтись и без интерфейсов, но с ними гибче. |
| Автор: AnTeml 31.8.2012, 13:37 |
| Вот честно, интерфейсы практически не использовал, знаком только с общими понятиями. Однако, думаю, я имел в виду несколько другое. Класс MyControlImp (реализация контрола) ничего не знает о MyControl, так же и MyWindowImp ничего не знает о существовании MyWindow Реализация - это реализация базового функционала, на котором основывается главный класс Например, MyWindowImp умеет отображать окно в нужном месте, а MyWindow умеет танцевать (вызывая в определённом порядке метод отображения), и MyWindowImp не должен наследоваться от MyWindow - он ничего не должен знать о танцах, в MyWindowImp реализуют отображение в заданной точке для определённой операционной системы, например ЗЫ как раз вернулся с отпуска, сегодня засел за эту задачу. Отпишусь по результатам |
| Автор: k0rvin 1.9.2012, 10:02 | ||
Ну значит наоборот, MyControlImp -- базовый, а MyControl -- дочерний. В общем-то посмотри иерархию классов VCL. |