Объектный подход к разработке ПО

Объектный подход к разработке ПО. Тема 7

1. Объектный подход к разработке ПО

1
Тема 7
Объектный подход
к разработке ПО

2.

Содержание
1. Объектно-ориентированная методология разработки
ПС
2. Принципы объектного подхода
3. Классы и объекты
4. Объектно-ориентированный анализ
5. Объектно-ориентированное проектирование
2

3.

3
1. Объектно-ориентированная
методология разработки ПС

4.

Основные подходы
Рассмотрение любой сложной системы требует
применения техники декомпозиции – разбиение на
составляющие элементы.
Известны две схемы декомпозиции:
алгоритмическая декомпозиция,
объектно-ориентированная декомпозиция.
В основе алгоритмической декомпозиции лежит разбиение
по действиям – алгоритмам.
В основе объектно-ориентированной декомпозиции –
разбиение по автономным лицам – объектам реального
(или виртуального) мира.
4

5.

Объектно-ориентированный подход
Проблемы, стимулировавшие развитие объектноориентированного подхода:
необходимость повышения производительности
разработки за счет многократного (повторного)
использования ПО;
необходимость упрощения сопровождения и
модификации разработанных систем (локализация
вносимых изменений);
облегчение проектирования систем (за счет
сокращения семантического разрыва между
структурой решаемых задач и структурой ПО).
5

6.

Объектно-ориентированный подход
Т.о., объектно-ориентированный подход помогает
справиться с такими сложными проблемами, как
уменьшение сложности ПО;
повышение надежности ПО;
обеспечение возможности модификации отдельных
компонентов ПО без изменения остальных его
компонентов;
обеспечение возможности повторного использования
отдельных компонентов ПО.
6

7.

Объектно-ориентированный подход
7
Систематическое применение объектно-ориентированного
подхода позволяет разрабатывать ПС:
хорошо структурированные,
надежные в эксплуатации,
достаточно просто модифицируемые.
Этим объясняется интерес программистов к объектноориентированному подходу и объектно-ориентированным
языкам программирования.

8.

Объектно-ориентированный подход
Объектно-ориентированный подход является одним из
наиболее интенсивно развивающихся направлений
теоретического и прикладного программирования.
Целесообразно применять объектно-ориентированный
подход на всех этапах ЖЦ прикладного ПО,
начиная с
анализа требований к ПС
и ее предварительного проектирования,
и кончая ее
реализацией,
тестированием
и последующим сопровождением.
8

9.

Составные части ООМ
9
Объектно-ориентированный подход имеет два аспекта:
объектно-ориентированная разработка ПО;
объектно-ориентированная реализация ПО.
Составными частями объектно-ориентированной
методологии (ООМ) разработки ПС являются:
объектно-ориентированный анализ (ООА);
объектно-ориентированное проектирование (ООПр);
объектно-ориентированное программирование (ООП).

10.

Составные части ООМ
10
Объектно-ориентированное программирование (ООП)
– это методология программирования, которая основана
на представлении программы в виде совокупности
объектов,
каждый из которых является реализацией
определенного класса,
а классы образуют иерархию на принципах
наследования.
В данном определении можно выделить три части:
1) объектно-ориентированное программирование
использует в качестве элементов конструкции
объекты, а не алгоритмы;
2) каждый объект является реализацией определенного
класса;
3) классы организованы иерархически.

11.

Составные части ООМ
Объектно-ориентированное проектирование (ООПр)
Методы программирования, прежде всего, подразумевают
правильное и эффективное использование механизмов
языков программирования.
Методы проектирования напротив, основное внимание
направляют на правильное и эффективное
структурирование сложных систем.
Объектно-ориентированное проектирование – это
методология проектирования, соединяющая в себе
процесс объектной декомпозиции и приемы
представления
как логической и физической,
так статической и динамической моделей
проектируемой системы.
11

12.

