Источник: Савич У. С++ во всей полноте. - Киев: Издательская группа BHV; СПб.: Питер, 2005г., 755-757 с.
20.2. Язык моделирования UML
Одно изображение стоит тысячи слов.
Китайская пословица
Поскольку люди мыслят не на С++ или каком-либо другом языке программирования, ученые-кибернетики всегда стремились к поиску более естественных средств представления программ, чем код на машинном или даже высокоуровневом языке программирования. Одним из широко распространенных средств такого рода является псевдокод - смешение определенного языка программирования с естественным языком, таким как русский. Когда нужно обдумать и сформулировать решение задачи, не углубляясь в синтаксические детали языка программирования, можно пренебречь в некоторой степени синтаксическими правилами и записать решение в виде псевдокода.
Хотя псевдокод стал уже стандартным инструментом программистов, он дает всего лишь линейное и алгебраическое представление программы, тогда как специалисты в области проектирования программного обеспечения стремятся найти для представления будущих программ графическое выражение. В результате их исследований было предложено множество систем графического представления структуры программ, и они оказались востребованными.
Данная область быстро развивается, и такие термины, как «блок-схема» и «структурная диаграмма», сегодня понятны лишь старшему поколению. Современным кандидатом на роль общепринятого формализированного средства графического выражения является язык Unified Modeling Language (UML, унифицированный язык моделирования). Он разработан как воплощение объектно-ориентированной парадигмы в области проектирования и предназначен для применения в объектно-ориентированном программировании. Пока рано судить, пройдет ли он проверку временем, но есть все основания на это надеяться. Уже многие компании внедрили его в свои средства разработки программного обеспечения.
История UML
Язык UML является порождением современных технологий объектно-ориентированного программирования. Когда эти технологии получили широкое распространение, различные исследовательские группы стали создавать собственные графические и иные представления структуры объектных программ. В 1996 году Гради Буч, Айвор Якобсон и Джеймс Рамбо выпустили первую версию языка UML. В нем соединились разные методы графического представления, известные на то время, и в результате получился универсальный язык, предназначенный для проектирования и документирования объектно-ориентированного программного обеспечения. С тех пор он был усовершенствован и претерпел ряд изменений, отразивших потребности и пожелания программистов и конструкторов программ. В настоящее время UML стандартизирован, и этот стандарт сертифицирован и поддерживается некоммерческой организацией Object Management Group (OMG, Рабочая группа по развитию стандартов объектного программирования), занимающейся продвижением объектно-ориентированных технологий.
Диаграммы классов UML
Класс является важнейшим элементом программы, разработанной согласно принципам объектно-ориентированного программирования, а диаграмма класса - простейшее из графических представлений, используемых в UML. На рис. 20.2 показана диаграмма класса, представляющего квадрат. Она состоит из прямоугольника, разделенного на три части. В верхней части записывается имя класса, в рассматриваемом случае Square. Ниже расположена спецификация данных класса. В нашем примере имеется два элемента данных (две переменные-члены): значение типа double, определяющее длину стороны, и значение topRtCorner, определяющее местоположение правого верхнего угла квадрата. Последнее представляет собой пару чисел типа doublе, определяющих координаты точки. Все переменные-члены класса являются закрытьiми, на что указывает знак минус перед именем каждой из них. В третьей части диаграммы класса представлены действия (функции-члены класса). Знаком плюс обозначены открытые члены, а знаком решетки (#) защищенные. Таким образом, диаграмма класса Square отображает две открытые функции-члены и одна защищенная.
Диаграмма класса не обязательно должна содержать его полное описание. Если для выполняемого анализа важны лишь некоторые члены класса, в диаграмму включают только их. На отсутствие части членов указывает многоточие.
Square |
|
-side: double |
|
-tорRtСогnег: Pair<double ,double> |
|
+resize(double): void +move(Pair<double,double>point): void #erase (): vоid |
|
... |
|
Рис. 20.2. Диаграмма класса UML
Взаимодействие классов
Сами по себе диаграммы класса не имеют особой ценности, поскольку они лишь повторяют интерфейс класса, возможно, без некоторых деталей. Для того чтобы понять структуру программы, нужно указать, как в ней объекты разных классов взаимодействуют между собой. UML предоставляет для этого разные средства. В частности, различного вида аннотированные стрелки отражают информационные потоки от одного объекта к другому (см. рис. 20.1). Кроме того, в UML определены обозначения для группировки классов в собрания библиотечного типа для наследования и других видов отношений между классами.
Особенно важно, что UML является расширяемым языком: если в нем не окажется подходящих средств для представления той или иной сущности или отношения, их можно добавить самостоятельно. Разумеется, это делается по определенным правилам, для того чтобы конструкторы программного обеспечения могли понимать схемы друг друга.