Назад

 

Источник: Савич У. С++ во всей полноте. - Киев: Издательская группа 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 является расширяемым языком: если в нем не окажет­ся подходящих средств для представления той или иной сущности или отноше­ния, их можно добавить самостоятельно. Разумеется, это делается по определен­ным правилам, для того чтобы конструкторы программного обеспечения могли понимать схемы друг друга.