Хелпикс

Главная

Контакты

Случайная статья





Агрегація



 

Обєктно-орієнтоване програмування

Варіант 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;

};

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.