Предшественники UML

Универсальный язык моделирования

 

Универсальный язык моделирования (UML), разработка которого началась с середины 90‑х годов прошлого века на базе нескольких объектно‑ориентированных методов и нотаций описания информационных систем, в настоящее время является общепринятым стандартом документирования процесса создания информационных систем и программного обеспечения. В качестве стандарта UML принят консорциумом OMG, в который входят все ведущие производители программного обеспечения.

Наиболее весомый вклад в разработку языка внесли известные специалисты Грэди Буч (Grady Booch), Джим Румбах (Jim Rumbaugh) и Ивар Якобсон (Ivar Jacobson); за счет объединения методик каждого из них собственно и возник язык UML.

Язык UML постоянно совершенствуется. В настоящее время текущей спецификацией языка является версия 2.0. Кроме того, сам язык предоставляет пользователю возможности расширения ядра языка для нужд конкретного производителя, хотя это и не рекомендуется делать по причине достаточности возможностей языка.

Первоначально язык UML создавался, чтобы упростить описание информационных систем на базе объектно‑ориентированной технологии. Сейчас средствами языка можно описывать также программное обеспечение, оперирующее в основном потоками данных и методами их обработки (процедурное, алгоритмическое проектирование).

 

 

Причиной, побудившей к созданию универсального языка описания программного обеспечения, явилась постоянно возрастающая сложность проектируемых информационных систем, которая в свою очередь диктуется усложнением решаемых задач.

Когда количество объектов информационной системы не превышает 6–8 (то есть психологического критерия, до которого человек еще способен оперировать информацией без записи и дополнительной тренировки), сложности, возникающие при проектировании системы, преодолимы и без специальных средств. Такую информационную систему (для одного рабочего места, для небольшой компании) способен создать один человек. Когда же число объектов достигает тысяч и десятков тысяч, а число состояний и переходов между ними – миллионов, ни один специалист, каким бы образованным и опытным он ни был, не способен охватить систему в целом. К примеру, система навигации должна размещаться на тысячах автомобилей, морских и речных судах, железнодорожных составах, десятках искусственных спутников Земли, использовать тысячи компьютеров и всевозможных сетей связи.

Такие информационные системы под силу создавать только группам разработчиков, как правило, с разделением обязанностей на аналитиков, проектировщиков, программистов, тестеров и, конечно, руководителей. А там, где трудится коллектив, просто необходим понятный всем инструмент общения. Для инженеров‑механиков таким инструментом, понятным как его коллегам, так и простым рабочим, являются машиностроительные чертежи, для строителей – всевозможные эскизы, планы и т. д., для инженеров‑электронщиков – электрические схемы, топологические чертежи. Для программистов языком такого общения долгое время являлись алгоритмы и естественный человеческий язык. Каждый, кто хоть немного разбирается в программировании, понимает, что за исключением очень простых примеров без пояснений практически невозможно разобраться в коде программ, написанных не им самим, а часто и им самим, но давно.

Диаграммы на языке UML можно назвать «иллюстрациями к программному коду».

Создание диаграмм аналогично созданию проекта в строительстве – можно обойтись и без него, например, при строительстве сарая на дачном участке, однако чем больше здание, тем труднее это делать и тем неопределеннее конечный результат. Информационная система, описанная UML‑диаграммами, показывает разработчику результат, который необходимо достичь в процессе проектирования.

Проблема коммуникации внутри коллектива разработчиков, требующая документирования результатов проектирования, чтобы иметь возможность в дальнейшем вносить в систему усовершенствования, является не единственной побудительной причиной создания UML.

Абсолютное большинство информационных систем, используемых в наши дни, в той или иной степени опираются на объектно‑ориентированную технологию. Ключевой в эффективности таких информационных систем является удачно построенная иерархия объектов, позволяющая использовать преимущества объектно‑ориентированной технологии, включая инкапсуляцию, наследование и полиморфизм (подробнее об объектно‑ориентированной разработке информационных систем см. далее в этой книге).

Выявление объектов‑сущностей, их свойств, построение их иерархии является в большинстве случаев нетривиальной задачей, которая решается методами объектно‑ориентированного анализа.

Иерархия объектов должна отражать закономерности функционирования предметной области, то есть области деятельности человека, для которой создается информационная система. Прямолинейное проектирование, как правило, не является оптимальным. Из практики известно, что самыми удачными решениями являются системы, авторам которых удалось найти «изящную» комбинацию, неординарный ход, «изюминку» в построении иерархии объектов информационной системы.

