Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Взаимодействие между классами


Автор: deaks 16.2.2011, 17:03
Добрый день,

посоветуйте, как лучше всего(в рамках чистого с++) в данном случае организовать передачу данных между классом MissileDynamic и MissileACS - ситуация, когда один класс использует переменную, а потом второй хочет ее так же видеть
По хорошему они не должны знать друг о друге ничего. И все должно реализоваться через Object, который в себя включает Динамику(Dynamic) и Управление(Control) и предоставляет интерфейсы для общения со своими потомками

Соответственно система включает в себя еще больше компонентов, показана лишь часть.
user posted image

Автор: bsa 16.2.2011, 17:48
Это говорит об ошибке проектирования... Давай поподробней о переменной и зачем она нужна классам.

Автор: deaks 16.2.2011, 17:52
Грубо говоря:
класс Динамики - инициализирует переменную Скорость и изменяет в процессе работы,
а класс Управления - использует эту переменную допустим для расчета маневра

Автор: bsa 16.2.2011, 18:25
координаты, скорость, ускорение - это характеристики объекта. Поэтому логично перенести их в соответствующий класс. Как вариант, можно сделать класс DynamicObject (наследник Object), у которого есть эти характеристики. А IControl и IDynamic умеют работать уже с ним, а не с Object.

Автор: deaks 16.2.2011, 18:50
да, со скоростью я привел неудачный пример:

примерно так - объекты могут быть двух типов: самолет и машина

в Динамике самолета присутствует величина Угол атаки, которая несвойственна машине и поэтому ее нельзя выделить в параметры объекта. Следовательно как-то этот угол атаки надо протащить до Управления. Как быть?)

Автор: bsa 17.2.2011, 12:15
deaks, значит должно быть "управление", которое работает только с самолетом. Нет же смысла его использовать для объекта "машина".

Автор: mes 17.2.2011, 16:41
Цитата(bsa @  17.2.2011,  11:15 Найти цитируемый пост)
 значит должно быть "управление", которое работает только с самолетом

и если нужно по полиморфной базе определить кем , является в действительности объект, то
1. id + static_cast
2. dynamic_cast
3. double dispatch
третий наиболее безопасный и удобный способ, но требует стабильной иерархии и некоторой подготовки исполнителя, в связи с чем, судя по формулировке вопроса, тс будет трудновато..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)