Я думаю, что компонентное программирование - это, по сути, переосмысление oo.
оо, стремился быть черным ящиком ... но не так, компонентное программирование пытается быть черным ящиком.
как результат, я думаю, что компонентное программирование подразумевает больше проектирования (в позитивном ключе) - потому что для того, чтобы быть черным ящиком, вы должны предвидеть будущие сценарии использования и уже учли их.
Это также подразумевает психологию документации тщательного тестирования, которая, по моему опыту, в любом случае, похоже, отходит на второй план в кодировании oo.
Таким образом, вы бы обеспечили поддержку потоков и асинхронности. Вы бы опубликовали интерфейсы, документацию и юнит-тесты. Иметь четкую структуру событий и поведение.
Практически все, что вы можете, чтобы позволить кому-то повторно использовать его и помочь ему в этом.
Дело в том, что компонент имеет четко определенный интерфейс и четко определенную функцию. Фактические детали реализации не являются частью этого, потому что они выходят за рамки при рассмотрении, как использовать компонент. Т.е. компонент может быть довольно сложным набором объектов.