2. Язык UML. Руководство пользователя. Буч_ Рамбо_ Якобсон (2-е издание) (2006) (1185732), страница 37
Текст из файла (страница 37)
ЭкземплярыВ этой главе:Описаниевнутреннейструктуры,котораяпредпочтительнав работес прототипамиобъектови ролями,приводитсяв главе 15.Экземпляры и объектыМоделирование конкретных экземпляровМоделирование прообраза экземпляровРеальный и абстрактный мир экземпляровТермины «экземпляр» и «объект» в большинстве случаев являются синонимами и часто бывают взаимозаменяемыми.
Экземпляромназывается конкретное воплощение абстракции, к которому можетбыть применен определенный набор операций и которое обладаетсостоянием для сохранения результатов этой операции.Экземпляры используют для моделирования конкретных сущностей реального мира. Почти все строительные блоки UML вовлечены в дихотомию «класс/объект». Например, бывают варианты использования и экземпляры вариантов использования, узлыи экземпляры узлов, ассоциации и экземпляры ассоциаций и т.д.ВведениеПредположим, вы строите дом для своей семьи. Используя слово «дом», а не «автомобиль» или какоеFнибудь другое понятие, вызаранее сужаете словарь, применяемый при решении задачи.
Домявляется абстракцией «постоянного или временного жилища, целькоторого – предоставить убежище». Напротив, автомобиль – это«мобильное самодвижущееся устройство, предназначенное для перевозки людей с места на место». В ходе работы, состоящей в соединении различных, зачастую противоречивых требований, модельдома постепенно конкретизируется.
Например, вы можете выбрать«дом с тремя спальнями и подвалом» – словом, уточнить детали.Получив ключи от готового дома и войдя внутрь, вы погружаетесьв реальную обстановку – оцениваете здание не просто как дом с тремя спальнями, а как «мой дом с тремя спальнями, расположенный потакому то адресу». Если вы человек сентиментальный, то, возможно,дадите ему какоеFнибудь имя, например «Святой приют».Между «домом с тремя спальнями» и «моим домом с тремя спальнями, названным Святым приютом» существует фундаментальноеКлассыобсуждаютсяв главах 4и 9, компоненты –в главе 15,узлы –в главе 27,вариантыиспользования – в главе 17.Фактическивместо того,что мыв дальнейшем будемназыватьэкземпляром, в UMLиспользуется термин«спецификация экземпляра»,но этотонкостьметамодели.191различие.
В то время как первый – лишь абстракция, описывающаяопределенный тип дома с различными свойствами, второй представляетсобой конкретный экземпляр этой абстракции, воплощенный в материальной форме, и каждое его свойство имеет реальное значение.Абстракция описывает идеальную суть предмета, экземпляр – егоконкретное воплощение. Такое разделение на абстракцию и экземпляробнаруживается во всем, что вы моделируете. У одной абстракцииможет быть сколько угодно экземпляров. Для данного экземпляравсегда существует абстракция, определяющая характеристики, общие для всех подобных экземпляров.В языке UML можно представить как абстракции, так и ихэкземпляры. Почти все строительные блоки этого языка, в особенности классы, компоненты, узлы и варианты использования,могут быть промоделированы в терминах своей сущности или своих экземпляров.
По большей части вы будете работать с ними какс абстракциями, но если захотите промоделировать конкретныевоплощения, то придется иметь дело с экземплярами.Графическое представление экземпляров показано на рис. 13.1.Эта нотация позволяет визуализировать как именованные, так и анонимные экземпляры.Рис. 13.1.
ЭкземплярыБазовые понятияДихотомия«класс/объект»обсуждаетсяв главе 2.Экземпляром (instance) называется конкретное воплощение абстракции, к которому могут быть применены операции и которое обладает состоянием, сохраняющим их результаты. Понятия «экземпляр»и «объект» практически синонимичны. Экземпляр изображают с подчеркнутым именем.Ассоциацииобсуждаются в главах 5и 10, ссылки –в главах 14и 16.На заметку. Обычно конкретное воплощение класса называют объектом.
Объекты – это экземпляры классов; можносказать, что все объекты являются экземплярами, но не всеэкземпляры – объектами. Например, экземпляр ассоциациине является объектом: это просто экземпляр, также называемый ссылкой. Впрочем, лишь самые дотошные создателимоделей обращают внимание на такие нюансы.Экземпляры192Абстракции и экземплярыКлассификаЭкземпляры не существуют сами по себе: они почти всегда святоры обсуж- заны с абстракцией. На языке UML чаще всего моделируют экземдаютсяпляры классов (называемые объектами), хотя также бывают экземв главе 9.пляры и других сущностей, таких как компоненты, узлы, вариантыиспользования и ассоциации.
В UML экземпляр легко отличитьот абстракции – для этого надо просто подчеркнуть его имя.Объект в общем случае занимает некоторое место в реальномили концептуальном мире, и над ним можно производить те или иныеоперации. Например, экземпляром узла обычно является компьютер, физически расположенный в некоем помещении; экземпляромкомпонента – файл, размещенный в том или ином каталоге; экземпляр записи о клиенте занимает какойFто объем оперативной памятикомпьютера. Экземпляр траектории полета самолета тоже являетсобой нечто конкретное, поддающееся обработке математическимиметодами.АбстрактС помощью UML допустимо моделировать не только непосредстные классывенные физические экземпляры, но и менее конкретные сущнособсуждают- ти. Например, абстрактный класс по определению не может иметься в главе 9,непосредственных экземпляров. Разрешается, однако, моделироватьинтерфейкосвенные экземпляры абстрактных классов, чтобы показать, как дансы –ный класс можно использовать в качестве прототипа.
Строго говоря,в главе 11.такого объекта не существует, но с практической точки зрения он позволяет поименовать любой потенциальный экземпляр конкретногопотомка этого абстрактного класса. Тоже самое относится и к интерфейсам. Хотя они по определению не могут иметь непосредственныхэкземпляров, можно смоделировать экземплярFпрототип интерфейса, который будет представлять один из потенциальных экземпляров конкретных классов, реализующих данный интерфейс.ДиаграммыМоделируемые экземпляры помещают в диаграммы объектов,объектовесли надо показать их структурные детали, или в диаграммы взаиобсужмодействия и деятельности, если нужно визуализировать их учасдаютсятие в динамических ситуациях. Хотя обычно этого не требуется, ихв главе 14.можно включать и в диаграммы классов, если надо показать связьобъекта и его абстракции.Типы экземпляровУ каждого экземпляра есть свой тип.
Тип экземпляра долженбыть его конкретным классификатором, но спецификация экземпляра (которая не является конкретным экземпляром) может иметьабстрактный тип. В текстовой строке сначала указывается тип, а затем через двоеточие – имя экземпляра (например, t : Transaction).Базовые понятияДиаграммывзаимодействия обсуждаютсяв главе 19,диаграммыдеятельности –в главе 20;динамическая типизация рассматриваетсяв главе 11,классификаторы –в главе 9.193Обычно классификатор экземпляра статичен. Например, после создания экземпляра класса последний не изменится на протяжении всего времени существования объекта. Однако, несмотряна это, в некоторых ситуациях моделирования и в некоторых компьютерных языках возможна смена абстракции экземпляра.
К примеру, объект Caterpillar (Гусеница) может стать объектом Butterfly(Бабочка). По сути, это все тот же объект, но принадлежащий другой абстракции.На заметку. На протяжении разработки возможно использование экземпляра без определенного классификатора,который должен быть изображен как объект, но с пропускомимени абстракции (см. пример на рис. 13.2).
Использоватьподобные объекты можно для моделирования весьма абстрактного поведения, хотя в конечном счете придется связать такиеэкземпляры с абстракцией, чтобы присвоить им необходимуюсемантику.ИменаОперацииобсуждаются в главах4 и 9,компоненты –в главе 15,узлы – в главе 27.Каждый экземпляр может обладать именем, отличающим егов данном контексте от остальных экземпляров. Обычно объект существует в контексте операции, компонента или узла. Имя представляет собой текстовую строку, например t или myCustomer (мойПокупатель) на рис.
13.2. Само по себе оно называется простымименем. Абстракция экземпляра может иметь как простое имя, скажем Transaction (Транзакция), так и квалифицированное, напримерMultimedia::AudioStream (Мультимедиа::Аудиопоток). Составное имяобразуется путем добавления перед именем абстракции имени пакета, в котором она находится.Рис. 13.2. Именованные и анонимные экземплярыОбъект можно именовать явно (myCustomer и т.п.), делая его имяосмысленным для пользователя.
Можно дать ему простое имя (наподобие только что упомянутого) и скрыть его абстракцию, если онаочевидна из контекста. Однако зачастую настоящее имя объектаЭкземпляры194Ролии структурированныеклассыобсуждаютсяв главе 15.известно только компьютеру, который с ним работает. В таких случаях появляется анонимный объект (например, :AudioStream). Каждое появление анонимного объекта отлично от всех других его появлений. Если вы даже не знаете абстракцию объекта, то должныпо крайней мере дать ему явное имя.Имя и тип объекта записываются в одну строку, например t :Transaction. В случае с объектом, в отличие от роли в структурированном классе, вся строка подчеркнута.На заметку. Имя экземпляра может состоять из любых буквлатинского алфавита, цифр и некоторых знаков препинания(за исключением таких, как двоеточие, которое применяетсядля отделения имени экземпляра от имени его абстракции).Имя может занимать несколько строк (количество символовне ограничено).