Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабРаб № 6!.doc
Скачиваний:
5
Добавлен:
18.08.2019
Размер:
601.6 Кб
Скачать

Вопрос 2. Модель проектирования: области видимости

Диаграммы взаимодействия для системных событий (enterItem и т.д.) иллюст­рируют процесс передачи сообщений между объектами. Но чтобы некоторый объект-отправитель мог отослать сообщение объекту-получателю, получатель должен быть виден отправителю, т.е. отправитель должен содержать некую ссылку или указатель на объект-получатель.

Например, для отправки сообщения getSpecification от объекта Register к объекту ProductCatalog необходимо обеспечить видимость экземп­ляра объекта ProductCatalog для экземпляра объекта Register (рис. 2.1). Для создания диаграммы взаимодействия, на которой сообщение передается от экземпляра объекта Register к экземпляру ProductCataloq, не­обходимо, чтобы объект ProductCatalog был виден объекту Register. Типич­ным решением такой проблемы является использование ссылки на экземпляр ProductCatalog в качестве атрибута объекта Register.

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

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

Рисунок 2.1 – Необходимость обеспечения видимости объекта ProductCatalog

для объекта Register1

В обычном понимании область видимости (visibility) обеспечивает способность одного объекта видеть другой объект или ссылаться на него. В более общем смысле это понятие связано с понятием контекста (или области действия): попа­дает ли один ресурс (например, экземпляр объекта) в контекст другого?

Сущест­вует четыре основных способа обеспечения видимости объекта В объектом А:

  1. Посредством атрибутов. Объект В является атрибутом объекта А.

  2. Посредством параметров. Объект В является параметром метода объекта А.

  3. Локальная видимость. Объект В объявлен как локальная переменная в методе объекта А.

  4. Глобальная видимость. Объект В каким-то образом виден глобально.

Обеспечение видимости посредством атрибутов

Видимость посредством атрибутов (attribute visibility) между объектами А и В существует в том случае, когда В является атрибутом А. Такой тип види­мости можно назвать постоянным, поскольку видимость между объектами под­держивается до тех пор, пока существуют сами объекты. В объектно-ориентированных системах это очень популярная форма обеспечения видимости.

В качестве примера рассмотрим определение класса Register на языке Java, в котором обеспечивается видимость объекта ProductCataiog посредством атрибутов (переменных-членов Java).

Такая видимость между объектами необходима, поскольку на диаграмме взаимодействия для события enterItem, представленной на рис. 2.2, объект Register отправляет сообщение getSpecification объекту ProductCatalog.

Обеспечение видимости посредством параметров

Видимость между объектами А и В посредством параметров (parameter visibility) существует в том случае, если объект В передается в качестве пара­метра метода объекту А. Это "временная" видимость, поскольку она существует только в контексте данного метода. После видимости, обеспечиваемой с помо­щью атрибутов, это второй по распространенности тип обеспечения видимости в объектно-ориентированных системах.

Рисунок 2.2 – Видимость, обеспеченная с помощью атрибутов

В качестве примера можно привести процесс передачи сообщения makeLineItem экземпляру объекта Sale, когда экземпляр объекта productSpecification передается в качестве параметра. В контексте метода makeLineItem между объектами Sale и ProductSpecification существует ви­димость, обеспечиваемая с помощью параметров (рис. 2.3).

Рисунок 2.3 – Видимость, обеспечиваемая с помощью параметров

Зачастую видимость, обеспечиваемую посредством параметров, преобразуют в видимость, обеспечиваемую посредством атрибутов. Например, при создании нового экземпляра SalesLineItem объектом Sale методу инициализации (в языках C++ и Java это конструктор (constructor)) в качестве параметра переда­ется экземпляр ProductSpecification. В методе инициализации значение это­го параметра присваивается атрибуту и видимость устанавливается посредством атрибутов (рис. 2.4).

Рисунок 2.4 – Преобразование видимости посредством парамет­ров в видимость

посредством атрибутов