Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.

discriminator (дискриминатор)

Псевдоатрибут, который служит для выбора одного элемента-прямого потомка из множества других при обобщении. Все элементы-прямые потомки представляют собой определенное качество, конкретизирующее элемент предок, в отличие от прочих возможных конкретизаций. Дискриминатор же указывает направление конкретизации элемента.
См. generalization, powertype, pseudoattribute.

Семантика

Иногда элемент модели можно конкретизировать на основании его различных качеств. Каждое из этих качеств представляет собой ортогональный аспект конкретизации. Например, транспортное средство
можно описать с точки зрения двигательной силы (бензиновый мотор, ракетный двигатель, ветер, животное, человек), а также с точки зрения места передвижения (земля, вода, воздух, космос). Дискриминатором является имя аспекта конкретизации. Один элемент можно конкретизировать по нескольким аспектам, причем все они должны присутствовать в данном экземпляре.
У отношения обобщения может быть дискриминатор - строка, в которой указывается аспект классификации для элементов-потомков. Все отношения конкретизации, которые идут от одного и того же прямого предка с одинаковым именем дискриминатора, образуют группу. Каждая такая группа представляет собой один аспект конкретизации. Полное множество имен дискриминаторов покрывает собой все возможные аспекты конкретизации элемента-прямого предка. Экземпляр должен быть одновременно экземпляром одного элемента-прямого потомка из каждой группы. Например, транспортное средство должно одновременно характеризоваться двигательной силой и местом передвижения.
Каждый из них представляет собой всего лишь часть описания своего прямого предка, которая охватывает только одни аспект, а все остальные игнорирует. Так, подкласс, который описывает двигательную силу, ничего не сообщает о месте передвижения. Для создания конкретного элемента требуется одновременная конкретизация всех аспектов элемента-прямого предка. Это можно сделать при помощи множественного наследования конкретного элемента модели от элементов-прямых потомков из каждой группы конкретизации либо при помощи множественной классификации экземпляра как элемента-прямого потомка из каждой группы. Пока не будут скомбинированы все конкретизирующие, описание элемента считается абстрактным.
Например, реальное транспортное средство должно иметь как двигательную силу, так и место передвижения. Транспортное средство, которое приводится в движение ветром и движется по воде, является парусной лодкой. Для транспортного средства, которое приводятся в движение животным, а передвигается по воздуху, реального воплощения не придумали, однако в мифах и сказках такая фантастическая комбинация встречается нередко.
Отсутствие пометки дискриминатора обозначает, что он "пустой". Такой дискриминатор, впрочем, также считается действительным (дискриминатором "по умолчанию"). Этот подход позволяет рассматривать случай, когда дискриминатор не указан явно, наравне с остальными случаями, где он явно указан. В действительности, если ни один из маршрутов обобщения не имеет дискриминаторов, то считается, что все элементы-прямые потомки принадлежат одному дискриминатору. Иначе говоря, существует один дискриминатор, которому принадлежат все конкретизации; причем в данном случае эта семантика будет являться семантикой отсутствующего дискриминатора.

Структура

Каждая дуга конкретизации (обобщения) имеет строку-дискриминатор, которая может быть и пустой.
Дискриминатор - это псевдоатрибут класса-прямого потомка. Среди прочих атрибутов и ролей в ассоциации этого элемента он уникален. Область применения этого псевдоатрибута представляет собой множество классов-прямых потомков. Одна и то же имя дискриминатора может встречаться у различных классов - прямых потомков. Это означает, что они принадлежат к одному аспекту конкретизации.

Нотация

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

Пример


Рис. 94.
На рис. 94 изображена конкретизация элемента Employee (Служащий) по двум аспектам: status (статус) и locality (местонахождение). Каждый аспект обладает рядом значений, которые представляют собой подклассы. Для того чтобы создать подкласс, у которого могут 'oбыть экземпляры, понадобятся оба эти аспекта. Например, Liaison (Куратор) - это класс, который является одновременно и Supervisor (Инспектор), и Expatriate (Не местный),
Любой из потомков одного аспекта будет абстрактным до тех пор, пока оба аспекта не будут скомбинированы в потомке с использованием множественного наследования.

Алфавитный указатель