Введение: Я пришел из инженерного фона, но занял класс во встроенном программном обеспечении (на прекрасном маленьком роботе) с намерением улучшить некоторые навыки, которые у меня были в программировании. Однако класс был в значительной степени неудовлетворительным в том, чего я надеялся достичь (в основном, он преподавал основы C++ с некоторыми очень поверхностными композиционными шаблонами).Как создать свободную связь между частями проекта?
Вопрос Нам сказали, что наш код несколько ориентирован на объекты, определяя классы для различных частей кода. Поскольку все части были очень зависимы друг от друга, общая структура выглядела следующим образом (в основном, класс Drive, Sensors и WorldModel с некоторыми зависимостями и класс директора, который пытался заставить наш робот решить задачу под рукой)
class Drive{
void update();
Drive(Sensors & sensors);
private:
Sensors & sensors
};
class Sensors{
void update();
}
class WorldModel {
void update();
WorldModel(Sensors & sensors, Drive & drive);
private:
Sensors & sensors;
Drive & drive;
};
class Director {
void update();
Director(Sensors & sensors, Drive & drive, WorldModel & worldmodel);
private:
Sensors & sensors;
Drive & drive;
WorldModel & worldmodel;
};
Это на самом деле чрезвычайно сжатая версия. Мне кажется, однако, что это не действительно объектно-ориентированный код целых Неудобно разделить код ™. В частности, было почти невозможно сделать, например, класс Sensors
получает данные из класса Drive
без каких-либо ошибок в классе Director
(т. е. сначала выполнить функцию в классе Drive для получения заданного значения скорости, а затем предоставить это методу update()
в классе Sensors
, чтобы сделать некоторый Кальман фильтрация).
Как создать проект на C++ с различными частями, которые очень зависимы друг от друга, без каких-либо проблем? Я прочитал ответ SO на interfaces, но я не уверен, как применить это к этой проблеме - это даже путь сюда? Существует ли шаблон проектирования (не обязательно объектно-ориентированный), который подходит для таких проектов, как этот?
Я бы сказал, что, если вы думаете, «Объектно-ориентированный» как-то указывает на «Интерфейсы» (т.е. во время выполнения полиморфизм), то вы должны, вероятно, оставить это для C++. В областях, где C++ лучше всего подходит, я думаю, что эта модель OO редко бывает самой полезной – sehe
@sehe Я не говорю, что я обязательно хочу объектно-ориентированный код - это просто, что этот код был половинчатой попыткой ООП, которая была никогда не объяснял более подробно, чем «Классы». Все может быть публичным и частным. Получайте удовольствие! » – Sanchises
Я думаю, что когда вы сделаете «удовольствие», вы узнаете все остальное. Либо это, либо прочитайте некоторые книги. Я не думаю, что SO - это хорошее место, чтобы сослаться на учебники, к сожалению – sehe