Глава 10. Итоговый тест

   ⁄ 

 Обновлено 15 Июл 2018  ⁄ 

 ⁄   2 

⁄   530

В этой главе мы рассмотрели какие типы отношений могут быть между двумя объектами в C++.

Теория

Процесс построения сложных объектов из более простых называется композицией объекта. Существует два подтипа композиции объектов: композиция и агрегация.

Композиция: Тип отношений между членом и классом — «часть чего-то» (член является частью класса). В композиции класс управляет существованием членов. Для реализации композиции части и объект должны соответствовать следующим правилам:

  часть (член) является частью объекта (класса);

  часть (член) может принадлежать только одному объекту (классу) одновременно;

  существование части (члена) управляется объектом (классом);



  часть (член) не знает о существовании объекта (класса).

Реализация композиции обычно происходит через переменные-члены или через указатели, когда класс управляет памятью самостоятельно (выделение/освобождение). Если вы можете реализовать композицию в своем классе, то вы должны реализовать композицию в своем классе.

Агрегация: Тип отношений между членом и классом — «имеет» (класс имеет члены). В отношениях агрегации класс не управляет существованием членов. Для реализации агрегации части и объект должны соответствовать следующим правилам:

  часть (член) является частью объекта (класса);

  часть (член) может принадлежать более чем одному объекту (классу) одновременно;

  существование части (члена) не управляется объектом (классом);

  часть (член) не знает о существовании объекта (класса).

Агрегации обычно реализуются с помощью указателей или ссылок.

Ассоциация: Объекты не связаны между собой, нет отношений типа «частей-целого». Для реализации ассоциации объекты должны соответствовать следующим правилам:

  первый объект (член) не связан со вторым объектом (классом);

  первый объект (член) может принадлежать сразу нескольким объектам (классам) одновременно;

  существование первого объекта (члена) не управляется вторым объектом (классом);

  первый объект (член) может знать или не знать о существовании второго объекта (класса).

Ассоциации могут быть реализованы как через указатели, так и через ссылки.

Зависимость: Один класс использует второй класс для выполнения определенного задания. Используемый класс обычно не является членом главного класса, а временно создается, используется, а затем уничтожается или передается в метод главного класса извне.

Контейнерные классы: Классы, предназначенные для хранения и организации нескольких объектов определенного типа данных. Контейнер-значение — это композиция, в которой хранятся копии объектов контейнера. Контейнер-ссылка — это агрегация, в которой хранятся указатели или ссылки на объекты, которые находятся вне контейнера.

Список инициализации std::initializer_list может использоваться для реализации конструкторов, перегрузки оператора присваивания и других функций, которые принимают список инициализации в качестве параметра. std::initailizer_list находится в заголовочном файле <initializer_list>.

Свойства Композиция Агрегация Ассоциация Зависимость
Отношения «Части-Целое» «Части-Целое» Объекты не связаны между собой Объекты не связаны между собой
Члены могут принадлежать сразу нескольким классам? Нет Да Да Да
Класс управляет существованием членов? Да Нет Нет Да
Вид отношений Однонаправленные Однонаправленные Однонаправленные/Двунаправленные Однонаправленные
Тип отношений «Часть чего-то» «Имеет» «Использует» «Зависит от»

Тест

Эта глава проще и абстрактнее за предыдущие главы, поэтому этот тест будет лаконичным, но точным.

Задание №1

Какие типы отношений (композиция, агрегация, ассоциация или зависимость) описываются ниже?

a) Класс Животное, который содержит тип животного и его имя.



Ответ a)

Композиция. Тип животного и его имя не используются вне класса Животное.

b) Класс TextEditor с методом Save(), который принимает объект File. Функция Save() записывает содержимое редактора на диск.

Ответ b)

Зависимость. Класс TextEditor использует объект File для выполнения определенного задания — сохранения объекта на диск.

c) Класс Авантюрист, который может хранить разные Предметы: мечи, копья, зелья или книги заклинаний. Эти Предметы могут быть отброшены и подняты другими Авантюристами.

Ответ c)

Агрегация. Когда Предметы связаны с Авантюристом, то Авантюрист «имеет» эти предметы. Меч, используемый Авантюристом, не может быть использован другим Авантюристом одновременно. Но Авантюрист не управляет существованием самих Предметов.

d) Программист использует Компьютер для просмотра видео с котами в Интернете.

Ответ d)

Ассоциация. Программист и Компьютер не связаны между собой, за исключением случаев, когда Программист использует Компьютер для просмотра видео с котами.

e) Класс Компьютер, который содержит класс Процессор. Процессор можно вынуть с Компьютера и посмотреть.

Ответ e)

Агрегация. Компьютер имеет Процессор, но не управляет его существованием.

Задание №2

Если вы можете создать класс, используя композицию, агрегацию, ассоциацию или зависимость, то вы выберите…

Ответ 2

Композицию.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (6 оценок, среднее: 5,00 из 5)
Загрузка...
Подписаться на обновления:

Комментариев: 2

  1. Артем:

    Чисто из интереса, мы далеко продвинулись в изучении C++? Много еще будет уроков?

    1. Юрий:

      Ну еще где-то уроков 50-60 будет.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

ПОДПИСЫВАЙТЕСЬ

НА КАНАЛ RAVESLI В TELEGRAM

@ravesli

ПОДПИСАТЬСЯ БЕСПЛАТНО