Составные части ООМ
В данном определении содержатся две важные части:
1) объектно-ориентированное проектирование ведет к
объектно-ориентированной декомпозиции;
2) используется многообразие приемов представления
моделей, отражающих
логическую (структуры классов и объектов)
и физическую (архитектура модулей и процессов)
структуру системы.
Именно поддержка объектно-ориентированной
декомпозиции отличает объектно-ориентированное
проектирование от структурного проектирования.
12

13.

Составные части ООМ
13
Объектно-ориентированный анализ (ООА)
На объектный подход оказали влияние предыдущие этапы
развития ПС. Традиционные приемы структурного
анализа основаны на потоках данных в системе.
ООА направлен на создание моделей, более близких к
реальности, с использованием объектноориентированного подхода.
Объектно-ориентированный анализ – это методология,
при которой требования формируются на основе понятий
классов и объектов, составляющих словарь предметной
области.

14.

Составные части ООМ
Главными достоинствами ООМ по сравнению со
структурными методами являются:
возможность преодолеть ограничения, связанные со
сложностью разрабатываемых систем;
использование на стадии анализа моделей близких к
реальности;
широкая сфера применения при анализе и
проектировании:
информационных систем,
систем реального времени
и аппаратно-программных комплексов;
обеспечение возможности повторного использования
разработанного ПО, позволяющего существенно
сократить сроки и снизить затраты на разработку
каждой последующей системы;
14

15.

Составные части ООМ
15
поддержка итеративного, а не лавинообразного, как в
структурном подходе, процесса проектирования;
естественная работа с разнородной информацией,
используемой в мультимедиа системах;
создание более открытых систем;
полное использование описательных возможностей
объектно-ориентированных языков
программирования.

16.

Составные части ООМ
ООМ подвергается критике по следующим причинам,
которые относят к ее недостаткам:
Усложнение методологии:
Для успешного использования подхода требуется
наличие определенного уровня квалификации у
специалистов.
Для небольших проектов более эффективным
может оказаться применение структурного
подхода, когда декомпозиция ПС осуществляется
не по классам, а по функциям.
Сложность реализации.
Реализация на объектно-ориентированном языке
программирования, как правило, приводит к
построению требовательного к ресурсам ПО.
Высокая стоимость инструментальных средств по
автоматизации процесса разработки.
16

17.

17
2. Принципы объектного подхода

18.

Принципы объектного подхода
18
Объектная модель, которая является концептуальной базой
объектно-ориентированной методологии, имеет четыре
главных элемента:
1) абстрагирование;
2) ограничение доступа или инкапсуляция;
3) модульность;
4) иерархия.
Без любого из этих элементов модель не будет объектноориентированной.
Кроме главных имеется три дополнительных элемента:
1) типизация;
2) параллелизм;
3) сохраняемость или устойчивость.
Эти элементы полезны в объектной модели, но не
обязательны.

19.

Абстрагирование
19
Абстрагирование – это выделение таких существенных
характеристик объекта, которые
отличают его от всех других видов объектов
и таким образом чётко определяют особенности
данного объекта с точки зрения дальнейшего его
рассмотрения.
Абстрагирование позволяет отделить самые существенные
особенности поведения от несущественных.
Абстракция определяет существенные характеристики
некоторого объекта, которые
отличают его от всех других видов объектов
и четко очерчивает концептуальную границу объекта с
точки зрения наблюдателя.

20.

Инкапсуляция
20
Инкапсуляция – это процесс разделения элементов
объекта, определяющих его устройство и поведение;
инкапсуляция служит для того, чтобы изолировать
контрактные обязательства абстракции от их реализации.
В языке С++ управление доступом и видимостью достигается с
большой гибкостью. Элементы объекта могут быть отнесены к
общедоступной,
обособленной
и защищенной части.
Инкапсуляция не спасает от глупости; она как заметил
Страуструп защищает от ошибок, но не от жульничества.

