Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 семестр ЗО / Лаб.работы / ЛабРаб № 11!.doc
Скачиваний:
38
Добавлен:
06.02.2016
Размер:
350.72 Кб
Скачать

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

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

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

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

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

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

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

Локальная видимость

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

  • Создается новый локальный экземпляр и присваивается в качестве значе­ния локальной переменной.

  • Локальной переменной присваивается объект, возвращаемый другим методом.

Как и в случае с обеспечением видимости посредством параметров, зачастую локальная видимость преобразуется в видимость посредством атрибутов.

В качестве примера второго варианта можно рассматривать метод enterItem класса Register (рис. 1.5).

Существует вариант второго способа, когда переменная явно не объявляется в методе, но неявно существует как возвращаемое значение метода. Например,

Рисунок 1.5 – Локальная видимость

Глобальная видимость

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

Один из способов достижения глобальной видимости состоит в присваива­нии экземпляра объекта глобальной переменной. Однако такой подход возможен не во всех языках (например, возможен в C++, но не в Java). Более предпочтительный способ состоит в использовании шаблона Singleton.

В языке UML существуют обозначения для иллюстрации различных типов ви­димости на диаграммах кооперации (рис. 1.6). Однако они являются необяза­тельными и зачастую не используются. Их применяют только в том случае, ко­гда требуется уточнить способ обеспечения видимости.

Рисунок 1.6 – Реализация различных способов обеспече­ния видимости

Соседние файлы в папке Лаб.работы