Слайд 2
![Основы структурного моделирования](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-1.jpg)
Основы структурного моделирования
Слайд 3
![Ограничения Используются в языке Eiffel (Design by contract, Бертран Мейер)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-2.jpg)
Ограничения
Используются в языке Eiffel (Design by contract, Бертран Мейер)
В основе лежит
понятие утверждения: булевское высказывание, которое всегда истинно
Предусловия, условия и инвариант
Слайд 4
![Ограничения Пусть A – это некоторая операция, тогда формула корректности](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-3.jpg)
Ограничения
Пусть A – это некоторая операция, тогда формула корректности (correctness formula)
{P}
A {Q} (Триада Хоара)
{x = 5} x = x ^ 2 {x > 0}
Слайд 5
![Ограничения Кто ответственен за выполнение проверки? Для предусловия ответственен вызывающий класс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-4.jpg)
Ограничения
Кто ответственен за выполнение проверки?
Для предусловия ответственен вызывающий класс
Слайд 6
![Самая трудная задача в объектно-ориентированном проектировании – разложить систему на](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-5.jpg)
Самая трудная задача в объектно-ориентированном проектировании – разложить систему на объекты
Можно
сформулировать задачу письменно, выделить из получившейся фразы существительные и глаголы, после чего создать соответствующие классы и операции.
Слайд 7
![Моделирование Другой путь – сосредоточиться на отношениях и разделении обязанностей](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-6.jpg)
Моделирование
Другой путь – сосредоточиться на отношениях и разделении обязанностей в системе.
Согласие
по поводу того, какой подход самый лучший, никогда не будет достигнуто. (GoF)
Слайд 8
![CRC – карточки Уорд Каннингхем и Кент Бек (разработчики Smalltalk)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-7.jpg)
CRC – карточки
Уорд Каннингхем и Кент Бек (разработчики Smalltalk) в
конце 80-х, Удобны при построении диаграмм взаимодействия
CRC: Class-Responsibility-Collaboration
(Класс- Ответсвенность- Кооперация)
Технология использовалась для проектирования модели классов
Слайд 9
![CRC карточки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-8.jpg)
Слайд 10
![CRC – карточки Небольшие карточки, размером 4 х 6см](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-9.jpg)
CRC – карточки
Небольшие карточки, размером 4 х 6см
Слайд 11
![CRC карточки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-10.jpg)
Слайд 12
![Диаграммы классов используются: диаграммы классов используются в следующих целях: для](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-11.jpg)
Диаграммы классов используются:
диаграммы классов используются в следующих целях:
для моделирования
словаря системы
для моделирования простых коопераций
для моделирования логической схемы базы данных.
Слайд 13
![Диаграммы классов используются: Моделирование словаря системы: Определите, какие элементы пользователи](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-12.jpg)
Диаграммы классов используются:
Моделирование словаря системы:
Определите, какие элементы пользователи и разработчики
применяют для описания задачи или ее решения. Используйте CRC-карточки.
Выявите для каждой абстракции соответствующее ей множество обязанностей.
Разработайте атрибуты и операции, необходимые для выполнения класса ими своих обязанностей.
Слайд 14
![Моделирование схемы БД](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-13.jpg)
Слайд 15
![Моделирование схемы БД используйте зависимость, только если моделируемое отношение не](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-14.jpg)
Моделирование схемы БД
используйте зависимость, только если моделируемое отношение не является
структурным;
используйте обобщение, только если имеет место отношение типа "является";
множественное наследование часто можно заменить агрегированием;
остерегайтесь циклических отношений обобщения;
Слайд 16
![Моделирование схемы БД поддерживайте баланс в отношениях обобщения: иерархия наследования](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-15.jpg)
Моделирование схемы БД
поддерживайте баланс в отношениях обобщения: иерархия наследования не
должна быть ни слишком глубокой (желательно не более пяти уровней), ни слишком широкой (лучше прибегнуть к промежуточным абстрактным классам);
применяйте ассоциации прежде всего там, где между объектами существуют структурные отношения.
Слайд 17
![Моделирование схемы БД выбрав один из стилей оформления линий (прямые](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-16.jpg)
Моделирование схемы БД
выбрав один из стилей оформления линий (прямые или
наклонные), в дальнейшем старайтесь его придерживаться. Прямые линии подчеркивают, что соединения идут от родственных сущностей к одному общему родителю. Наклонные линии позволяют существенно сэкономить пространство в сложных диаграммах. Если вы хотите привлечь внимание к разным группам отношений, применяйте одновременно оба типа линий;
Слайд 18
![Моделирование схемы БД избегайте пересечения линий; показывайте только такие отношения,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-17.jpg)
Моделирование схемы БД
избегайте пересечения линий;
показывайте только такие отношения, которые
необходимы для понимания особенностей группирования элементов модели; скрывайте несущественные (особенно избыточные) ассоциации.
Слайд 19
![Шаблоны: Decorator Назначение: Динамически добавляет объекту новые обязанности. Является гибкой](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-18.jpg)
Шаблоны: Decorator
Назначение: Динамически добавляет объекту новые обязанности. Является гибкой альтернативой порождению
подклассов с целью расширения функциональности
Слайд 20
![Шаблоны: Decorator](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-19.jpg)
Слайд 21
![Шаблоны: Decorator](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-20.jpg)
Слайд 22
![Шаблоны: Decorator](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-21.jpg)
Слайд 23
![Шаблоны: Decorator Используйте паттерн: для динамического, прозрачного для клиентов добавления](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-22.jpg)
Шаблоны: Decorator
Используйте паттерн:
для динамического, прозрачного для клиентов добавления обязанностей объектам;
для реализации
обязанностей, которые могут быть сняты с объекта;
когда расширение путем порождения подклассов по каким-то причинам неудобно
Слайд 24
![Шаблоны: Adapter Назначение: Преобразует интерфейс одного класса в интерфейс другого, который ожидают клиенты](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-23.jpg)
Шаблоны: Adapter
Назначение: Преобразует интерфейс одного класса в интерфейс другого, который ожидают
клиенты
Слайд 25
![Шаблоны: Adapter](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-24.jpg)
Слайд 26
![Шаблоны: Adapter](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-25.jpg)
Слайд 27
![Шаблоны: Bridge Назначение: Отделить абстракцию от ее реализации так, чтобы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-26.jpg)
Шаблоны: Bridge
Назначение: Отделить абстракцию от ее реализации так, чтобы то и
другое можно было изменять независимо.
Слайд 28
![Шаблоны: Bridge Задача: 2 среды Xwindows и Presentation Manager (PM) от компании IBM](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-27.jpg)
Шаблоны: Bridge
Задача: 2 среды Xwindows и Presentation Manager (PM) от компании
IBM
Слайд 29
![Шаблоны: Bridge Решение:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-28.jpg)
Слайд 30
![Шаблоны: Bridge Решение:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-29.jpg)
Слайд 31
![Composite (Компоновщик) Назначение: Компонует объекты в древовидные структуры для представления иерархий часть-целое.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-30.jpg)
Composite (Компоновщик)
Назначение: Компонует объекты в древовидные структуры для представления иерархий часть-целое.
Слайд 32
![Composite (Компоновщик)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-31.jpg)
Слайд 33
![Composite (Компоновщик)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-32.jpg)
Слайд 34
![Flyweight (Приспособленец) Назначение: Использует разделение для эффективной поддержки множества мелких объектов.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-33.jpg)
Flyweight (Приспособленец)
Назначение: Использует разделение для эффективной поддержки множества мелких объектов.
Слайд 35
![Flyweight (Приспособленец)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-34.jpg)
Flyweight (Приспособленец)
Слайд 36
![Flyweight (Приспособленец) Ключевая идея здесь – различие между внутренним и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-35.jpg)
Flyweight (Приспособленец)
Ключевая идея здесь – различие между внутренним и внешним состояниями
Приспособленец
– это разделяемый объект.
Объекты-клиенты отвечают за передачу внешнего состояния приспособленцу, когда в этом возникает необходимость
Слайд 37
![Flyweight (Приспособленец)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-36.jpg)
Flyweight (Приспособленец)
Слайд 38
![Flyweight (Приспособленец)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-37.jpg)
Flyweight (Приспособленец)
Слайд 39
![Flyweight (Приспособленец)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-38.jpg)
Flyweight (Приспособленец)
Слайд 40
![Flyweight (Приспособленец) состояние, необходимое приспособленцу для нормальной работы, можно охарактеризовать](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-39.jpg)
Flyweight (Приспособленец)
состояние, необходимое приспособленцу для нормальной работы, можно охарактеризовать как внутреннее
или внешнее. Первое хранится в самом объекте ConcreteFlyweight. Внешнее состояние хранится или вычисляется клиентами
Слайд 41
![Flyweight (Приспособленец) При реализации приспособленца следует обратить внимание на следующие](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-40.jpg)
Flyweight (Приспособленец)
При реализации приспособленца следует обратить внимание на следующие вопросы:
вынесение внешнего
состояния.
управление разделяемыми объектами
Слайд 42
![Паттерн Proxy (Заместитель) Назначение: Является суррогатом другого объекта и контролирует доступ к нему.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-41.jpg)
Паттерн Proxy (Заместитель)
Назначение: Является суррогатом другого объекта и контролирует доступ к
нему.
Слайд 43
![Паттерн Proxy (Заместитель)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-42.jpg)
Паттерн Proxy (Заместитель)
Слайд 44
![Паттерн Proxy (Заместитель)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-43.jpg)
Паттерн Proxy (Заместитель)
Слайд 45
![Паттерн Proxy (Заместитель) У паттерна заместитель при доступе к объекту](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-44.jpg)
Паттерн Proxy (Заместитель)
У паттерна заместитель при доступе к объекту вводится дополнительный
уровень косвенности:
удаленный заместитель может скрыть тот факт, что объект находится в другом адресном пространстве;
виртуальный заместитель может выполнять оптимизацию, например создание объекта по требованию;
защищающий заместитель и «умная» ссылка позволяют решать дополнительные задачи при доступе к объекту.
Слайд 46
![Паттерн Abstract Factory Назначение: Предоставляет интерфейс для создания семейств взаимосвязанных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-45.jpg)
Паттерн Abstract Factory
Назначение:
Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов,
не специфицируя их конкретных классов.
Слайд 47
![Паттерн Abstract Factory](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-46.jpg)
Слайд 48
![Паттерн Abstract Factory](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-47.jpg)
Слайд 49
![Паттерн Prototype Назначение Задает виды создаваемых объектов с помощью экземпляра-прототипа](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/53862/slide-48.jpg)
Паттерн Prototype
Назначение
Задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые
объекты путем копирования этого прототипа.