21.

Инкапсуляция
21
Абстракция и ограничение доступа дополняют друг друга:
абстрагирование направлено на наблюдаемое
поведение объекта,
а инкапсуляция занимается внутренним устройством.
Практически это означает наличие двух частей в классе:
интерфейса
и реализации.
Интерфейс отражает внешнее поведение объекта,
описывая абстракцию поведения всех объектов данного
класса.
Внутренняя реализация описывает представление этой
абстракции и механизмы достижения желаемого
поведения объекта.

22.

Инкапсуляция
22
Разделение интерфейса и реализации позволяет защитить
объекты от деталей реализации объектов более низкого
уровня.
Инкапсуляция позволяет вносить в программу изменения,
сохраняя ее надежность и минимизируя затраты на этот
процесс.

23.

Модульность
Модульность – это свойство системы, связанное с
возможностью декомпозиции на ряд внутренне
связанных, но слабо связанных между собой модулей.
В языке С++ под модулями понимается раздельно компилируемые
файлы.
Модульность – это разделение программы на раздельно
компилируемые фрагменты, имеющие между собой
средства сообщения.
Традиционным в С++ является помещение интерфейсной части
модулей в отдельные файлы с расширением .h.
23

24.

Иерархия и наследование
24
Иерархия – ранжированная (упорядоченная) система
абстракций.
Основными видами иерархических структур применительно
к сложным системам является
структура классов (иерархия "is -a")
и структура объектов (иерархия "part of").

25.

Иерархия и наследование
25
Иерархия "is -a" наиболее часто строится с помощью
наследования.
Наследование – определение отношений между
классами, где класс разделяет структуру или
поведение, определенные в одном другом или в
нескольких других классах.
Оперируют понятиями:
суперкласс
и подкласс.
Суперкласс соответствует общей абстракции,
а подкласс – специализированной абстракции, в которой
элементы суперкласса дополняются, изменяются и
скрываются.

26.

Иерархия и наследование
26
Принцип наследования позволяет упростить выражения
абстракции, делая проект менее громоздким и более
выразительным.
Т.о.,
наследование – это такая иерархичность абстракций,
в которой подклассы наследуют строение от одного
или нескольких суперклассов.
В подклассе, кроме того, могут быть определены
дополнительные атрибуты и методы.
Суперклассы отражают наиболее общие абстракции,
а подклассы более специализированные абстракции.
Поэтому о наследовании говорят, как об иерархии
"обобщение специализации".

27.

Иерархия и наследование
27
Различают случаи
простого
и множественного
наследования.
В первом случае подкласс может определяться только на
основе одного суперкласса,
во втором случае суперклассов может быть несколько.
Если в языке или системе поддерживается единичное
наследование классов, набор классов образует
древовидную иерархию.
При поддержании множественного наследования классы
связаны в ориентированный граф с корнем, называемый
решеткой классов.

28.

Иерархия и наследование
28
Иерархия "part of" (иерархия по составу) базируется на
отношении агрегирования (агрегации).
Более высокий уровень представляет те абстракции,
которые используют в своём составе другие классы.
Агрегирование полезно в сочетании с наследованием:
агрегация обеспечивает физическую группировку
логически связанной структуры;
наследование позволяет легко и многократно
использовать эти общие группы в других абстракциях.
При наследовании нижний элемент иерархии
(подкласс) имеет больший уровень сложности, при
агрегирование – наоборот.

29.

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

30.

Типизация
30
Типизация – ограничение предъявляемых классу объектов,
препятствующих взаимозамене различных классов и в
большинстве случаев сильно сужающих возможность
такой замены.
Концепция типизации строится на понятии абстрактных
типов данных.
Тип – точное определение свойств, строения или
поведения, которое присуще некоторой совокупности
объекта.
Часто термины «тип» и «класс» считают эквивалентными.
Более точно сказать, что класс реализует тип.

31.

