В об'єктно-орієнтованих мовах програмування існує 3 способи організації взаємодії між класами. НАСЛІДУВАННЯ - відношення, за якого клас-наслідник має всі поля й методи батьківського класу, і, як правило, додає якийсь новий функціонал і/або поля.
Наслідування описується словом "є". Легковий автомобіль є автомобілем. Цілком природньо, якщо він буде його наслідником.
'''
class Vehicle {
bool hasWheels;
}
class Car extends Vehicle {
String model = "Porsche";
int numberOfWheels = 4;
}
'''
Асоціація - відношення, за якого один клас містить в собі інший клас в якості одного з полів. Асоціація описується ключовим словом "має". Автомобіль має двигун. Цілком природньо, що він не буде наслідником двигуна (хоча така архітектура можлива в деяких ситуаціях).
Виділяють 2 часткових випадки асоціації: композицію й агрегацію.
Композиція - відношення, за якого двигун не існує окремо від автомобіля. Він створюється при створенні автомобіля й повністю керується автомобілем. У типовому прикладі, екземпляр двигуна створюватиметься в конструкторі автомобіля.
'''
class Engine {
int power;
public Engine (int p) {
power = p;
}
}
class Car {
String model = "Porsche";
Engine engine = new Engine(360);
}
'''
Агрегація - відношення, за якого екземпляр двигуна створюється десь у іншому місці коду й передається до конструктора в якості параметра.
'''
class Engine {
int power;
public Engine (int p) {
power = p;
}
}
class Car {
String model = "Porsche";
Engine engine;
public Car (Engine someEngine) {
this.engine = someEngine;
}
}
Engine goodEngine = new Engine(360);
Car porsche = new Car(goodEngine);
'''
Comments