Распределение обязанностей с использованием UML

Содержание

Слайд 2

Обязанности

Обязанность – контракт или обязательство классификатора.
Действие
Выполнение действий другим объектом (создание экземпляра или

Обязанности Обязанность – контракт или обязательство классификатора. Действие Выполнение действий другим объектом
выполнение вычислений)
Инициирование действий других объектов
Управление действиями других объектов или их координирование
Знание
Наличие информации о закрытых инкапсулированных данных
Наличие информации о связных объектах
Наличие информации о следствиях или вычисляемых величинах

Слайд 3

Обязанности

Обязанности

Слайд 4

Обязанности

Операция => Обязанность
Обязанность ≠> Операция

Обязанности Операция => Обязанность Обязанность ≠> Операция

Слайд 5

Обязанности на диаграммах взаимодействия

Обязанности на диаграммах взаимодействия

Слайд 6

GRASP

Шаблоны GRAS или GRASP – General Responsibility Assignment Software Patterns
Информационный эксперт (Information

GRASP Шаблоны GRAS или GRASP – General Responsibility Assignment Software Patterns Информационный
Expert)
Создатель (Creator)
Высокое зацепление (High Cohesion)
Слабое связывание (Low Coupling)
Контроллер (Controller)
Полиморфизм (Polymorphism)
Чистая выдумка (Pure Fabrication)
Посредник (Indirection)
Сокрытие реализации (Protected Variations)

Слайд 7

Информационный эксперт

Проблема:
Необходимо выявить наиболее общий принцип распределения обязанностей между объектами.
Решение:
Назначить обязанность информационному

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

Слайд 8

Информационный эксперт

GetTotalPrice()

?

!

Информационный эксперт GetTotalPrice() ? !

Слайд 9

Информационный эксперт

Информационный эксперт

Слайд 10

Информационный эксперт

Требуемая обязанность:
Знать и предоставлять общую сумму продажи.
Итоговое распределение обязанностей:

Информационный эксперт Требуемая обязанность: Знать и предоставлять общую сумму продажи. Итоговое распределение обязанностей:

Слайд 11

Информационный эксперт Выводы

Самый часто используемый шаблон распределения обязанностей.
Аналогия с реальным миром.
Существование «частичных» экспертов.

Информационный эксперт Выводы Самый часто используемый шаблон распределения обязанностей. Аналогия с реальным миром. Существование «частичных» экспертов.

Слайд 12

Информационный эксперт Преимущества

Поддерживает инкапсуляцию
Поведение обеспечивается несколькими классами, содержащими требуемую информацию => простота понимания

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

Слайд 13

Информационный эксперт не следует применять

В тех случаях, когда это нарушает связывание и сцепление.

SQL

Информационный эксперт не следует применять В тех случаях, когда это нарушает связывание и сцепление. SQL

Слайд 14

Создатель

Проблема:
Кто должен отвечать за создание нового экземпляра некоторого класса?
Решение:
Назначить классу B обязанность

Создатель Проблема: Кто должен отвечать за создание нового экземпляра некоторого класса? Решение:
создавать экземпляры класса A, если выполняется одно из следующих условий:
Класс B агрегирует объекты A.

Слайд 15

Создатель

Класс B содержит объекты A.
Класс B записывает экземпляры объектов A.

Создатель Класс B содержит объекты A. Класс B записывает экземпляры объектов A.

Слайд 16

Создатель

Класс B активно использует объекты A.
Класс B обладает данными инициализации объектов A.
Класс

Создатель Класс B активно использует объекты A. Класс B обладает данными инициализации
B – создатель объектов A.

Слайд 17

Создатель

AddLineItem()

?

!

Создатель AddLineItem() ? !

Слайд 18

Создатель

Создатель

Слайд 19

Создатель Выводы

Самый распространенный способ распределения обязанностей, связанных с созданием объектов – простота выявления

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

Слайд 20

