Программа курса← Объектно ориентированное программирование
1История ООП
2Объект и Класс
3Базовые концепции ООП
4Принцип проектирования GRASP
5Принцип проектирования SOLID
6Паттерны GOF
7Методические материалы

Вывод

Модуль закончился, и стоит собрать всё вместе. Мы разобрали четыре концепции, и у каждой оказался свой вопрос, на который она отвечает.

Концепция Отвечает на вопрос Чем записывается
Инкапсуляция что спрятать внутри объекта модификаторы доступа, регистр имени, соглашения
Наследование как переиспользовать чужое поведение базовый класс, extends, двоеточие
Полиморфизм как работать с объектом, не зная его типа интерфейсы, виртуальные методы, перегрузка, обобщения
Абстракция какие детали вообще существенны ничем конкретным – это решение проектировщика

Попутно выяснились вещи, которые в определениях не написаны.

Инкапсуляция – не про защиту от злоумышленника. Ни один механизм не спасает от намеренного обхода: рефлексия, указатели и знание правил именования вскрывают что угодно. Пометка доступа адресована коллеге и вам самому через полгода.

Наследование – самая дорогая связь из возможных. Оно тянет за собой не только методы, но и обязательства, и вместе с бананом достаётся горилла с джунглями. Отношений между классами четыре, и «является» – только одно из них; чаще нужны ассоциация, агрегация или композиция.

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

Абстракция – не механизм, а навык. Ключевого слова для неё нет ни в одном языке, зато именно от неё зависит, окажется ли остальное на своих местах.

Что дальше

Эти четыре концепции – костяк ООП. Дальше в курсе никаких новых механизмов языка уже не появится: ни классов, ни интерфейсов, ни ключевых слов вы больше не встретите. Всё остальное строится ровно из того, что вы уже знаете.

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

  • GRASP отвечает на вопрос «кому поручить обязанность»: где должен жить метод, кто создаёт объект, кто с кем разговаривает.
  • SOLID – набор проверок на прочность: выдержит ли ваша конструкция изменение требований и в каком месте треснет.
  • Паттерны GOF – готовые ответы на задачи, которые встречались до вас тысячи раз, с именами, по которым их узнают в любой команде.

Механизмы вы уже знаете – дальше речь пойдёт о решениях. Именно они, а не синтаксис, отличают инженера от того, кто просто пишет код на объектном языке.