- •1. Назначение языка
- •2. Способы использования языка
- •3. Нотация языка uml
- •Виды диаграмм uml
- •5. Диаграмма прецедентов (use case diagram)
- •6. Диаграмма классов (class diagram)
- •7. Диаграмма объектов (object diagram)
- •8. Диаграмма последовательностей (sequence diagram)
- •9. Диаграмма взаимодействия (кооперации, collaboration diagram)
- •10. Диаграмма состояний (statechart diagram)
- •11. Диаграмма активности (деятельности, activity diagram)
- •12. Диаграмма развертывания (deployment diagram)
- •13. Ооп и последовательность построения диаграмм
- •14. Отображение класса и его элементов на диаграмме uml
- •15. Способы использования объектов класса
- •16. Моделирование наследования в uml
- •17. Отношения между классами
- •18. Отношение зависимости между классами
- •19. Отношение ассоциации между классами
- •20. Композиция и агрегация классов
- •21. Сравнение диаграмм активностей и блок-схем
- •22. Моделирование процессов диаграммами активности
- •23. Моделирование операций диаграммами активности
- •24. Правила построения диаграммам активности
- •Составление перечня деятельностей в системе
- •Принятие решения о необходимости построения диаграммы деятельностей
- •25. Диаграмма кооперации
- •26. Диаграмма последовательностей как диаграмма взаимодействия
- •27. Диаграмма кооперации как альтернатива диаграмм последовательностей
- •28. Диаграмма кооперации как диаграмма взаимодействий объектов
- •29. Типы сообщений: синхронные, асинхронные и ответные, потерянные и найденные.
- •30. Уровни экземпляров и спецификации в диаграммах кооперации
- •31. Мультиобъекты, композитные и активные объекты в диаграммах кооперации.
- •32. Диаграммы взаимодействия с разветвленным потоком управления
- •33. Нефункциональные требования и их отображение на диаграммах прецедентов
- •34. Понятие эктора и отношения между экторами
- •35. Отношения включения и расширения между экторами
- •36. Причины использования прецедентов.
- •37. Прецеденты в прямом и обратном проектировании
- •38. Обзор case-средств для построения диаграмм uml
- •Visio поддерживает множество локальных языков
- •39. Критерии выделения прецедентов
- •40. Понятие шаблона проектирования
- •41. Основные шаблоны grasp
- •Information Expert (Информационный эксперт)
- •Indirection (Посредник)
- •42. Описание шаблонов проектирования GoF
- •43. Классификация шаблонов проектирования GoF
- •44. Структурные шаблоны проектирования
- •56. Понятие рефакторинга программ
- •57. Анти-шаблоны управления разработкой программ
- •Раздувание по (Software bloat): Разрешение последующим версиям системы требовать всё больше и больше ресурсов
- •58. Анти-шаблоны разработки программ
- •59. Анти-шаблоны в объектно-ориентированном программировании
- •60. Анти-шаблоны в программировании
- •61. Методологические анти-шаблоны
- •62. Анти-шаблоны управления конфигурацией
- •63. Примеры организационных анти-шаблонов
- •64. Социальные анти-шаблоны
- •Шаблоны параллельного программирования (Concurrency)
- •Другие типы шаблонов
- •66. Шаблон делегирования
- •Простой пример
- •67. Шаблон функционального дизайна
- •68. Неизменяемый объект (шаблон проектирования)
- •69. Интерфейс (шаблон проектирования)
- •70. Порождающие шаблоны проектирования
- •71. Абстрактная фабрика (шаблон проектирования)
- •72. Строитель (шаблон проектирования)
- •73. Фабричный метод (шаблон проектирования)
- •74. Отложенная инициализация (шаблон проектирования)
- •75. Объектный пул (шаблон проектирования)
- •76. Прототип (шаблон проектирования)
- •77. Получение ресурса есть инициализация (шаблон проектирования)
- •78. Одиночка (шаблон проектирования)
- •79. Структурные шаблоны
- •80. Адаптер (шаблон проектирования)
- •81. Мост (шаблон проектирования)
- •82. Компоновщик (шаблон проектирования)
- •83. Декоратор (шаблон проектирования)
- •84. Фасад (шаблон проектирования)
- •85. Приспособленец (шаблон проектирования)
- •86. Заместитель (шаблон проектирования)
- •87. Поведенческие шаблоны
- •88. Цепочка ответственности (шаблон проектирования)
- •89. Команда (шаблон проектирования)
- •90. Интерпретатор (шаблон проектирования)
- •91. Итератор (шаблон проектирования)
- •92. Посредник (шаблон проектирования)
- •93. Хранитель (шаблон проектирования)
- •94. Наблюдатель (шаблон проектирования)
- •95. Состояние (шаблон проектирования)
- •96. Стратегия (шаблон проектирования)
- •97. Шаблоны параллельного программирования Шаблоны параллельного программирования (Concurrency)
- •Пример реализации Пример c#
- •Следствия
- •98. Модель-представление-контроллер (шаблон проектирования)
- •99. Технология использования шаблонов проектирования
1. Назначение языка 5
2. Способы использования языка 7
3. Нотация языка UML 12
4. Виды диаграмм UML 13
5. Диаграмма прецедентов (use case diagram) 14
6. Диаграмма классов (class diagram) 16
7. Диаграмма объектов (object diagram) 18
8. Диаграмма последовательностей (sequence diagram) 20
9. Диаграмма взаимодействия (кооперации, collaboration diagram) 21
10. Диаграмма состояний (statechart diagram) 23
11. Диаграмма активности (деятельности, activity diagram) 25
12. Диаграмма развертывания (deployment diagram) 27
13. ООП и последовательность построения диаграмм 28
14. Отображение класса и его элементов на диаграмме UML 29
15. Способы использования объектов класса 31
16. Моделирование наследования в UML 32
17. Отношения между классами 34
18. Отношение зависимости между классами 38
19. Отношение ассоциации между классами 39
20. Композиция и агрегация классов 42
21. Сравнение диаграмм активностей и блок-схем 44
22. Моделирование процессов диаграммами активности 47
23. Моделирование операций диаграммами активности 48
24. Правила построения диаграммам активности 49
25. Диаграмма кооперации 51
26. Диаграмма последовательностей как диаграмма взаимодействия 56
27. Диаграмма кооперации как альтернатива диаграмм последовательностей 60
28. Диаграмма кооперации как диаграмма взаимодействий объектов 60
29. Типы сообщений: синхронные, асинхронные и ответные, потерянные и найденные. 60
30. Уровни экземпляров и спецификации в диаграммах кооперации 61
31. Мультиобъекты, композитные и активные объекты в диаграммах кооперации. 62
32. Диаграммы взаимодействия с разветвленным потоком управления 63
33. Нефункциональные требования и их отображение на диаграммах прецедентов 66
34. Понятие эктора и отношения между экторами 69
35. Отношения включения и расширения между экторами 73
36. Причины использования прецедентов. 77
37. Прецеденты в прямом и обратном проектировании 80
38. Обзор CASE-средств для построения диаграмм UML 81
IBM Rational Rose 81
Borland Together 83
Microsoft Visio 85
Выводы 86
39. Критерии выделения прецедентов 87
40. Понятие шаблона проектирования 89
41. Основные шаблоны GRASP 90
Information Expert (Информационный эксперт) 90
Creator (Создатель) 91
Controller (Контроллер) 91
Low Coupling (Слабая связанность) 91
High Cohesion (Сильное зацепление) 91
Polymorphism (Полиморфизм) 92
Pure Fabrication (Чистая выдумка) 92
Indirection (Посредник) 92
Protected Variations (Сокрытие реализации) 92
42. Описание шаблонов проектирования GoF 93
43. Классификация шаблонов проектирования GoF 94
44. Структурные шаблоны проектирования 96
45. Шаблоны централизованного управления 97
46. Шаблоны управления на основе событий 97
47. Шаблоны взаимодействия с базами данных 97
48. Структурные шаблоны интеграции 97
49. Понятие анти-шаблона или ловушки проектирования 97
50. Методы настройки и обеспечения гибкости проектов 99
51. Понятие стратегии и классов стратегии 99
52. Способы реализации классов стратегии 99
53. Деструкторы классов стратегии 99
54. Неполная конкретизация классов стратегии 99
55. Функторы и их использование 99
56. Понятие рефакторинга программ 100
57. Анти-шаблоны управления разработкой программ 103
58. Анти-шаблоны разработки программ 105
59. Анти-шаблоны в объектно-ориентированном программировании 107
60. Анти-шаблоны в программировании 108
61. Методологические анти-шаблоны 109
62. Анти-шаблоны управления конфигурацией 109
63. Примеры организационных анти-шаблонов 111
64. Социальные анти-шаблоны 112
65. Основные типы шаблонов проектирования 113
Основные шаблоны (Fundamental) 113
Порождающие шаблоны проектирования (Creational) 113
Структурные шаблоны (Structural) 113
Поведенческие шаблоны (Behavioral) 113
Шаблоны параллельного программирования (Concurrency) 114
MVC 114
Enterprise 114
Unsorted 115
Другие типы шаблонов 115
66. Шаблон делегирования 115
67. Шаблон функционального дизайна 116
68. Неизменяемый объект (шаблон проектирования) 117
69. Интерфейс (шаблон проектирования) 118
70. Порождающие шаблоны проектирования 119
71. Абстрактная фабрика (шаблон проектирования) 120
72. Строитель (шаблон проектирования) 124
73. Фабричный метод (шаблон проектирования) 126
74. Отложенная инициализация (шаблон проектирования) 128
75. Объектный пул (шаблон проектирования) 130
76. Прототип (шаблон проектирования) 131
77. Получение ресурса есть инициализация (шаблон проектирования) 133
78. Одиночка (шаблон проектирования) 135
79. Структурные шаблоны 136
80. Адаптер (шаблон проектирования) 137
81. Мост (шаблон проектирования) 139
82. Компоновщик (шаблон проектирования) 142
83. Декоратор (шаблон проектирования) 144
84. Фасад (шаблон проектирования) 148
85. Приспособленец (шаблон проектирования) 150
86. Заместитель (шаблон проектирования) 153
87. Поведенческие шаблоны 157
88. Цепочка ответственности (шаблон проектирования) 158
89. Команда (шаблон проектирования) 160
90. Интерпретатор (шаблон проектирования) 163
91. Итератор (шаблон проектирования) 164
92. Посредник (шаблон проектирования) 164
93. Хранитель (шаблон проектирования) 167
94. Наблюдатель (шаблон проектирования) 169
95. Состояние (шаблон проектирования) 172
96. Стратегия (шаблон проектирования) 175
97. Шаблоны параллельного программирования 179
Шаблоны параллельного программирования (Concurrency) 179
Мотивы 180
Пример реализации 180
Пример C# 180
Мотивы 186
Следствия 186
98. Модель-представление-контроллер (шаблон проектирования) 186
99. Технология использования шаблонов проектирования 187
1. Назначение языка
UML - унифицированный язык моделирования.
Язык - система знаков, служащая:
средством человеческого общения и мыслительной деятельности;
способом выражения самосознания личности;
средством хранения и передачи информации.
Язык включает в себя набор знаков (словарь) и правила их употребления и интерпретации (грамматику).
К этому определению нужно добавить, что языки бывают естественные и искусственные, формальные и неформальные. UML - язык формальный и искусственный, хотя, как мы увидим далее, этот ярлык к нему не совсем подходит. Искусственный он потому, что у него имеются авторы, о которых мы еще не раз упомянем в дальнейшем (в то же время, развитие UML непрерывно продолжается, что ставит его в один ряд с естественными языками). Формальным его можно назвать, поскольку имеются правила его употребления (правда, описание UML содержит и явно неформальные элементы, как мы, опять-таки, позже увидим). Еще один нюанс: UML - язык графический, что также немного путает ситуацию!
При описании формального искусственного языка, что мы уже видели на примерах описания языков программирования, как правило, описываются такие его элементы, как:
синтаксис, то есть определение правил построения конструкций языка;
семантика, то есть определение правил, в соответствии с которыми конструкции языка приобретают смысловое значение;
прагматика, то есть определение правил использования конструкций языка для достижения нужных нам целей.
Естественно, UML включает все эти элементы, хотя, в их описании тоже наблюдаются отличия от правил, принятых в языках программирования.
UML - это язык моделирования. Причем объектно-ориентированного моделирования. В английском языке есть целых два слова - modeling и simulation, которые оба переводятся как "моделирование", хотя означают разные понятия. Modeling подразумевает создание модели, лишь описывающей объект, а simulation предполагает получение с помощью созданной модели некоторой дополнительной информации об объекте. UML в первую очередь - язык моделирования именно в первом смысле, то есть средство построения описательных моделей. Как средство симулирования его тоже можно использовать, хотя для этой роли он подходит не так хорошо.
Третье слово в названии UML - слово "унифицированный". Его можно понимать тоже неоднозначно. В литературе можно встретить описание эры "до UML" как "войны методов" моделирования, ни один из которых "не дотягивал" до уровня индустриального стандарта. UML как раз и стал таким единым универсальным стандартом для объектно-ориентированного моделирования, которое во времена его создания как раз "вошло в моду". "Единым" языком моделирования UML можно назвать еще и потому, что в его создании, как мы увидим далее, объединились усилия авторов трех наиболее популярных методов моделирования (и не только их).
Т.О. UML - искусственный язык, который имеет некоторые черты естественного языка, и формальный язык, который имеет черты неформального. Это звучит не очень понятно, но это действительно так!
Историческая справка
Откуда взялся The UML? UML вобрал в себя черты нотаций Грейди Буча (Grady Booch), Джима Румбаха (Jim Rumbaugh), Айвара Якобсона (Ivar Jacobson) и многих других.
В не такие уж и далекие 80-е годы было множество различных методологий моделирования. Каждая из них имела свои достоинства и недостатки, а также свою нотацию. То смутное время получило название "войны методов". Проблема в том, что разные люди использовали разные нотации, и для того чтобы понять, что описывает та или иная диаграмма, зачастую требовался "переводчик". Один и тот же символ мог означать в разных нотациях абсолютно разные вещи! На рисунке ниже можно увидеть лишь малую часть многообразия методов, которые существовали в то время и в какой-то мере повлияли на UML (рис. 1.1).
Рис. 1.1.
К тому же примерно в это же время (начало 80-х) стартовала "объектно-ориентированная эра". Все началось с появлением семейства языков программирования SmallTalk, которые применяли некоторые понятия языка Simula-67, использовавшегося в 60-х годах. Появление объектно-ориентированного подхода в первую очередь было обусловлено увеличением сложности задач. Объектно-ориентированный подход внес достаточно радикальные изменения в сами принципы создания и функционирования программ, но, в то же время, позволил существенно повысить производительность труда программистов, по-иному взглянуть на проблемы и методы их решения, сделать программы более компактными и легко расширяемыми. Как результат, языки, первоначально ориентированные на традиционный подход к программированию, получили ряд объектно-ориентированных расширений. Одной из первых, в середине 80-х, была фирма Apple со своим проектом Object Pascal. Кроме этого, объектно-ориентированный подход породил мощную волну и абсолютно новых программных технологий, вершинами которой стали такие общепризнанные сегодня платформы, как Microsoft .NET Framework и Sun Java.
Но самое главное, что появление ООП требовало удобного инструмента для моделирования, единой нотации для описания сложных программных систем. И вот "три амиго", три крупнейших специалиста, три автора наиболее популярных методов решили объединить свои разработки. В 1991-м каждый из "трех амиго" начал с написания книги, в которой изложил свой метод ООАП. Каждая методология была по-своему хороша, но каждая имела и недостатки. Так, метод Буча был хорош в проектировании, но слабоват в анализе. OMT Румбаха был, наоборот, отличным средством анализа, но плох в проектировании. И наконец, Objectory Якобсона был действительно хорош с точки зрения user experience, на который ни метод Буча, ни OMT не обращали особого внимания. Основной идеей Objectory было то, что анализ должен начинаться с прецедентов, а не с диаграммы классов, которые должны быть производными от них.
К 1994-му существовало 72 метода, или частные методики. Многие из них "перекрывались", т. е. использовали похожие идеи, нотации и т. д. Как уже говорилось выше, чувствовалась острая потребность, "социальный заказ" - закончить "войну методов" и объединить в одном унифицированном средстве все лучшее, что было создано в области моделирования.
Сейчас мы имеем UML 2.0 и десятки CASE-средств, поддерживающих UML. Вопреки популярному мнению, в наши дни Rational не владеет UML, но продолжает работать над ним. UML же принадлежит OMG, а сама Rational ныне является одним из подразделений IBM и фигурирует во всех документах как IBM Rational. UML же получил множество пакетов расширений, называемых профайлами и позволяющих использовать его для моделирования систем из специфических предметных областей.