1. Не понятно, как вы из существования классов, реализующих
унифицированную работу с какой-то внешней аппаратурой пришли к
выводу об избыточной инкапсуляции. Я ведь не дал больше никаких
деталей. Предлагаете разбить это на модель контроллер и вид? А
зачем? Оператор вообще не работает с такой сущностью как
"частотник"/"пусковая аппаратура". Да и пользовательский интерфейс
тут не самая важная часть. Это автоматика, она большую часть
времени без присутствия чаловека работает. 2. Модульность и повторное использование у меня наблюдается на уровне модулей, реальзующих какую-то логически законченную необходимую для решения задачи функциональность: движок пользовательского интерфейса, шрифты, стек протоколов, RTOS, ведение протоколов и обработка аварий, много всякого. На уровне классов это не отражается примерно никак, потому что стек протоколов это своя куча файлов исходников, RTOS своя куча классов, а шрифты это набор блоков данных, еще и сгенерированных по большей части автоматически. Я не фанатик C++ чтобы все это разнородное добро пытаться завернуть в классы. Т.е. повторно используются не классы, а типовые решения.