1.77M
Category: programmingprogramming

Урок 8. Агрегация, композиция и наследование

1.

Урок 8. Агрегация, композиция и
наследование
Иван Владиславович Кашко
1

2.

повесточка на день
1. Говорим про дз
2. Вопросы по
прошлой теме
3. Агрегация,
композиция и
наследование
Практика по теме
4. Контрольные
вопросы
5. Трещим за
домашнюю работу
Иван Владиславович Кашко
2

3.

дз
Иван Владиславович Кашко
3

4.

Сравнительный анализ структур
данных
Теория:
Каждая структура имеет свои
преимущества и недостатки. Выбор
зависит от задачи:
• Стек: Быстрые операции, но
доступ только к верхнему элементу
• Очередь: Справедливое
обслуживание, но доступ только к
первому элементу
• Список: Динамический размер,
гибкость, но медленный доступ по
индексу
• Дерево: Быстрый поиск,
сортировка, но сложная
балансировка
Иван Владиславович Кашко
4

5.

Вопросы для самопроверки:
1. В чем разница между LIFO и FIFO?
2. Почему в двусвязном списке удобнее удалять
элементы?
3. Какое правило соблюдается в бинарном дереве
поиска?
4. Когда использовать стек, а когда очередь?
5. Какие операции быстрые у связного списка, а какие у
массива?
Иван Владиславович Кашко
5

6.

1: Вложенные классы
Теория:
Вложенный класс - это класс, объявленный внутри другого
класса. Он имеет доступ к приватным членам внешнего
класса. Используется для логической группировки классов,
которые тесно связаны. Часто применяется в реализации
структур данных.
Иван Владиславович Кашко
6

7.

Композиция (Composition)
Теория:
Композиция - это отношение "часть-целое", где часть не
может существовать без целого. При уничтожении
объекта-владельца уничтожаются и все его части.
Композиция создает сильную связь между объектами.
Иван Владиславович Кашко
7

8.

Агрегация (Aggregation)
Теория:
Агрегация - это отношение "часть-целое", где часть может существовать
независимо от целого. Объекты-части передаются извне и могут жить
дольше объекта-владельца. Создает слабую связь между объектами.
Иван Владиславович Кашко
8

9.

Отличие композиции от агрегации
Теория:
Ключевое отличие - время жизни объектов. В композиции
части создаются и уничтожаются вместе с целым. В
агрегации части живут независимо. Композиция:
"автомобиль и двигатель". Агрегация: "университет и
студенты".
Иван Владиславович Кашко
9

10.

Наследование - базовые понятия
Теория:
Наследование позволяет создавать новый класс на основе
существующего. Родительский класс (базовый) передает
свои свойства и методы дочернему классу (производному).
Это отношение "is-a" (является).
Иван Владиславович Кашко
10

11.

Наследование - базовые понятия
Наследование позволяет создавать новый класс на
основе существующего. Родительский класс (базовый)
передает свои свойства и методы дочернему классу
(производному). Это отношение "is-a" (является).
Спецификатор protected
protected - это спецификатор доступа, который
позволяет дочерним классам обращаться к членам
базового класса, но скрывает их от внешнего кода. Это
промежуточный уровень между private и public.
Иван Владиславович Кашко
11

12.

Конструкторы и деструкторы при наследовании
Теория:
При создании дочернего объекта сначала вызывается конструктор
базового класса, затем дочернего. При уничтожении - в обратном
порядке: сначала деструктор дочернего, затем базового.
Иван Владиславович Кашко
12

13.

Множественное наследование
Теория:
Множественное наследование позволяет классу наследовать от
нескольких базовых классов. Это мощный инструмент, но может
создавать проблемы (например, ромбовидное наследование).
Иван Владиславович Кашко
13

14.

Проблема ромба и виртуальное наследование
Теория:
Проблема ромба возникает когда класс наследует от двух классов,
которые сами наследуют от одного базового класса. Это создает
неоднозначность. Решение - виртуальное наследование.
Иван Владиславович Кашко
14

15.