Создатель не следует применять

Когда создание – сложная операция, выполняемая при реализации некоторого условия

Создатель не следует применять Когда создание – сложная операция, выполняемая при реализации
на основе каких-либо внешних свойств.
В этом случае предпочтительнее использовать шаблон Фабрика (Factory).

Слайд 21

Создатель Преимущества

Не повышает степень связанности, так как созданный объект обычно оказывается видимым для

Создатель Преимущества Не повышает степень связанности, так как созданный объект обычно оказывается видимым для объекта-создателя.
объекта-создателя.

Слайд 22

Слабое связывание(Low Coupling)

Проблема:
Как обеспечить минимальную зависимость, минимальный риск изменений и повышенное

Слабое связывание(Low Coupling) Проблема: Как обеспечить минимальную зависимость, минимальный риск изменений и
повторное использование?
Связывание – мера того, насколько сильно элементы связаны, зависят друг от друга.
Сильное связывание приводит к проблемам:
Изменения в одном классе влекут необходимость в изменении другого
Сложность понимания элемента в изоляции от других
Сложность повторного использования

Слайд 23

Слабое связывание(Low Coupling)

Паттерн «Создатель» нам диктует:
Но можно поразмыслить:

Слабое связывание(Low Coupling) Паттерн «Создатель» нам диктует: Но можно поразмыслить:

Слайд 24

Слабое связывание(Low Coupling)

Классы ClassX и ClassY могут быть связаны:
ClassX имеет атрибут, который

Слабое связывание(Low Coupling) Классы ClassX и ClassY могут быть связаны: ClassX имеет
ссылается на ClassY
ClassX содержит операцию, которая ссылается на ClassY (использует экземпляр класса в качестве параметра, переменной или возвращаемого значения)
ClassX – непосредственный потомок ClassY
ClassY – интерфейс, а ClassX его реализует

Слайд 25

Слабое связывание(Low Coupling)

