Введение: у меня инженер-механик, но я посещал занятия по программированию встраиваемого программного обеспечения (на милом маленьком роботе) с намерением улучшить некоторые навыки программирования, которые у меня уже были. Тем не менее, класс был в значительной степени неудовлетворительным в том, чего я надеялся достичь (в основном, он преподавал основы C++ с некоторыми очень поверхностными шаблонами композиции).
Вопрос Нам сказали сделать наш код несколько объектно-ориентированным, определив классы для различных частей кода. Поскольку все части были очень зависимы друг от друга, общая структура выглядела следующим образом (в основном, класс Drive, Sensors и WorldModel с некоторыми зависимостями, и класс Director, пытающийся заставить нашего робота решать поставленную задачу).
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;
};
На самом деле это очень сжатая версия. Однако мне кажется, что это не столько объектно-ориентированный код, сколько Clumsily Split-Up Code™. В частности, казалось почти невозможным сделать, например. класс Sensors
получает данные из класса Drive
без какого-либо обмана в классе Director
(т. е. сначала выполняет функцию в классе Drive, чтобы получить заданное значение скорости, а затем предоставляет это методу update()
в классе Sensors
, чтобы выполнить некоторые действия Калмана). фильтрация).
Как создать проект на С++, в котором различные части сильно зависят друг от друга, и при этом не стать проблемой? Я прочитал ответ SO на интерфейсах, но я не уверен, как применить это к этой проблеме - так ли это? идти сюда? Существует ли шаблон проектирования (не обязательно объектно-ориентированный), который подходит для таких проектов, как этот?