Типизация
Типизация позволяет выполнять описание абстракций
таким образом, что реализуется поддержка проектных
решений на уровне языка программирования.
В тоже время объектно-ориентированные языки
программирования могут быть:
строго типизированными,
нестрого типизированными
и совсем не типизированными.
Это позволяет говорить о типизации, как о второстепенном
элементе.
Сильно типизированные языки – это такие языки, в
которых все выражения проводят проверку на
соответствие типов.
С++ поддерживает сильную типизацию.
31

32.

Типизация
Различают
статическую типизацию (раннее связывание)
и динамическую типизацию (позднее связывание).
Разделение имеет отношение ко времени, когда имена
связывают с типами:
статическая – во время компиляции;
динамическая – во время исполнения программы.
32

33.

Типизация
33
Полиморфизм возникает на стыке принципов наследования
и динамических связей.
Это свойство является самым существенным в ООП.
Полиморфизм отличает ООПр от более традиционных
методов с использованием абстрактных типов данных.
Это свойство одних и тех же объектов и методов
принимать разные формы.
Полиморфизм – это возможность объектов с одинаковой
спецификацией иметь различную реализацию.

34.

Принципы ООП
34

35.

Параллелизм
35
Параллелизм – это способность автоматических систем
для определенной категории задач реализовывать
обработку многих событий, происходящих одновременно.
В то время как ООП строится на
абстракции,
инкапсуляции
и наследовании,
параллелизм связан с
абстрагированием процессов
и синхронизацией.

36.

Параллелизм
36
Объект является основой, которая объединяет обе
концепции.
Каждый объект (как абстракция реальности) может
представлять собой отдельный поток управления
(абстракцию процесса). Такой объект называется
активным.
Параллелизм – свойство, отличающее активные объекты от
пассивных.
Для систем, построенных на основе ООПр, реальность
может быть представлена, как совокупность
взаимодействующих объектов, часть из которых –
активна.

37.

Сохраняемость/устойчивость
Сохраняемость /устойчивость – это свойство объекта
существовать во времени и/или пространстве, вне
зависимости от процессов, породивших данный объект.
Выделяют следующие виды объектов, которые обладают
различной степенью, сохраняемости или устойчивости:
промежуточные результаты вычисления выражений;
локальные переменные вызова процедур;
собственные переменные (глобальные);
данные, сохраняющиеся между вызовами основной
программы;
данные остающиеся без изменений в различных
версиях программы;
данные, которые переживают создавшую их
программу.
37

38.

Сохраняемость/устойчивость
Традиционно
языки программирования реализовывают первые
три уровня,
а последние три связываются с технологией БД.
Введение сохраняемости приводит к объектноориентированным БД.
38

39.

39
3. Классы и объекты

40.

Объекты
40
Объект представляет собой особый опознаваемый
предмет или сущность (реальную или абстрактную),
имеющий четко определенное функциональное
назначение в данной предметной области.
Объект характеризуется
состоянием,
поведением,
индивидуальностью.
Структура и поведение одинаковых объектов описывается в
общем для них классе.
Термины «экземпляр класса» и «объект класса»
взаимозаменяемы.

41.

Объекты
Состояние объекта характеризуется перечнем всех его
возможных свойств (обычно статических) и текущими
значениями (обычно динамическими), т.е. атрибутами.
Атрибут – поименованное свойство класса,
определяющее диапазон допустимых значений, которые
могут принимать экземпляры данного свойства.
Видимость атрибута:
Public (общий, открытый);
Private (закрытый, секретный);
Protected (защищенный).
41

42.

Объекты
42
Поведение объекта характеризуется изменением его
состояний в процессе взаимодействия с другими
объектами посредством передачи сообщения.
Другими словами, поведение объекта является функцией
как его состояния, так и выполняемых им операций.
Индивидуальность – свойство, отличающее один объект от
другого.

43.