Применение
Применяется вместе с другими паттернами (такими как Высокое зацепление и

Слабое связывание(Low Coupling) Применение Применяется вместе с другими паттернами (такими как Высокое
Эксперт)
Применяется в случае «нестабильности» в эволюционном смысле слова. Не применяется в отношении к классам статических библиотек.
Применяется в разумных пределах

Слайд 26

Слабое связывание(Low Coupling)

Результаты
Решение проблемы
Классы не зависят от изменений в других классах
Классы легко

Слабое связывание(Low Coupling) Результаты Решение проблемы Классы не зависят от изменений в
понимаемы вне контекста
Классы удобны для повторного использования

Слайд 27

Высокое зацепление (High cohesion)

Проблема
Как управлять необъятным?
Зацепление – мера того, насколько взаимосвязаны и

Высокое зацепление (High cohesion) Проблема Как управлять необъятным? Зацепление – мера того,
целенаправленны обязанности, возложенные на элемент.
Элемент с взаимосвязанными обязанностями обладает высоким зацеплением.
Слабое зацепление приводит к проблемам:
Класс трудно «познать»
Класс трудно использовать повторно
Класс трудно поддерживать
Класс «нежен»

Слайд 28

Высокое зацепление (High cohesion)

Мы снова доверяемся паттерну «Создатель»

Высокое зацепление (High cohesion) Мы снова доверяемся паттерну «Создатель»

Слайд 29

Высокое зацепление (High cohesion)

Но тогда Register может разбухнуть!
Попробуем все же вот так:

Высокое зацепление (High cohesion) Но тогда Register может разбухнуть! Попробуем все же вот так:

Слайд 30

Высокое зацепление (High cohesion)

Классификация зацеплений (by Grady Booch)
Очень низкое зацепление (RDB-RPC-Interface)
Низкое зацепление

Высокое зацепление (High cohesion) Классификация зацеплений (by Grady Booch) Очень низкое зацепление
(RDB-Interface)
Высокое зацепление
Умеренное зацепление (Company)

Слайд 31

Высокое зацепление (High cohesion)

Зацепление и связывание
Инь и Янь программной инженерии
Исключения
Упрощение обслуживания одним

Высокое зацепление (High cohesion) Зацепление и связывание Инь и Янь программной инженерии
человеком (ICQ Expert)
Удаленные операции

Слайд 32

Высокое зацепление (High cohesion)

Результаты
Ясность и простота понимания дизайна
Упрощение поддержки и эволюции
Слабое связывание

Высокое зацепление (High cohesion) Результаты Ясность и простота понимания дизайна Упрощение поддержки
в подарок
Повторное использование

Слайд 33

Контроллер

Проблема
Кто должен быть ответственен за обработку системных событий ввода?
Системное сообщение ввода– сообщение,

Контроллер Проблема Кто должен быть ответственен за обработку системных событий ввода? Системное
сгенерированное внешним актером. Они ассоциированы с операциями системы в ответ на событие.

Слайд 34

Контроллер

Контроллер

Слайд 35

Контроллер

Варианты контроллера
Фасадный контроллер - представляет всю систему(или подсистему) в совокупности
Register
Название, соответствующее системе

Контроллер Варианты контроллера Фасадный контроллер - представляет всю систему(или подсистему) в совокупности
(ChessGame)
Контроллер варианта использования представляет ВИ, в пределах которого возникают сообщения.
Handler

Слайд 36

Контроллер

Выбор контроллера
Фасадный контроллер
Малое количество событий
UI не может перенаправить системные сообщения на переменные

Контроллер Выбор контроллера Фасадный контроллер Малое количество событий UI не может перенаправить
контроллеры (как в системах обработки сообщений)
Контроллер ВИ
Большое количество событий
Необходимо поддерживать логику ВИ
UI не должны быть ответственны за события ввода!

Слайд 37

Контроллер

Контроллер

Слайд 38

Не контроллер

Не контроллер

Слайд 39

Контроллер

Результаты
Логика приложения отделена от интерфейса
Повторное использование
Учет состояния варианта использования

Контроллер Результаты Логика приложения отделена от интерфейса Повторное использование Учет состояния варианта использования

Слайд 40

Контроллер

Проблемы
Один единственный контроллер, принимающий орды сообщений
Контроллер берет на себя часть обязанностей по

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

Слайд 41

Благодарность

Creig Larman, за его интереснейшую книгу “Applying UML and patterns”.

Благодарность Creig Larman, за его интереснейшую книгу “Applying UML and patterns”.

Слайд 42

Благодарность

Гради Бучу, за то, что учил Крэга Лармана. И за то, что

Благодарность Гради Бучу, за то, что учил Крэга Лармана. И за то, что научил.
научил.

Слайд 43

Благодарность

А.Ю. Шелестову, за перевод замечательной книги Крэга Лармана на русский язык («Применение

Благодарность А.Ю. Шелестову, за перевод замечательной книги Крэга Лармана на русский язык
UML и шаблонов проектирования»).

Слайд 44

Благодарность

Google Search, за его релевантную выдачу.

Благодарность Google Search, за его релевантную выдачу.

Слайд 45

Благодарность

Ru.wikipedia.org, за понимание темы в целом.

Благодарность Ru.wikipedia.org, за понимание темы в целом.

Слайд 46

Благодарность

Пакету Microsoft Office 2007, за прекрасные инструменты создания презентаций.

Благодарность Пакету Microsoft Office 2007, за прекрасные инструменты создания презентаций.

Слайд 47

Благодарность

И, конечно, отдельное спасибо компании Blizzard, за ее бессмертные игры.

Благодарность И, конечно, отдельное спасибо компании Blizzard, за ее бессмертные игры.
Имя файла: Распределение-обязанностей-с-использованием-UML.pptx
Количество просмотров: 25
Количество скачиваний: 0