Построение иерархии объектов требует опыта и усердной работы аналитиков и системных проектировщиков, для облегчения интеллектуального труда которых весьма кстати пришлись возможности нотации (лат. notatio – обозначение, система записи), позволяющей легко и понятно фиксировать возникающие идеи. Этой цели служат всевозможные кружочки, квадратики, стрелки и линии, с помощью которых человек пытается зафиксировать свои мысли на листе бумаги или в электронном документе. С появлением соответствующих методик, а впоследствии и UML, такая запись становится стандартизированной и понятной другим людям.

 

Примечание.

Проблемой, ставящей под угрозу осуществление крупного проекта, является уход из команды разработчиков одного или нескольких ведущих специалистов. Использование стандарта документирования процесса разработки минимизирует риски срыва работы над проектом в таких случаях.

 

Универсальный язык моделирования возник не на пустом месте. С середины восьмидесятых годов ведутся разработки методик, позволяющих автоматизировать процесс построения иерархий объектов. Некоторые из методик, например, CRC‑карточки, не потеряли своей актуальности.

Словарь предметной области.

В словарь предметной области включаются термины, используемые специалистами, для которых разрабатывается система. Словарь создается с целью наиболее полного понимания поставленных задач проектировщиками, которые, как правило, специалистами в этой области не являются.

Словарь представляет собой список терминов с их краткой расшифровкой. По мере работы над системой словарь предметной области может дополняться. Составлением словаря занимаются те из проектировщиков и аналитиков, кто имеет непосредственный контакт с конечными пользователями.

Использование в работе такого словаря весьма полезно и эффективно при решении практически любых задач.

Диаграммы сущность‑связь.

Построение диаграмм сущность‑связь основано на выявлении форм взаимосвязи и взаимодействия сущностей. Подробнее эти диаграммы описаны в главе 6 на примере проектирования структуры базы данных.

Метод Аббота.

Метод Аббота заключается в описании задачи на простом человеческом языке и анализе полученного текста. Существительные в этом случае принимаются как вероятные кандидаты на роль объектов‑сущностей, а глаголы – на методы этих сущностей.

Метод Аббота поддается автоматизации, в частности, соответствующие системы были построены Токийским технологическим институтом и фирмой Фуджи.

CRC‑карточки.

Аббревиатура CRC означает Class‑Responsibilities‑Collaborators (класс‑ответственность‑участники). CRC‑карточки впервые предложили Кент Бек (Kent Beck) и Уорд Каннингхэм (Ward Cunningham) для обучения объектно‑ориентированному программированию.

CRC‑карточки представляют собой обычные картонные карточки размером 10 на 15 сантиметров, на которых карандашом сверху пишется название класса, слева – за что он отвечает, справа – с какими классами он взаимодействует (сотрудничает, обменивается сообщениями).

В ходе анализа появляются новые карточки, в старые вносятся изменения. Может возникнуть ситуация, когда один из классов (объектов) окажется слишком большим, и на стадии реализации системы это приведет к необходимости его постоянного использования. В этом случае целесообразно разбить его на несколько классов или передать часть его функций другому классу.

 

Примечание.

Возможна ситуация, когда одни и те же сообщения будут передаваться между разными классами. Можно выделить такие сообщения в отдельный класс для удобства отладки и внесения изменений. Так поступают, например, при обращениях к базе данных с помощью SQL‑запросов, выделяя транзакции в отдельный класс.

 

Карточки раскладываются в разном порядке, что помогает определить возможные варианты наследования свойств и методов, движения потоков данных.

Метод Буча.

Метод Буча стал основой UML. Предложенная Бучем графическая нотация достаточно распространена и наряду с UML используется в системах автоматизации процесса разработки программного обеспечения, в частности, в системе Rational Rose.

Применяемые в методе Буча обозначения несколько отличаются от обозначений, принятых в UML. Так, класс в нотации UML представляет собой прямоугольник, в нотации Буча – облако, каким его рисуют дети, что по замыслу автора символизирует абстрактность этого понятия. Кроме того, язык UML более формализован за счет метамодели языка.

 

Примечание.

Мы привели далеко не полный перечень методов, использовавшихся для описания и моделирования информационных систем. Именно их большое количество послужило побудительной причиной создания унифицированного метода.