Шпаргалка по принципам ООП

Обложка: Шпаргалка по принципам ООП

Чтобы стать программистом, нужно знать принципы ООП как Отче наш. Держите структурированную шпаргалку по объектно-ориентированному программированию.

• Четыре базовых принципа ООП: абстракция, полиморфизм, наследование и инкапсуляция • Вместе с наследованием используйте делегацию, композицию и агрегацию • Принципы SOLID помогают проектировать гибкие и поддерживаемые системы • Правило DRY: каждая часть логики должна существовать в единственном месте

Главное

  • Инкапсулируйте все, что может изменяться;
  • Уделяйте больше внимания интерфейсам, а не их реализациям;
  • Каждый класс в вашем приложении должен иметь только одно назначение;
  • Классы — это их поведение и функциональность.

Базовые принципы ООП

  • Абстракция — отделение концепции от ее экземпляра;
  • Полиморфизм — реализация задач одной и той же идеи разными способами;
  • Наследование — способность объекта или класса базироваться на другом объекте или классе. Это главный механизм для повторного использования кода. Наследственное отношение классов четко определяет их иерархию;
  • Инкапсуляция — размещение одного объекта или класса внутри другого для разграничения доступа к ним.

Используйте следующее вместе с наследованием

  • Делегация — перепоручение задачи от внешнего объекта внутреннему;
  • Композиция — включение объектом-контейнером объекта-содержимого и управление его поведением; последний не может существовать вне первого;
  • Агрегация — включение объектом-контейнером ссылки на объект-содержимое; при уничтожении первого последний продолжает существование.

Не повторяйся (Don't repeat yourself — DRY)

Избегайте повторного написания кода, вынося в абстракции часто используемые задачи и данные. Каждая часть вашего кода или информации должна находиться в единственном числе в единственном доступном месте. Это один из принципов читаемого кода.

Принцип единственной обязанности

Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче.

Принцип открытости/закрытости

Программные сущности должны быть открыты для расширения, но закрыты для изменений.

Принцип подстановки Барбары Лисков

Методы, использующие некий тип, должны иметь возможность использовать его подтипы, не зная об этом.

Принцип разделения интерфейсов

Предпочтительнее разделять интерфейсы на более мелкие тематические, чтобы реализующие их классы не были вынуждены определять методы, которые непосредственно в них не используются.

Принцип инверсии зависимостей

Система должна конструироваться на основе абстракций "сверху вниз": не абстракции должны формироваться на основе деталей, а детали должны формироваться на основе абстракций.

Часто задаваемые вопросы

Чем отличается инкапсуляция от абстракции?

Абстракция скрывает сложность, выделяя только существенные характеристики объекта. Инкапсуляция скрывает внутреннюю реализацию, ограничивая прямой доступ к данным через модификаторы доступа (private, protected). Абстракция отвечает на вопрос «что делает объект», а инкапсуляция — «как именно он это делает и кто имеет доступ».

Когда использовать наследование, а когда композицию?

Наследование подходит, когда между классами есть отношение «является» (is-a): например, Кошка является Животным. Композицию выбирают при отношении «содержит» (has-a): Автомобиль содержит Двигатель. На практике композиция предпочтительнее, потому что она даёт более слабую связанность и гибкость при изменениях.

Что такое SOLID простыми словами?

SOLID — это пять принципов проектирования, которые помогают писать поддерживаемый код. S — один класс решает одну задачу. O — расширяйте классы, не меняя их код. L — подклассы должны работать везде, где работает родительский класс. I — лучше несколько маленьких интерфейсов, чем один большой. D — зависьте от абстракций, а не от конкретных реализаций.

Перевод статьи «Object-Orientated Design Principles»