|
|||
Агрегація ⇐ ПредыдущаяСтр 2 из 2
Обєктно-орієнтоване програмування Варіант 2
1.Поліморфізм 2.Агрегація 3.Специфікатори класів public, private, protected 1)Одиночний поліморфізм. Дозволяє розрізняти оператори та операції в залежності від кількості параметрів та їх типів. Стосовно до операторів така властивість називається перевантаженням оператора. Найбільш гнучко поліморфізм реалізовано в мові С++. Поліморфізм дозволяє обійтися без операторів вибору так як об’єкти самі знають свій тип.
voidtransmitFreshData(TelemetryData & d, const Time & t) { if (d. currentTime() >= t) d. transmit(); }
Наслідування без поліморфізму можливе, але не ефективне. Поліморфізм тісно пов’язаний з механізмом пізнього зв’язування. В С++ цей механізм застосовується тільки для віртуальних функцій, для решти функцій він не має змісту оскільки вони відомі на етапі компіляції і зв’язуються за механізмом раннього зв’язування. Множинний поліморфізм. В С++ можна реалізувати механізм подвійної диспетчеризації. Спочатку реалізується поліморфна поведінка за однією гілкою наслідування в залежності від типу об’єкту, пізніше поліморфізм відслідковується за типом аргументу.
2)Агрегація Відношення агрегації між класами та об’єктами тісно пов’язані між собою. З першого випливає друге. Розглянемо приклад:
class TemperatureController { public: TemperatureController(Location); ~TemperatureController();
void process(const TemperatureRamp &); Minute schedule(const TemperatureRamp &) const;
protected: Heater h; }; Об’єкт класу Heater агрегований в клас TemperatureController (Рисунок 1). В об’єктно-орієнтованому програмування розрізняють два види агрегації: - за значенням, фізичне включення; - за посиланням. При фізичному включення обидва об’єкти створюються та знищуються одночасно. При включенні за посиланням об’єкти створюються асинхронно і один об’єкт може пережити (в часі) іншого. Агрегацію за посиланням часто можна переплутати з асоціацією. Тут слід пам’ятати, що асоціація двох-направлений зв’язок, а агрегація одно-направлений і виражає відношення “цілого/частини”. Тобто, один з об’єктів повинен бути фізичною чи логічною (акціонер та акції) частиною іншого. В практичному програмуванні агрегація може бути альтернативою множинного наслідування, це дозволяє обійти проблеми, що виникають при ньому.
Рис1. Агрегація 3) class PersonalRecord { public: char *employeeName () const; int employeeSocialSecurityNumber () const; char *employeeDepartment () const; protected: void SetEmployeeName (char *name); void setEmployeeSocialSecurityNumber (int number); void setEmployeeDeprtment (char *department); void setEmployeeSalary (float salary); float employeeSalary () const; private: char *name [100]; int socialSecurityNumber; char *department [10]; float salary; };
|
|||
|