Объекты
43
Операцией называется определенное воздействие одного
объекта над другим с целью вызова соответствующей
реакции.
Выделяют пять основных видов операций над объектами:
модификатор изменяет состояние объекта;
селектор даёт доступ для определения состояния
объекта без его изменения;
итератор – доступ к содержанию объекта по частям
в определённой последовательности;
конструктор – создание и/или инициализация
объекта;
деструктор – удаление объекта и/или
освобождение занимаемой им памяти.

44.

Объекты
Пример операций
44

45.

Объекты
45
Сами по себе объекты не представляют интереса,
т.к. цель системы реализуется только в процессе
взаимодействия (возникновения отношений) объектов
между собой.
Отношение двух любых объектов основывается на
предположении, что каждый объект имеет информацию
о другом объекте,
об операциях, которые над ним можно выполнить
и об ожидаемом поведении.
Для ООПр представляет интерес два типа отношений
между объектами, которые рассмотрены ниже.

46.

Объекты
Рис. Представление объекта с именем Стул
46

47.

Классы
Класс – множество объектов, связанных общностью
структуры и поведением.
Существует явное разделение
внутреннего
и внешнего
описания класса.
Интерфейсная часть описания класса
соответствует его внешнему проявлению,
подчёркивает его абстрактность,
но скрывает структуру и особенности поведения.
Реализация
составляет его внутреннее проявление
и определяет особенности поведения.
47

48.

Классы
Интерфейсная часть описания класса может быть
разделена на три составные части:
общедоступную (публичную),
защищённую
и обособленную (приватную).
Рис. Структура представления класса
48

49.

Классы
49
С точки зрения контрактного программирования класс – это
генеральный контракт между абстракцией и всеми ее
клиентами. Все обязательства класса выражены в его
интерфейсе.
Состояние объекта задается в его классе через
определение констант или переменных, помещаемых в
его защищенной или закрытой части.

50.

Классы
50
Свойства класса:
Наследование – это отношение между классами, при
котором один класс разделяет структуру или
поведение одного или нескольких классов;
Полиморфизм – это способность скрывать
множество различных реализаций под единственным
общим интерфейсом
Полиморфизмом называется возможность
взаимодействия с объектом, не зная, к какому
конкретному классу он относится

51.

51
Классы
Счет
баланс
Снять
Положить
Проверить
Расчетный счет
Депозит
Срок
Процент
Истек ли срок

52.

Классы
Таким образом, классом называется описание
совокупности объектов с общими
атрибутами,
операциями,
отношениями
и семантикой.
52

53.

Отношение между классами
53
Выделяют три основных типа отношений между
классами:
обобщение/специализация («is a»)
агрегирование объектов или отношение целое/часть
(«part of»)
отношение ассоциативности отражает семантическую
связь между классами, которые не связаны никакими
другими типами отношений.
Отношение
Класс _А
Класс_Б

54.

Отношение между классами
54
Языки программирования реализуют несколько общих
способов для отражения трех типов отношений между
классами.
Объектно-ориентированные языки реализуют в разных
комбинациях следующие механизмы отношений классов:
Ассоциация – наиболее общий и неопределённый вид
отношений. Обычно в процессе детализации проекта,
ассоциация превращается в какую-то
специализированную связь.
Мощность ассоциации бывает трёх типов:
один-к-одному;
один-ко-многим;
многие-ко-многим.

55.

Отношение между классами
55
Примеры ассоциаций с различными типами мощности приведены на
рис., они имеют следующий смысл:
для каждого экземпляра класса «Библиотека» есть 0 или более
экземпляров класса «Книга», а для каждого экземпляра класса «Книга»
есть один экземпляр класса «Библиотека»;
у европейской жены один муж, а у европейского мужа одна жена;
у восточной жены один муж, а у восточного мужа сколько угодно жён;
у заказа один клиент, а у клиента сколько угодно заказов;
человек может посещать сколько угодно зданий, а в здании может
находиться сколько угодно людей.