Плюсы и минусы наследования
Плюсы наследования:
•Повторное использование кода
•Иерархическая организация классов
•Полиморфизм (возможность переопределения методов)
Минусы наследования:
•Жесткая связь между классами
•Сложность изменения иерархии
•Проблема хрупкого базового класса
Иван Владиславович Кашко
15

16.

Творческое задание: "Разработка системы
управления университетом«
Общая задача: Разработайте комплексную систему для
управления университетом, используя все изученные
концепции ООП: композицию, агрегацию, наследование и
вложенные классы. Система должна моделировать
реальные сущности университета и их взаимодействия.
Иван Владиславович Кашко
16

17.

Часть 1: Базовые классы и композиция
Создайте класс Person с полями firstName, lastName и birthDate. Для поля
birthDate используйте вложенный класс Date с полями day, month, year и
методами валидации даты. Реализуйте композицию: объект Date должен
создаваться и уничтожаться вместе с объектом Person. Добавьте методы
displayInfo() и геттеры для всех полей. Затем создайте класс Address с
полями street, city, postalCode и методом displayAddress().
Иван Владиславович Кашко
17

18.

Часть 2: Иерархия наследования
На основе класса Person создайте иерархию
наследования. Класс Student должен наследовать
от Person и добавлять поля studentId, major,
enrollmentYear. Класс Professor наследует от Person и
добавляет поля employeeId, department, salary. Класс
DepartmentHead наследует от Professor и добавляет
поле managedDepartment. Во всех классах
переопределите метод displayInfo() для вывода
специфической информации. Используйте
protected доступ для общих полей.
Иван Владиславович Кашко
18

19.

Часть 3: Агрегация и ассоциации
Создайте класс University с полями name, address
(композиция с Address) и векторами указателей на
Student и Professor (агрегация). Реализуйте методы:
addStudent(), addProfessor(), removeStudent(),
removeProfessor(), displayAllMembers(). Создайте
класс Course с полями courseCode, courseName,
credits и указателем на Professor (агрегация). Класс
Department должен содержать название и вектор
курсов.
Иван Владиславович Кашко
19

20.

Часть 4: Множественное наследование и
интерфейсы
Создайте интерфейсный класс Research с чисто
виртуальными методами conductResearch() и
publishPaper(). Создайте класс Teaching с
методами teachCourse() и gradeStudent(). Затем
создайте класс SeniorProfessor, который наследует
от Professor, Research и Teaching (множественное
наследование). Реализуйте все абстрактные
методы и продемонстрируйте работу через
указатель базового класса.
Иван Владиславович Кашко
20

21.

Часть 5: Практическое применение
В функции main() создайте объекты всех классов:
несколько студентов, профессоров, department
head. Создайте университет и добавьте в него
всех сотрудников и студентов. Создайте курсы и
назначьте их профессорам. Продемонстрируйте
полиморфизм: создайте вектор указателей на
Person и добавьте в него объекты разных типов,
затем вызовите displayInfo() для каждого.
Протестируйте все методы: добавление, удаление,
отображение информации. Напишите функцию,
которая находит самого высокооплачиваемого
профессора и студента с самым высоким средним
баллом.
Иван Владиславович Кашко
21

22.

Вопросы для самопроверки:
1.В чем разница между композицией и агрегацией?
2.Когда использовать protected вместо private?
3.Какой порядок вызова конструкторов при наследовании?
4.Что такое проблема ромба и как ее решить?
5.Когда множественное наследование может быть
полезно?
Иван Владиславович Кашко
22

23.

Заключение:
Агрегация, композиция и наследование - три основных способа организации
отношений между классами. Композиция создает сильные связи "часть-целое",
агрегация - слабые. Наследование устанавливает отношение "is-a" и
позволяет повторно использовать код. Правильный выбор между этими
подходами зависит от конкретной задачи и отношений между объектами.
Виртуальное наследование решает проблему ромбовидного наследования, а
множественное наследование следует использовать осторожно.
Иван Владиславович Кашко
23

24.

Домашка ёу
Иван Владиславович Кашко
24
English     Русский Rules