Здравствуйте, Andreev, Вы писали:
A>Для этого кода еще существует одна проблема:
A>Изначально строились три класса CPanel, CScreen и CElement. Все эти классы существуют как некий документ и не более. A> Панель — это класс некоторой панели(физическое устройство), которая в свою очередь содержит набор экранов(логические единицы панели), а экраны содержат элементы(логические единицы экрана).
A> Задача заключается в том, чтобы собрать редактор для добавления экранов в панель и расположения элементов внутри экранов, задавая им некоторые свойства в зависимости от типов. В конечном итоге, при помощи методов store() выгрузить все эти данные в программу управления реальной панелью, которая позволит получить на панели логическую систему меню, сообщений и форм ввода/вывода. A> Программа-транслятор, для реальной панели, так-же написана на c++, за исключением платформы(в настоящий момент используется DOS).
А что, под DOS таки существуют компиляторы C++?
A> Поэтому не хотелось делать несколько реализаций классов CPanel, CScreen и CElement для каждой платформы, а сделать всего-лишь один вариант с методами load() и store(). После чего, использовать эти классы в зависимости от того в какой программе они используются (редактор или транслятор), как некое хранилище данных.
Я так понимаю, в редакторе у этих классов одно поведение, в трансляторе другое? И набор методов разный. И всё разное, кроме представления данных. Так зачем хотеть реализовать оба проекта на одних и тех же классах?
A> Если использовать механизм наследования и создавать потомков класса CElement с готовыми методами для использования их в редакторе (т.е. некие методы DoSomething()), то в результате окажется, что при повторном использовании кода этого класса в трансляторе у меня появится неиспользуемый код, т.к. в трансляторе свойства элементов не меняются и остаются постоянными.
Любой мало-мальски уважающий себя компилятор выбросит неиспользуемый код и не будет включать его в финальный бинарник.
A> Кроме того — если отказаться от задания типов элементам, то транслятору будет достаточно тяжело определить какого типа элемент он обрабатывает.
Ему не нужно определять, ему нужно подсунуть элементу соответствующим образом реализованного visitor’а.