Скачать презентацию Лекция 4 Отношения между классами 1 Классы Скачать презентацию Лекция 4 Отношения между классами 1 Классы

OOP-l4(отн_класс).ppt

  • Количество слайдов: 21

Лекция 4. Отношения между классами 1 Лекция 4. Отношения между классами 1

Классы и объекты Класс - это некое множество объектов, имеющих общую структуру и общее Классы и объекты Класс - это некое множество объектов, имеющих общую структуру и общее поведение 2

Классы и объекты Объект обозначает конкретную сущность, определенную во времени и в пространстве Млекопитающие Классы и объекты Объект обозначает конкретную сущность, определенную во времени и в пространстве Млекопитающие … … 3

Типы отношений Классы, как и объекты, не существуют изолированно!!! Общее и частное ( Типы отношений Классы, как и объекты, не существуют изолированно!!! Общее и частное ("is-a") n напр. , розы являются частным случаем цветов, т. е. подклассом общего класса "цветы" Целое/часть ("part of") n напр. , лепестки являются частью цветов Семантические, смысловые отношения и ассоциации n напр. , насекомые ассоциируются с цветами 4

Отношения в языках программирования 1/2 Ассоциация n n обозначает смысловую связь между классами наиболее Отношения в языках программирования 1/2 Ассоциация n n обозначает смысловую связь между классами наиболее общее и неопределенное отношение Наследование n n выражает отношение общего и частного напр. , роза – цветок, студент – человек Агрегация n n выражает отношение целого и части напр. , цветок состоит из лепестка, 5

Отношения в языках программирования 2/2 Использование n n наличие связи между экземплярами классов напр. Отношения в языках программирования 2/2 Использование n n наличие связи между экземплярами классов напр. , экземпляр класса явл. параметром функции-члена другого класса Инстанцирование n n специфическая разновидность обобщения напр. , в С++ - шаблоны Метакласс n это классов, что позволяет трактовать классы как объекты 6

Ассоциация Отношение, означающее некоторую смысловую связь между классами Мощность n n n Ассоциация Отношение, означающее некоторую смысловую связь между классами Мощность n n n "один-к-одному" "один-ко-многим" "многие-ко-многим" 7

Ассоциация Пример 1 – система розничной торговли n n класс Product - то, что Ассоциация Пример 1 – система розничной торговли n n класс Product - то, что продано в некоторой сделке класс Sale - сама сделка, в которой продано несколько товаров 8

Ассоциация class Product { public: . . . protected: Sale* last. Sale; }; class Ассоциация class Product { public: . . . protected: Sale* last. Sale; }; class Sale { public: . . . protected: Product** product. Sold; }; 9

Ассоциация Пример 2 n n n связь между классом Sale и классом Credit. Card. Ассоциация Пример 2 n n n связь между классом Sale и классом Credit. Card. Transaction (трансакция кредитной карточки) каждая продажа соответствует ровно одному снятию денег с данной кредитной карточки мощность - "один-к-одному" 10

Наследование Отношение между классами, при котором класс использует структуру или поведение другого (одиночное наследование) Наследование Отношение между классами, при котором класс использует структуру или поведение другого (одиночное наследование) или других (множественное наследование) классов Вводит иерархию "общее/частное" Множественное наследование n n в С++ - возожно, однако создает трудности! в Java – запрещено, однако возможно множест. наследование интерфейсов 11

Наследование Пример 1 – данные космических аппартов 12 Наследование Пример 1 – данные космических аппартов 12

Наследование class Telemetry. Data { public: Telemetry. Data(); virtual ~Telemetry. Data(); virtual void transmit(); Наследование class Telemetry. Data { public: Telemetry. Data(); virtual ~Telemetry. Data(); virtual void transmit(); Time current. Time() const; protected: int id; Time time. Stamp; }; 13

Наследование class Electrical. Data : public Telemetry. Data { public: Electrical. Data(float v 1, Наследование 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; }; 14

Агрегация Выражает отношение целого и части Пример 1 n n Heater – нагреватель Temperature. Агрегация Выражает отношение целого и части Пример 1 n n Heater – нагреватель Temperature. Controller – управление нагревателем 15

Агрегация class Temperature. Controller { public: Temperature. Controller(Location); ~Temrature. Controller(); void process(const Temperature. Ramp&); Агрегация class Temperature. Controller { public: Temperature. Controller(Location); ~Temrature. Controller(); void process(const Temperature. Ramp&); Minute schedule(const Temperature. Ramp&) const; private: Heater h; }; 16

Агрегация не требует обязательного физического включения! Пример 2 n n акционер владеет акциями, но Агрегация не требует обязательного физического включения! Пример 2 n n акционер владеет акциями, но они не являются его физической частью время жизни объектов может быть совершенно различным! 17

Использование Пример 1 n n Temperature. Controller – управление нагревателем Temperature. Ramp – задает Использование Пример 1 n n Temperature. Controller – управление нагревателем Temperature. Ramp – задает функцию времени от температуры 18

class Temperature. Controller { public: Temperature. Controller(Location); ~Temrature. Controller(); void process(const Temperature. Ramp&); Minute class Temperature. Controller { public: Temperature. Controller(Location); ~Temrature. Controller(); void process(const Temperature. Ramp&); Minute schedule(const Temperature. Ramp&) const; private: Heater h; }; 19

Инстанцирование Подстановка параметров шаблона обобщенного или параметризованного класса В результате создается конкретный класс, который Инстанцирование Подстановка параметров шаблона обобщенного или параметризованного класса В результате создается конкретный класс, который может иметь экземпляры В С++ n использование параметризированных классов - шаблонов 20

Метакласс Класс класса. Класс, экземпляры которого сами являются классами В чистом виде нет в Метакласс Класс класса. Класс, экземпляры которого сами являются классами В чистом виде нет в С++! Реализуется за счет использвания статических методов и атрибутов n они являются общими для всех экземпляров этого класса 21