EgoRusMarch
@EgoRusMarch
C++ Developer

C++. Отношения наследования в ООП. Что чему соответствует?

Читаю "Язык Программирования С++. Лекции и Упражнения." — Прата.

Там упоминается (на сколько смог заметить) пять отношений наследования:
  1. is-a — является
  2. has-a — содержит
  3. uses-a — использует
  4. is-like-a — подобен
  5. is-implemented-as-a — реализован как

На сколько я смог понять:
  • is-a соответствует открытому (public) наследованию
  • has-a соответствует закрытому (private) наследованию или включению/композиции
  • uses-a соответствует использованию дружественных (friend) классов
  • is-like-a соответствует защищенному (protected) наследованию
  • is-implemented-as-a соответствует множественному наследованию

Поправьте, если не так. В сети ничего путного не нашел.
  • Вопрос задан
  • 1601 просмотр
Решения вопроса 1
MrNexeon
@MrNexeon
1. is-a - наследование

class Car : public Vehicle {
 // автомобиль является транспортом
};

2. has-a - отношение типа "композиция"

class Car {
 Engine v8; // автомобиль имеет (содержит) двигатель
};

3. uses-a - отношение типа "агрегация"

class Driver {
 Car* myCar; // водитель использует автомобиль
};

4. is-like-a

class Square : public Figure;
class Rectangle : public Figure;
// квадрат и прямоугольник похожи по свойствам, но это разные фигуры


5. is-implemented-as-a

class Engine { // абстракция
public:
 virtual void start() = 0;
protected:
 float power;
};

class V8 : public Engine { // реализация
 virtual void start() {
  // wroom wroom
 }
};

// Двигатель ДВС реализован как 8-ми цилиндровый двигатель V-конфигурации
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы