490.32K
Категория: ПрограммированиеПрограммирование

Основы объектно-ориентированного проектирования. Тема 22

1.

Воплощайте собственные мечты,
или кто-то другой наймёт вас,
чтобы воплощать свои.
Раздел 4. Объектно-ориентированное
программирование
Тема 15. Введение в объектно-ориентированное программирование
Тема 16. Инкапсуляция
Тема 17. Абстрактные типы данных
Тема 18. Шаблоны классов
Тема 19. λ-функции
Тема 20. Библиотека STL
Тема 21. Наследование и полиморфизм
Тема 22. Основы объектноориентированного проектирования
Раздел 5. Дополнительные темы
Тема 23. Основы системы ввода-вывода
Тема 24. Обработка исключений
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
1

2.

Цели объектно-ориентированного
проектирования
Упростить добавление новых сущностей (классов)
расширяющих функциональность программы
Уменьшить количество возникающих при этом
ошибок по невнимательности
Упростить поддержку кода и его изучение новыми
разработчиками за счёт систематизации способов добавления
нового функционала
Недостатки:
Большие накладные расходы на проектирование не дают
выигрыша на маленьких проектах. Часто проще написать
программу без них (а потом при росте программы переделать
под ООП не получается, только полностью переписать с нуля).
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
2

3.

Жизненный цикл программного обеспечения
КАСКАДНАЯ МОДЕЛЬ ЖИЗНЕННОГО ЦИКЛА была распространена в 70-х - 80-х
годах ХХ века. На практике этапы каскадной модели реализуются итерационно, с
циклами обратной связи между этапами.
Формирование
требований
Разработка
проекта
Реализация
Устранение
ошибок
Эксплуатация и
сопровождение
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
3

4.

Этапы разработки объектноориентированных программных систем
Формирование требований
Объектно-ориентированный анализ:
исследование задачи с точки зрения объектов реального мира
и определение требований к программной системе
Объектно-ориентированное проектирование:
разработка программных классов и логики их
функционирования и взаимодействия
Объектно-ориентированное программирование:
реализация классов проектирования на выбранном языке
программирования
Устранение ошибок
Развёртывание
Эксплуатация и сопровождение
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
4

5.

Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
5

6.

Формирование ТЗ: «умный» дом
Хотелось бы, чтобы программа:
1. опрашивала состояние множества датчиков и приборов,
распределённых по квартире:
o светильники o датчики протечки o кондиционер
o видеокамеры
o "умные" колонки
o двери
o холодильник
o "умный" пылесос
o окна
2. отображала схему расположения и текущее состояние всех
датчиков и приборов на экране
3. позволяла управлять исполнительными механизмами
(замок на входной двери, форточка, кондиционер, шторы,
перекрыть подачу воды в случае обнаружения протечки)
4. включала редактор схем расположения приборов на плане
квартиры
5. обеспечивала простоту добавления новых устройств
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
6

7.

Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
7

8.

Формирование ТЗ: «умный» дом
Хотелось бы, чтобы программа:
1. опрашивала состояние множества датчиков и приборов,
распределённых по квартире:
o светильники o датчики протечки o кондиционер
o видеокамеры
o "умные" колонки
o двери
o холодильник
o "умный" пылесос
o окна
2. отображала схему расположения и текущее состояние всех
датчиков и приборов на экране в консольном режиме
3. позволяла управлять исполнительными механизмами
(замок на входной двери, форточка, кондиционер, перекрыть
подачу воды в квартиру в случае обнаружения протечки)
4. включала редактор схем расположения приборов на плане
квартиры
5. обеспечивала простоту добавления новых устройств
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
8

9.

Формирование ТЗ: «умный» дом
На этом этапе в сознании разработчика начинает
формироваться виденье, как должна будет выглядеть готовая
программа со стороны пользователя.
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
9

10.

Архитектура
Архитектура системы – это совокупность характеристик,
значимых для её функционирования в окружающей среде:
o компоненты, из которых состоит система, и их устройство
o взаимосвязи между компонентами
o принципы организации системы
o принципы управляющие развитием системы в её
жизненном цикле
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
10

11.

Отношения классов
Отношения классов
Обобщение и
специализация
Левкович Н.В.
Ассоциация
Зависимость
Наследование
Агрегация
Реализация
Композиция
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
11

12.

Наследование
Иерархия наследования
CEmployee
- string m_Name
- unsigned int m_ID
+ void Input()
+ void Print()
CLaborer
Левкович Н.В.
2022/2023
+ public
- private
# protected
CScientist
- int m_PubsCnt
CManager
- string m_Title
+ void Input()
+ void Print()
+ void Input()
+ void Print()
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
12

13.

Реализация интерфейса
IStorer
+ bool Store(int val) = 0
+ bool Store(const char* str) = 0
+ bool Store(bool val) = 0
+ bool Store(float val) = 0
CTxtStorer
- ofstream m_File
CBinStorer
- ofstream m_File
+ CTxtStorer(const char* sFileName)
+ bool Store(int val)
+ bool Store(const char* str)
+ bool Store(bool val) . . .
+ CBinStorer(const char* sFileName)
+ bool Store(int val)
+ bool Store(const char* str)
+ bool Store(bool val) . . .
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
13

14.

Отношения классов
Отношения классов
Обобщение и
специализация
Левкович Н.В.
Ассоциация
Зависимость
Наследование
Агрегация
Реализация
Композиция
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
14

15.

Ассоциация
Отношение ассоциации – показывает, что объекты одной
сущности (класса) связаны с объектами другой сущности таким
образом, что можно перемещаться от объектов одного класса к
другому (первый класс хранит указатель на второй).
Например, класс CStudent и класс CDataBase имеют ассоциацию,
так как запись о студенте помещена в базу данных.
CDataBase
+ CStudent* vStudents[]
Левкович Н.В.
2022/2023
CStudent
+ string ФИО
+ int возраст
+ enmSex пол
+ float успеваемость
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
15

16.

Ассоциация
Двунаправленная ассоциация обозначается без стрелок
1
Муж
1
Жена
Цифрами обозначается "мощность связи" – со
сколькими объектами связан текущий объект. В
данном примере связь "один к одному", то есть
каждому объекту первого типа соответствует
единственный объект второго типа, и наоборот.
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
16

17.

Ассоциация: агрегация
Часто ассоциации представляют из себя отношение "целое и его
части": части включаются как поля-члены класса в целое
(через указатель или по значению).
Агрегация и композиция – виды ассоциации.
Агрегация – включение в виде указателя на объект. Объект
может существовать отдельно от целого, может быть перенесён
в другое "целое".
CDataBase
+ CStudent* vStudents[]
мощность связи:
"один ко многим"
Левкович Н.В.
2022/2023
1
0..*
CStudent
+ string ФИО
+ int возраст
+ enmSex пол
+ float успеваемость
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
17

18.

Ассоциация: композиция
Композиция – отношение ассоциации, при котором связь более
жёсткая – время жизни обоих объектов совпадает:
CStudent
+ string ФИО
+ int возраст
+ enmSex пол
+ float успеваемость
Левкович Н.В.
2022/2023
1
1
string
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
18

19.

Ассоциация: композиция
Пример наивной декомпозиции:
автомобиль
легковой
грузовой
автобус
Бензин Дизель Электро Бензин Дизель Электро Бензин Дизель Электро
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
19

20.

Ассоциация: композиция
Использование композиции:
автомобиль
1
1
- Двигатель
легковой
грузовой
Двигатель
автобус
Бензин Дизель Электро
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
20

21.

Отношения классов
Отношения классов
Обобщение и
специализация
Левкович Н.В.
Ассоциация
Зависимость
Наследование
Агрегация
Реализация
Композиция
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
21

22.

Зависимость
Зависимость - обозначает такое отношение между классами, что
изменение спецификации класса-поставщика может повлиять на
работу зависимого класса, но не наоборот.
Пусть класс СMenu выводит меню
со списком работников и позволяет
выбрать одного из них
Класс СMenu не относится к
прикладной области,
а представляет собой «системный»
класс приложения – выводит меню
для выбора одного из сотрудников.
CEmployee
# string m_Name
# unsigned int m_ID
CMenu
+ CEmployee* ShowMenu(CEmployee employees[0..*])
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
22

23.

