Модуль закончился, и стоит собрать всё вместе. Мы разобрали четыре концепции, и у каждой оказался свой вопрос, на который она отвечает.
| Концепция | Отвечает на вопрос | Чем записывается |
|---|---|---|
| Инкапсуляция | что спрятать внутри объекта | модификаторы доступа, регистр имени, соглашения |
| Наследование | как переиспользовать чужое поведение | базовый класс, extends, двоеточие |
| Полиморфизм | как работать с объектом, не зная его типа | интерфейсы, виртуальные методы, перегрузка, обобщения |
| Абстракция | какие детали вообще существенны | ничем конкретным – это решение проектировщика |
Попутно выяснились вещи, которые в определениях не написаны.
Инкапсуляция – не про защиту от злоумышленника. Ни один механизм не спасает от намеренного обхода: рефлексия, указатели и знание правил именования вскрывают что угодно. Пометка доступа адресована коллеге и вам самому через полгода.
Наследование – самая дорогая связь из возможных. Оно тянет за собой не только методы, но и обязательства, и вместе с бананом достаётся горилла с джунглями. Отношений между классами четыре, и «является» – только одно из них; чаще нужны ассоциация, агрегация или композиция.
Полиморфизм – не интерфейс. Это свойство, у которого нет единственной записи: только в C# его выражают пятью разными способами, и они отличаются тем, когда делается выбор и во что он обходится.
Абстракция – не механизм, а навык. Ключевого слова для неё нет ни в одном языке, зато именно от неё зависит, окажется ли остальное на своих местах.
Что дальше
Эти четыре концепции – костяк ООП. Дальше в курсе никаких новых механизмов языка уже не появится: ни классов, ни интерфейсов, ни ключевых слов вы больше не встретите. Всё остальное строится ровно из того, что вы уже знаете.
Но именно это остальное отделяет работающий код от поддерживаемого. Знать, что такое интерфейс, и понимать, когда его вводить, – разные умения, и второе не выводится из первого.
- GRASP отвечает на вопрос «кому поручить обязанность»: где должен жить метод, кто создаёт объект, кто с кем разговаривает.
- SOLID – набор проверок на прочность: выдержит ли ваша конструкция изменение требований и в каком месте треснет.
- Паттерны GOF – готовые ответы на задачи, которые встречались до вас тысячи раз, с именами, по которым их узнают в любой команде.
Механизмы вы уже знаете – дальше речь пойдёт о решениях. Именно они, а не синтаксис, отличают инженера от того, кто просто пишет код на объектном языке.