56.

Отношение между классами
у заказа один клиент, а у клиента сколько угодно заказов;
человек может посещать сколько угодно зданий, а в здании может
находиться сколько угодно людей.
56

57.

Отношение между классами
57
Наследование или обобщение – наиболее
эффективный тип отношений, который используется, как
для отражения общности, так и для отражения
ассоциативности.
Класс-предок
Класс-потомок

58.

Отношение между классами
Рис. Вариант графического изображения отношения обобщения
классов для случая объединения отдельных линий
58

59.

59
Отношение между классами
Агрегация – описание одного класса включает описание
другого.
композиция
Целое
Часть
Целое
Часть

60.

Отношение между классами
Рис. Диаграмма классов для иллюстрации отношения агрегации на
примере ПК
60

61.

Отношение между классами
Рис. Диаграмма классов для иллюстрации отношения агрегации на
примере чайного сервиза
61

62.

Отношение между классами
Рис. Пример отношения композиции
62

63.

Отношение между классами
Рис. Физическое включение частей в агрегат
Пример физического включения (композиции) частей (Двигателя, Сидений,
Колес) в агрегат Автомобиль.
В этом случае говорят, что части включены в агрегат по величине.
63

64.

Отношение между классами
64
Рис. 2.8. Нефизическое включение частей в агрегат
Пример нефизического включения частей (Студента, Преподавателя) в
агрегат ВУЗ.
Очевидно, что Студент и Преподаватель являются элементами ВУЗа,
но они не входят в него физически.
В этом случае говорят, что части включены в агрегат по ссылке.

65.

65
Отношение между классами
Зависимостью называют отношение использования,
согласно которому изменение спецификации одного
элемента может повлиять на другой элемент его
использующий.
Чаще всего зависимости применяются при работе с
классами, чтобы отразить тот факт, что один класс
использует другой в качестве аргумента.
В типичном случае такое отношение использования
проявляет себя, если в реализации какой-либо
операции происходит объявление используемого
класса.
Класс 1
Класс 2
Зависимый
элемент
Независимый
элемент

66.

Отношение между классами
Рис. Пример зависимости
66

67.

Отношение между классами
67
Инстанцирование. Этот тип отношений охватывает так
же обобщение и ассоциативность, но другим способом.
В данном случае используется механизм конкретизации
обобщения за счёт использования классовконтейнеров, экземпляры которых состоят из
наборов других объектов и могут быть,
либо однородными,
или неоднородными – состоящими из объектов
разных классов, имеющими разный суперкласс.

68.

Отношение между классами
68
Возможно четыре основных способа построения таких
классов:
а) Использование макроопределений.
б) Наследование и позднее связывание, создаёт однородные
объекты.
в) Специальная процедура контроля типа, позволяющая в процессе
образования объекта закрепить определённый класс элементов.
г) Параметризованный класс представляет собой шаблон для
построения других классов путём замены в базовом классе
параметров на значения. Только после наполнения параметров
такого класса значениями возможно создание объекта.

69.

Отношение между классами
Метаклассы – это особый тип отношений, который
реализуется не всеми объектно-ориентированными
языками.
Метакласс – это класс классов, позволяющих
трактовать классы, как объекты.
69

70.

Отношение между классами
Общие правила для определения типа отношений.
Если некоторая абстракция представляет нечто
большее, чем сумма компонент, то лучше
использовать отношения агрегации.
Если абстракция является подвидом другой
абстракции, или соответствует простой сумме
компонент, то следует использовать отношение
наследования.
70

71.

Взаимосвязь классов и объектов
В большинстве практических задач классы статичны,
т.е. все их особенности и содержание определены в
процессе компиляции программ.
Объекты, в процессе выполнения программы,
непрерывно создаются и разрушаются,
т.е. объекты изменчивы и динамичны.
71
English     Русский Правила