Объектно-ориентированное программирование в Java
ООП моделирует систему как взаимодействие объектов с состоянием, поведением и контрактами. Цель не в максимальном количестве классов, а в локализации правил и изменений.
Карта
- Классы и методы Java объекты — базовая механика;
- Инкапсуляция — защита инвариантов;
- Наследование — отношение подтипа;
- Полиморфизм — единый контракт, разные реализации;
- Основы ООП — абстракция и остальные опорные понятия;
- Ассоциация агрегация композиция — отношения и владение;
- Сравнение абстрактного класса и интерфейса — выбор формы контракта;
- Принципы SOLID — эвристики изменения зависимостей;
- Пакеты Java и Модификаторы доступа — границы.
interface PricePolicy {
Money calculate(Cart cart);
}
final class Checkout {
private final PricePolicy policy;
Checkout(PricePolicy policy) {
this.policy = policy;
}
}Checkout зависит от контракта, а конкретную политику можно заменить. Это одновременно композиция, инкапсуляция и subtype polymorphism.
Быстрая проверка
Всегда ли наследование означает хороший дизайн? Нет, подтип обязан сохранять контракт родителя.
Инкапсуляция равна private-полям? Нет, поля лишь инструмент; главное — защищённые инварианты и небольшой API.
Что даёт полиморфизм? Клиент работает с контрактом, не выбирая реализацию вручную.