Здравствуйте, _hum_, Вы писали:
__>если "необязательно", то тогда ж принципиально невозможно обойтись без перекомпиляции связанных частей (манипуляции с инклюдами и форвардами позволяют только технически развязать то, что ЛОГИЧЕСКИ развязано)
Есть, например, паттерн
Dependency injection. Он, помимо всяких плюсов вроде облегчения unit-тестирования, вполне способен порезать и «логически связанные» части программы. Конечно, в include останется какая-то часть, отвечающая за общий интерфейс. Но в контексте этой темы это не так важно: объявление абстрактного базового класса не сильно замедляет компиляцию. Но зато реализация может уже собираться независимо от вызывающего кода. И перекомпилироваться будут всегда лишь какие-то малые части библиотек. Разумеется пока интерфейс не поменяется — но он как бы и не должен часто меняться.