Зависимость
Зависимость - обозначает такое отношение между классами, что
изменение спецификации класса-поставщика может повлиять на
работу зависимого класса, но не наоборот.
При внесении изменений в CEmployee,
придётся изменять и класс CMenu
(CEmployee ничего не знает о меню).
CEmployee
# string m_Name
# unsigned int m_ID
Такой тип отношений реализуется
посредством дружественных функций
и классов.
CMenu
+ CEmployee* ShowMenu(CEmployee employees[0..*])
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
23

24.

Диаграммы сценариев использования
Расположение
новых объектов
на схеме
включает
Удаление
объектов
Запрос
описаний
команд
инженер
Задание
параметров
объектов
Отношение
включения
передаёт
текущее
состояние
Просмотр
состояний
датчиков
пользователь
Левкович Н.В.
2022/2023
Передача команд
управления
светильник,
датчик двери
получает
команды
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
24

25.

Диаграммы сценариев использования
Диаграммы использования позволяют:
Четко отделить моделируемую систему от ее
окружения.
Выявить действующих лиц, пути их взаимодействия
с данной системой, а также её ожидаемый
функционал.
Установить различные понятия, которые относятся
к подробному описанию функционала данной
системы.
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
25

26.

Формирование ТЗ: «умный» дом
1) Поддержка датчиков и приборов:
o двери
o динамик
o светильники
2) Датчики создаются с помощью ввода в консоли текстовых
команд
3) Каждый датчик обладает именем, используя которое, можно
отдавать ему команды
(включить/выключить свет, открыть/закрыть дверь)
4) Программа должна поддерживать систему подсказок:
команда help отображает подсказку для выбранной команды
5) Схема квартиры отрисовывается в правой половине консоли,
история команд отображается в левой половине консоли
6) Сохранение конфигурации в файл должно поддерживать
текстовый и бинарный формат файлов
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
26

27.

Объектно-ориентированное
проектирование
Кандидаты в классы и объекты:
Предметы
Роли
пользователь
инженер
Состояния
двери, светильники, датчики
стены
консоль
состояния датчиков
Взаимодействия
консольные команды
протоколы связи с датчиками
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
27

28.

Объектно-ориентированное
проектирование
Кандидаты в классы и объекты для раннего прототипа программы:
Предметы
Роли
пользователь
инженер
Состояния
двери, светильники, датчики
стены
консоль
состояния датчиков
Взаимодействие
консольные команды
протоколы связи с датчиками
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
28

29.

Объектно-ориентированное
проектирование
Конструирование классов:
Один из часто используемых шаблонов проектирования - MVC,
предлагает разбивать проект на три группы классов:
Модель, представление, контроллер
(MVC – "Model-View-Controller")
Модель (Model) – хранилище, по запросу "Представления"
предоставляет данные, реагирует на команды "Контроллера",
изменяя своё состояние.
Представление (View) - отвечает за отображение данных модели
пользователю, реагируя на изменения модели.
Контроллер (Controller) - интерпретирует действия пользователя,
оповещая модель о необходимости изменений.
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
30

30.

Объектно-ориентированное
проектирование
читает и
отображает
состояние
видит
представление
пользователь
модель
отдаёт
команды
изменяет
контроллер
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
HDD
31

31.

Диаграммы последовательности
действий
пользователь
представление
контроллер
модель
Действующие
лица (actors)
Ось времени
Диаграмма последовательности действий –
позволяет отобразить на единой временной оси
жизненный цикл какого-либо определённого
события и последовательность выполняемых
действий, участвующими в нём лицами (Actor)
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
32

32.

Диаграммы последовательности
действий
пользователь
представление
контроллер
модель
передаёт
данные для
отрисовки
видит
состояние
модели
вводит
текстовую
команду
вносит
изменения в
модель
передаёт
данные для
отрисовки
видит
изменённую
модель
Левкович Н.В.
2022/2023
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
33

33.

Трёхзвенная архитектура
браузер
База данных
Сервер
Клиент
читает
состояние
HTML
SQL
сервис
HTTP запрос
Левкович Н.В.
2022/2023
модель
изменяет
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОЕКТИРОВАНИЕ
34
English     Русский Правила