Как ты правильно заметил, программы и её блоки имеют между собой зависимости. Хороший код минимизирует зависимости между блоками, а связи делает понятными и очевидными.
Для того, чтобы писать такой код, прежде всего нужен опыт.
Поэтому программирование на ООП это не просто набор знаний - это искусство. А в этом деле нужен опыт и чутье (хотя это тот же опыт).