Товарищ
VoidVolker очень правильно все расписал.
В просторечье это выглядит, у меня, так:
- пишем код,
- видим, что часть кода повторяется
- выносим повторяющийся код в функции
- этих функций становится много
- выносим эти функции в модуль
Тоже самое делаем и с классами.
Про декомпозицию - логические куски кода раскладываем по разным деревьям-модулям.