Функциональные языки требуют, чтобы вы думали о программах как о композициях функций.
роцедурное ПО использует процедурные вызовы, которые мы называем функциями. Эти функции не инкапсулированы в классы, поэтому часто опираются только на свои входные данные и иногда на какое-то глобальное состояние.
Инкапсуляция и абстракция нередко являются итеративными процессами. Когда вы пишете больше кода, конструкции могут терять свой первоначальный смысл, что вполне естественно. Если код взбунтовался, нужен рефакторинг — обновление структуры кода для более полного удовлетворения ваших потребностей. Придется поменять способы представления понятий и форм поведения. Перемещение данных и имплементаций туда-сюда является необходимой частью совершенствования кода.
Крепостная стена инкапсуляции подразумевает приватность. Классы могут иметь приватные методы и данные, доступные только экземплярам класса. В свою очередь, с публичными методами и данными (интерфейсом класса) другие классы могут взаимодействовать.
Вместо строгой поддержки приватности Python доверяет разработчикам, следующим общепринятой договоренности: методы и переменные, предназначенные для использования только внутри класса, имеют префикс из символа подчеркивания. Но сторонние пакеты в своей документации часто громко заявляют о том, что такие методы могут меняться от версии к версии и на них не следует опираться явно.
Инкапсуляция является базисом объектно-ориентированного программирования. Она продвигает декомпозицию еще на один шаг вперед: в то время как декомпозиция группирует связанные между собой операции в функции, инкапсуляция группирует связанные между собой функции и данные в более крупную конструкцию. Эта конструкция действует для внешнего мира как барьер (или капсула).
Рис. 3.4. Разложение на гранулярные компоненты облегчает понимание
Основная мысль в том, что софт, написанный мелкими частями, работающими в тандеме, удобнее в сопровождении, чем написанный одним крупным кодом.
Абстракция уменьшает когнитивную нагрузку и объем ваших умственных затрат на постижение неизвестного, оставляя вам больше времени на поддержание качества ПО!
Совет
Python позволяет добавлять дополнительный контекст в модуль, класс, метод или функцию с помощью литералов документирования docstring. Литералыдокументирования — это специальные строки в начале конструкций, которые рассказывают читателю (а также некоторому автоматизированному ПО) о характере поведения кода. Больше о литералах документирования — в Википедии (https://en.wikipedia.org/wiki/Docstring).