
OOP-l4.ppt
- Количество слайдов: 24
Лекция 4. Отношения между классами Проф. Куссуль Н. М. 1
Классы и объекты Класс - это некое множество объектов, имеющих общую структуру и общее поведение 2
Классы и объекты Объект обозначает конкретную сущность, определенную во времени и в пространстве Млекопитающие … … 3
Типи відношень на етапі проектування Класи, як і об‘єкти не існують ізольовано!!! Основні типи відношень між класами (на етапі проектування) “Узагальнення/спеціалізація" (загальне–частинне) “is a” n напр. , троянди є частинним випадком квітів, тобто підкласом більш загального класу «квіти» Ціле/частина("part of") n напр. , лепестки являются частью цветов Семантичний, змістовний зв’язок та асоціація n напр. , насекомые ассоциируются с цветами 4
Отношения в языках программирования 1/2 ОО языки программирования поддерживают разные комбинации следующих отношений Наследование n n выражает отношение общего и частного напр. , цветок – роза, человек – студент Агрегация n n выражает отношение целого и части напр. , цветок состоит из лепестков, 5
Отношения в языках программирования 2/2 Использование n n наличие связи между экземплярами классов напр. , экземпляр класса явл. параметром функции-члена другого класса Инстанцирование n n специфическая разновидность обобщения напр. , в С++ - шаблоны Метакласс n это классов, что позволяет трактовать классы как объекты 6
Ассоциация Отношение, означающее некоторую смысловую связь между классами Асоціація — смисловий зв‘язок, як правило, не має напрямку та не пояснює, як класи спілкуються один з одним. Потужність — кількість учасників цього смислового зв`язку n n n “один до одного”; “один до багатьох”; “багато до багатьох”. 7
Ассоциация Пример 1 – система розничной торговли n n класс Product - то, что продано в некоторой сделке класс Sale - сама сделка, в которой продано несколько товаров 8
Асоціація Приклад — товари та продажі. class Product; //те, що продали class Sale; //угода, в якій продано //декілька товарів class Product { public: . . . protected: Sale* last Sale; }; class Sale { public: . . . protected: Product** product Sold; }; 9
Ассоциация Пример 2 n n n связь между классом Sale и классом Credit. Card. Transaction (транзакция кредитной карточки) каждая продажа соответствует ровно одному снятию денег с данной кредитной карточки мощность - "один-к-одному" 10
Наследование Отношение между классами, при котором класс использует структуру или поведение другого (одиночное наследование) или других (множественное наследование) классов Вводит иерархию "общее/частное" Множественное наследование n n в С++ - возожно, однако создает трудности! в Java – запрещено, однако возможно множественная реализация интерфейсов 11
Підкласи — це класи, які успадковують усі "властивості" суперкласу ("батьківського класу") Геометрична фігура Коло Прямокутник Трикутник 12
Приклад class Personnel. Record { public: char * employee Name () const; //всі об‘єкти можуть int employee Local Security Number () const; //отримати дані char * employee Department () const; protected: char name [100]; //лише підкласи int Social Security Number; //можуть визначати char department [10]; //значення float Salary; }; 13
Ієрархія класів Об’єкти різних класів і самі класи можуть перебувати у відношенні успадкування, за якого формується ієрархія об’єктів, що відповідає заздалегідь передбаченій ієрархії класів. Ієрархія класів дозволяє визначати нові класи на основі вже існуючих. Існуючі класи зазвичай називають базовими (інколи батьківським), а нові класи, що формуються на основі базових, — похідними (породженими), інколи класами-нащадками або спадкоємцями. Похідні класи “отримують спадок” — дані і методи своїх базових класів — і, крім того, можуть поповнюватись власними компонентами (даними і власними методами). Наприклад, за таким визначенням class S: X{…}; клас S породжений класом X, звідки він успадковує компоненти. Віртуальні функції визначаються специфікатором virtual і дозволяють програмісту описати в базовому класі функції, які можна було б замінити у кожному наступному класі. 14
Успадкування Приклад 1 – дані космічних апаратів 15
Успадкування class Telemetry. Data { public: Telemetry. Data(); virtual ~Telemetry. Data(); virtual void transmit(); Time current. Time() const; protected: int id; Time time. Stamp; }; 16
Успадкування class Electrical. Data : public Telemetry. Data { public: Electrical. Data(float v 1, float v 2, float a 1, float a 2); ~Electrical. Data(); void transmit(); float current. Power() const; protected: float fuel. Cell 1 Voltage, fuel. Cell 2 Voltage; float fuel. Cell 1 Amperes, fuel. Cell 2 Amperes; }; 17
Агрегація Виражає відношення цілого та частини Агрегація — включення одного класу до іншого — відповідає агрегації між екземплярами. Агрегація як співвідношення "ціле–частина" є спрямованою. Не вимагає обов‘язкового фізичного включення (акціонер володіє акціями, але не складається з них). Якщо (і тільки якщо) існує відношення "ціле–частина" між об‘єктами, класи повинні знаходитися у співвідношенні агрегації. Приклад 1 Heater – нагрівач n Temperature. Controller – контролер температури n 18
Агрегація class Temperature. Controller { public: Temperature. Controller(Location); ~Temrature. Controller(); void process(const Temperature. Ramp&); Minute schedule(const Temperature. Ramp&) const; private: Heater h; }; 19
Агрегація не вимагає обов’язкового фізичного включенння об’єкта! Приклад 2 n n акционер владеет акциями, но они не являются его физической частью время жизни объектов может быть совершенно различным! 20
Використання — відношення між класами, якщо клас є частиною сигнатури функції-члена іншого класу (параметром). Використання класів –> рівноправний зв‘язок між їх екземплярами (клієнт–сервер). Пример 1 n n Temperature. Controller – контролер температури Temperature. Ramp – визначає функцію часу від температури 21
Приклад використання class Temperature. Controller { public: Temperature. Controller(Location); ~Temrature. Controller(); void process(const Temperature. Ramp&); Minute schedule(const Temperature. Ramp&) const; private: Heater h; }; 22
Инстанцирование Подстановка параметров шаблона обобщенного или параметризованного класса В результате создается конкретный класс, который может иметь экземпляры В С++ n использование параметризированных классов - шаблонов 23
Метакласс Класс классов. Класс, экземпляры которого сами являются классами В чистом виде нет в С++! Реализуется за счет использования статических (static) методов и атрибутов n они являются общими для всех экземпляров этого класса 24