1 <chapter id="uml-basics">
8 >Данный раздел предоставит вам небольшой обзор основ &UML;. Он не является учебником по &UML;, и если вы хотите узнать побольше об &UML; или в целом о планировании разработки программного обеспечения, обратитесь к одной из многих книг по данной теме. В Интернете есть много учебных пособий, можете начать с них. </para>
11 >Унифицированный язык моделирования (&UML;) является языком диаграмм или обозначений для спецификации, визуализации и документации модели объектно-ориентированных программных систем. &UML; не является методом разработки, то есть он не определяет последовательность действий при разработке программного обеспечения. Он помогает описать свою идею и взаимодействовать с другими разработчиками системы. &UML; управляется Object Management Group (OMG) и является промышленным стандартом, описывающим модели программного обеспечения. </para>
13 >&UML; создан для применения в разработке объектно-ориентированного программного обеспечения, и с некоторыми ограничениями может применяться для других парадигм программирования. </para>
15 >&UML; состоит из множества модельных элементов, которые представляют различные компоненты разрабатываемой системы. Элементы &UML; используются для создания диаграмм, которые описывают определённую часть системы или точку зрения на неё. &umbrello; поддерживает следующие типы диаграмм: </para>
22 ><link linkend="use-case-diagram"
23 >Диаграммы вариантов использования</link
25 > отображают действующих лиц (людей или пользователей системы), варианты использования (сценарии использования системы) и их взаимодействие.</para
31 ><link linkend="class-diagram"
32 >Диаграммы классов</link
34 > отображают классы и взаимодействие между ними.</para
40 ><link linkend="sequence-diagram"
41 >Диаграммы последовательностей</link
43 > отображают объекты и их взаимодействие, выделяя хронологию обмена сообщениями между объектами.</para
49 ><link linkend="collaboration-diagram"
50 >Диаграммы взаимодействия</link
52 > отображают объекты и их взаимодействие, выделяя объекты, которые участвуют в обмене сообщениями.</para>
58 ><link linkend="state-diagram"
59 >Диаграммы состояния</link
61 > отображают состояния, изменения состояний и события в объектах или компонентах системы.</para
67 ><link linkend="activity-diagram"
68 >Диаграммы активности</link
70 > отображают активность, состояния и изменения состояний объектов, а также события, возникающие в компонентах системы.</para
76 ><link linkend="component-diagram"
77 >Диаграммы компонентов</link
79 > показывают компоненты верхнего уровня (такие как KParts или Java Beans).</para
85 ><link linkend="deployment-diagram"
86 >Диаграммы выпуска</link
88 > показывают экземпляры компонентов и их взаимоотношения.</para
97 <sect1 id="uml-elements"
100 >Элементы &UML;</title>
101 <sect2 id="use-case-diagram">
103 >Диаграмма вариантов использования</title>
105 >Диаграммы вариантов использования описывают взаимоотношения и зависимости между группами <emphasis
106 >вариантов использования</emphasis
108 >действующих лиц</emphasis
109 >, участвующими в процессе.</para>
111 >Важно понимать, что диаграммы вариантов использования не предназначены для отображения проекта и не могут описывать внутреннее устройство системы. Диаграммы вариантов использования предназначены для упрощения взаимодействия с будущими пользователями системы, с клиентами, и особенно пригодятся для определения необходимых характеристик системы. Другими словами, диаграммы вариантов использования говорят о том, <emphasis
113 > система должна делать, не указывая <emphasis
115 > применяемые методы.</para>
119 >Пример диаграммы вариантов использования.</screeninfo>
122 <imagedata fileref="use-case-diagram.png" format="PNG"/>
126 >Диаграмма вариантов использования</phrase>
130 >Диаграмма вариантов использования </para>
135 <sect3 id="use-case">
137 >Вариант использования</title>
140 >Вариант использования</emphasis
141 > описывает, с точки зрения действующего лица, группу действий в системе, которые приводят к конкретному результату.</para>
143 >Варианты использования являются описаниями типичных взаимодействий между пользователями системы и самой системой. Они отображают внешний интерфейс системы и указывают форму того, что система должна сделать (именно что, а не как). </para>
145 >При работе с вариантами использования важно помнить несколько простых правил: <itemizedlist>
148 >Каждый вариант использования относится как минимум к одному действующему лицу</para
152 >Каждый вариант использования имеет инициатора</para
156 >Каждый вариант использования приводит к соответствующему результату (результату с <quote
157 >бизнес-значением</quote
163 >Варианты использования также могут взаимодействовать с другими вариантами использования. Три наиболее часто встречающихся типа взаимодействия между вариантами использования приведены ниже:</para>
168 ><<включение>></emphasis
169 > указывает, что вариант использования встраивается <emphasis
171 > другой вариант использования;</para
176 ><<добавление>></emphasis
177 > указывает, что в определённых ситуациях или в некоторой точке (называемой точкой расширения) вариант использования будет расширен другим;</para
182 ><<обобщение>></emphasis
183 > указывает, что вариант использования наследует характеристики <quote
184 >родительского</quote
185 > варианта использования и может переопределить некоторые из них или добавить новые, подобно наследованию в классах. </para>
191 >Действующее лицо</title>
193 >Действующее лицо является внешним источником (не элементом системы), который взаимодействует с системой через вариант использования. Действующие лица могут быть как реальными людьми (например, пользователями системы), так и другими компьютерными системами или внешними событиями. </para>
195 >Действующие лица представляют не <emphasis
196 >физических</emphasis
197 > людей или системы, а их <emphasis
199 >. Эти означает, что когда человек взаимодействует с системой различными способами (предполагая различные роли), он отображается несколькими действующими лицами. Например, человек, работающий в службе поддержки и принимающий от клиентов заказы, будет отображаться в системе как <quote
200 >участник отдела поддержки</quote
202 >участник отдела продаж</quote
205 <sect3 id="use-case-description">
207 >Описание варианта использования</title>
209 >Описания вариантов использования являются текстовыми пояснениями варианта использования. Они обычно принимают форму заметки или документа, который каким-то образом прикрепляется к варианту использования и описывает процесс или активность, который имеет место быть в варианте использования. </para>
212 > <!-- use-case-diagram -->
214 <sect2 id="class-diagram">
216 >Диаграмма класса</title>
218 >Диаграммы классов отображают различные классы, из которых состоит система, и их взаимодействие между собой. Диаграммы классов являются <quote
220 > диаграммами, потому что они отображают классы вместе с их методами и атрибутами, так же как и статические взаимодействия между ними: какие классы <quote
222 > о каких классах или какие классы <quote
223 >являются частью</quote
224 > других классов, но не отображают обмен сообщениями между классами. </para>
228 >Пример диаграммы класса</screeninfo>
231 <imagedata fileref="class-diagram.png" format="PNG"/>
235 >Диаграмма класса</phrase>
239 >Диаграмма класса </para>
248 >Класс определяет атрибуты и методы набора объектов. Все объекты класса (называемые экземплярами) имеют одинаковое поведение и одинаковый набор атрибутов (у каждого объекта - собственный набор атрибутов). Иногда вместо класса используется термин <quote
250 >, но важно понимать, что эти термины неодинаковы. Термин <quote
252 > имеет более общий смысл. </para>
254 >В &UML; классы представлены прямоугольниками с именем класса, которые могут отображать атрибуты и операции класса, помещённые внутри прямоугольника. </para>
258 >Класс в &UML;</screeninfo>
261 <imagedata fileref="class.png" format="PNG"/>
265 >Визуальное представление класса в &UML;</phrase>
269 >Визуальное представление класса в &UML; </para>
274 <sect4 id="attribute">
278 >В &UML; атрибуты отображаются как минимум их названием, но также могут показывать свой тип, начальное значение и другие свойства. Атрибуты также могут отображаться с указанием их области видимости: </para>
306 <sect4 id="operation">
310 >Методы (операции) также отображаются как минимум их названием, но также могут показывать свои параметры и возвращаемый тип. Подобно атрибутам, методы имеют область видимости: <itemizedlist>
339 <sect4 id="templates">
343 >Классы могут иметь шаблоны, значение которых используется для неуказанного класса или типа. Тип шаблона указывается при инициализации класса (то есть, при создании объекта). Шаблоны используются в современном C++ и будут введены в Java 1.5, где будут обозначаться как Generics. </para>
347 <sect3 id="class-associations">
349 >Ассоциации классов</title>
351 >Классы могут взаимодействовать друг с другом различными способами:</para>
352 <sect4 id="generalization">
356 >Наследование является основной концепцией объектно-ориентированного программирования, в которой класс <quote
358 > все атрибуты и методы наследуемого класса и может переопределять/модифицировать некоторые из них, имея возможность добавлять собственные атрибуты и методы.</para>
360 >В &UML; ассоциация <emphasis
362 > между двумя классами помещает их в иерархию, представляющую концепцию наследования производного класса от базового. В &UML; обобщения отображаются в виде линии, соединяющей два класса, со стрелочкой у базового класса. <screenshot>
364 >Обобщение</screeninfo>
367 <imagedata fileref="generalization.png" format="PNG"/>
371 >Визуальное представление обобщения в &UML;</phrase>
375 >Визуальное представление обобщения в &UML; </para>
382 <sect4 id="uml-associations">
386 >Ассоциации отображают взаимодействия между классами и определяют общую семантику и структуру многих типов <quote
388 > между объектами.</para>
390 >Ассоциации являются механизмом, который позволяет объектам взаимодействовать с друг другом. Они описывают связи между различными классами (связи между объектами называются соединениями объектов или <emphasis
394 >Ассоциации могут иметь роль, которая определяет назначение ассоциации и может быть одно- или двунаправленной, показывая, могут ли взаимодействующие объекты обмениваться сообщениями, или только один объект может отсылать сообщения. Каждый конец ассоциации имеет описание множественности, которое указывает, какое количество объектов на этой стороне ассоциации может взаимодействовать с одним объектом на другой стороне. </para>
396 >В &UML; ассоциации отображаются в виде линии, соединяющей взаимодействующие классы, и могут показывать роль и количество объектов с каждой стороны. Множественность отображается в виде диапазона [мин..макс] неотрицательных значений, звёздочка (<literal
398 >) в качестве максимального значения обозначает бесконечность. <screenshot>
400 >&UML;-ассоциации</screeninfo>
403 <imagedata fileref="association.png" format="PNG"/>
407 >Визуальное представление ассоциации в &UML;</phrase>
411 >Визуальное представление ассоциации в &UML; </para>
418 <sect4 id="aggregation">
422 >Объединения являются специальным типом ассоциаций, в котором два участвующих класса не равнозначны по статусу, но создают взаимодействие типа <quote
424 >. Объединение описывает, как класс, играющий роль целого, создаётся из других классов, играющих роль частей. Для объединений класс, выступающий в роли целого, всегда имеет множественность, равную единице. </para>
426 >В &UML; объединения отображаются в виде линии с ромбом на стороне целого, соединяющей взаимодействующие классы. <screenshot>
428 >Объединение</screeninfo>
431 <imagedata fileref="aggregation.png" format="PNG"/>
435 >Визуальное представление объединения в &UML;</phrase>
439 >Визуальное представление объединения в &UML; </para>
445 <sect4 id="composition">
449 >Композиция является ассоциацией, которая представляет <emphasis
450 >очень тесное</emphasis
451 > объединение. Это означает, что Композиция формирует взаимодействия типа <quote
453 >, но эти взаимодействия настолько сильные, что части не могут существовать сами по себе. Они существуют только внутри целого, и при уничтожении целого уничтожаются и части.</para>
455 >В &UML; композиции отображаются в виде линии с закрашенным ромбом на стороне целого, соединяющей взаимодействующие классы. </para>
459 >Композиция</screeninfo>
462 <imagedata fileref="composition.png" format="PNG"/>
466 >Визуальное представление композиции в &UML;</phrase>
473 > <!--class-associations-->
475 <sect3 id="other-class-diagram-items">
477 >Другие элементы диаграммы класса</title>
479 >Диаграммы классов могут содержать другие элементы внутри классов.</para>
480 <sect4 id="interfaces">
484 >Интерфейсы являются абстрактными классами, следовательно, объекты данных классов не могут быть созданы напрямую. Они могут содержать методы, но не атрибуты. Классы могут наследоваться от интерфейсов (через ассоциацию реализации), и полученные объекты затем могут использоваться при составлении диаграмм.</para>
485 <!-- FIXME screenshot -->
487 <sect4 id="datatype">
491 >Типы данных являются примитивами, которые обычно встроены в язык программирования. Яркими примерами могут служить целые и логические типы. Они могут не иметь отношения к классам, но классы могут использовать их.</para>
492 <!-- FIXME screenshot -->
496 >Перечисления</title>
498 >Перечисления представляют собой простой список значений. Примером перечисления является перечисление дней недели. Подобно типам данных, они могут использоваться в классах.</para>
499 <!-- FIXME screenshot -->
505 >Пакеты представляют собой пространства имён в языке программирования. В диаграмме они используются для представления частей системы, которые содержат более одного класса (число классов может превышать несколько сотен).</para>
506 <!-- FIXME screenshot -->
511 > <!-- class diagram -->
513 <sect2 id="sequence-diagram">
515 >Диаграммы последовательностей</title>
518 >Диаграммы последовательностей показывают обмен сообщениями (то есть вызовы методов) между различными объектами в специфической, ограниченной по времени, ситуации. Диаграммы последовательностей специально выделяют порядок и времена отсылки сообщений объектам.</para>
521 >В диаграммах последовательностей объекты представляются вертикальными прерывистыми линиями с именем объекта наверху. Временная ось также направлена сверху вниз. Таким образом, сообщения, посылаемые от одного объекта к другому, отображаются стрелками с указанием операции и параметров. </para>
523 <!-- FIXME update screenshot to show synchronous messages -->
526 >Диаграмма последовательности</screeninfo>
529 <imagedata fileref="sequence-diagram.png" format="PNG"/>
533 >Диаграмма последовательности</phrase>
537 >Диаграмма последовательности </para>
543 >Сообщения могут быть либо синхронными, когда управление передаётся вызываемому объекту вплоть до момента окончания его работы, либо асинхронными, когда управление сразу же возвращается вызывающему объекту. Синхронные сообщения обозначаются вертикальным прямоугольником на стороне вызываемого объекта для отображения передачи управления в программе.</para>
545 > <!-- sequence diagrams -->
547 <sect2 id="collaboration-diagram">
549 >Диаграммы взаимодействий</title>
552 >Диаграммы взаимодействий показывают взаимодействия между объектами, участвующими в конкретной ситуации. Это более или менее повторяет информацию, отображаемую диаграммами последовательностей, но там основной упор делается на то, как взаимодействия проявляются во времени, а здесь выделяются связи между объектами и их топологией.</para>
555 >На диаграммах взаимодействий сообщения, пересылаемые от одного объекта к другому, представляются в виде стрелок с указанием имени, параметров и последовательности сообщений. Диаграммы взаимодействий наиболее удачно подходят для отображения процесса работы программы или какой-либо ситуации, а также является лучшим типом диаграмм для демонстрации или объяснения какого-либо процесса в логике программы. </para>
559 >Взаимодействие</screeninfo>
562 <imagedata fileref="collaboration-diagram.png" format="PNG"/>
566 >Диаграмма взаимодействия</phrase>
570 >Диаграмма взаимодействия </para>
576 > <!-- collaboration diagrams -->
578 <sect2 id="state-diagram">
580 >Диаграмма состояния</title>
582 >Диаграммы состояний показывают различные состояния объекта в течение его времени жизни и причины, вызывающие их смену. </para
585 >Диаграммы состояний рассматривают объекты как <emphasis
586 >конечные автоматы</emphasis
587 >, которые могут быть в одном из нескольких конечных состояний. Конечные состояния могут изменяться с помощью конечного набора причин. Например, объект типа <emphasis
589 > может находиться в одном из следующих состояний: </para>
609 >а события, которые могут привести к смене объектом своего состояния, это:</para>
613 >Создание объекта</para
617 >Объект принял ожидаемое сообщение</para
621 >Клиент запросил соединение по сети</para
625 >Клиент прервал запрос</para
629 >Запрос выполнен</para
633 >Объект получил завершающее сообщение</para
643 >Диаграмма состояния</screeninfo>
646 <imagedata fileref="state-diagram.png" format="PNG"/>
650 >Диаграмма состояния</phrase>
654 >Диаграмма состояния </para>
663 >Состояния являются ключевыми элементами диаграмм состояний. Состояния принадлежат ровно одному классу и представляют собой совокупность значений, которые могут принимать атрибуты класса. В &UML; состояние описывает внутреннее состояние объекта одного определённого класса. </para
666 >Следует отметить, что не стоит отображать на диаграмме состояний все состояния, отображайте только важные состояния, которые значительно влияют на работу объекта.</para>
668 >Существуют два особых типа состояний: начало и конец. И вот почему: нет такого события, которое заставит объект возвратиться в состояние начало, если он из него вышел; нет такого события, которое заставит объект выйти из состояния конец, если он в него вошёл. </para>
672 > <!-- state diagrams -->
674 <sect2 id="activity-diagram">
676 >Диаграмма действий</title>
678 >Диаграммы действий описывают последовательность действий в системе с помощью действий. Диаграммы действий являются специальной формой диаграмм состояний, только в основном содержат действия. </para>
682 >Пример диаграммы действий</screeninfo>
685 <imagedata fileref="activity-diagram.png" format="PNG"/>
689 >Диаграмма действий</phrase>
693 >Диаграмма действий </para>
699 >Диаграммы действий подобны процедурным диаграммам потока, с той разницей, что все действия напрямую присоединены к объектам.</para>
702 >Диаграммы действий всегда ассоциируются с <emphasis
707 >вариантами действий</emphasis
711 >Диаграммы действий поддерживают как последовательные, так и параллельные действия. Параллельное выполнение представляется с помощью пиктограмм Fork/Wait. Для действий, выполняющихся параллельно, порядок, в котором они выполняются, не имеет значения (они могут выполняться одновременно или друг за другом).</para>
712 <sect3 id="activity">
716 >Действие представляет собой один шаг процесса. Одно действие представляет одно состояние системы с внутренним действием и, как минимум, с одним результатом действия. Действия могут иметь более одного результата, если они происходят при разных условиях. </para
719 >Действия могут формировать иерархию, это означает, что действие может быть составлено из нескольких <quote
721 > действий. В этом случае входящие и исходящие переходы должны соответствовать входящим и исходящим переходам на детализированной диаграмме. </para>
725 > <!-- activity diagram -->
727 <sect2 id="helper-elements">
729 >Вспомогательные элементы</title>
731 >Существует несколько вспомогательных элементов в &UML;, которые не имеют реального семантического значения для модели, но помогают внести ясность в диаграмму. Перечислим их: </para>
735 >Текстовые строки</para
739 >Текстовые заметки и якоря</para
748 >Текстовые строки удобно использовать для добавления краткой текстовой информации в диаграмму, это свободно прикрепляемый текст, который ничего не значит для модели. </para
752 >Текстовые заметки следует использовать для добавления более детальной информации об объекте или о специфической ситуации. Текстовые заметки могут быть прикреплены к элементам &UML;. </para>
755 >Контейнеры являются свободными прямоугольниками, которые могут быть использованы для группирования элементов диаграмм. Они не несут никакой смысловой нагрузки для модели.</para>
757 <!-- FIXME, screenshot -->
759 > <!-- helper elements -->
761 <sect2 id="component-diagram">
763 >Диаграммы компонентов</title>
765 >Диаграммы компонентов отображают компоненты программного обеспечения (компонентные технологии, такие как KParts, CORBA или Java Beans или просто разделы системы, ясно отличающиеся друг от друга) и сущности, из которых они возникли, например, файлы с исходным кодом, библиотеки или таблицы баз данных.</para>
768 >Компоненты обладают интерфейсами (то есть абстрактными классами с методами), которые позволяют создавать ассоциации между компонентами.</para>
771 <sect2 id="deployment-diagram">
773 >Диаграммы выпуска</title>
776 >Диаграммы выпуска отображают объекты, созданные во время выполнения программы, и их ассоциации. Они включают в себя узлы, которые являются физическими ресурсами, обычно одиночными компьютерами. Они также отображают интерфейсы и объекты.</para>