Similar presentations:
Урок 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
programming