Композиция объектов
Создавайте более крупные объекты, объединяя небольшие. Композиция моделирует отношения «содержит», например автомобиль, у которого есть двигатель.
«Композиция объектов» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 3 уроков всего.
Определение
Композиция означает создание более крупного объекта из принадлежащих ему небольших объектов. Это отношение «имеет»: Car имеет Engine. Такой подход сохраняет классы небольшими и целенаправленными, а крупный объект делегирует работу своим частям.
Преимущества
Композиция упрощает повторное использование: часть можно заменить, не изменяя целое. Она также облегчает тестирование, поскольку каждую часть можно проверять отдельно. Начните с простого: пусть один класс зависит от другого через поля.
Композиция и наследование
Наследование выражает отношение «является» (квадрат является фигурой). Композиция выражает отношение «имеет» (Car имеет Engine). Сначала отдавайте предпочтение композиции, а наследование используйте только при естественном отношении «является».
Владение и жизненный цикл
Когда объект владеет своими частями, он отвечает за их создание и использование. Части обычно не существуют отдельно: они существуют потому, что существует целое. Эта идея помогает чётко распределить ответственность.
Этапы проектирования
Выберите целое (Car) и его части (Engine). Перечислите, что знает и что делает каждая часть. Затем разместите объекты частей в качестве полей внутри целого и напишите небольшие методы, которые используют эти части для выполнения работы.
Код: пример отношения «имеет»
Код: Car владеет Engine и вызывает его метод. Если сначала создать часть и передать её в объект, код останется простым и гибким.
public class Main {
// Very small classes to show composition (has-a)
static class Engine {
int horsepower;
Engine(int hp) { horsepower = hp; }
String info() { return horsepower + " HP engine"; }
}
static class Car {
String model;
Engine engine; // Car has an Engine (composition)
Car(String m, Engine e) {
model = m;
engine = e; // store the part
}
void printSpecs() {
// Use the part to build a message
System.out.println(model + " with " + engine.info());
}
}
public static void main(String[] args) {
// Create part first
Engine e = new Engine(90);
// Assemble whole with the part
Car c = new Car("CityCar", e);
// Use the whole, which delegates to its part
c.printSpecs();
}
}
Проверка композиции
Быстрая проверка: Какое утверждение лучше всего описывает композицию?
Повторение
Повторение: композиция моделирует отношение «имеет». Начните с небольшой части, поручите ей чёткую задачу и позвольте целому объекту использовать её через простые вызовы методов.
Часто задаваемые вопросы
Урок «Композиция объектов» бесплатный?
Да — полный текст урока «Композиция объектов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 3 уроков всего.
Чему я научусь в уроке «Композиция объектов»?
Создавайте более крупные объекты, объединяя небольшие. Композиция моделирует отношения «содержит», например автомобиль, у которого есть двигатель. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.
Сколько времени занимает урок «Композиция объектов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- this и toString/equals/hashCode
- Композиция объектов
- Моделирование предметной области (UML→код)