Функциональные языки требуют, чтобы вы думали о программах как о композициях функций.
роцедурное ПО использует процедурные вызовы, которые мы называем функциями. Эти функции не инкапсулированы в классы, поэтому часто опираются только на свои входные данные и иногда на какое-то глобальное состояние.
Инкапсуляция и абстракция нередко являются итеративными процессами. Когда вы пишете больше кода, конструкции могут терять свой первоначальный смысл, что вполне естественно. Если код взбунтовался, нужен рефакторинг — обновление структуры кода для более полного удовлетворения ваших потребностей. Придется поменять способы представления понятий и форм поведения. Перемещение данных и имплементаций туда-сюда является необходимой частью совершенствования кода.