атрибут, имеющий несколько типов в диаграмме классов - PullRequest
0 голосов
/ 04 октября 2018

В диаграмме классов UML можно представить атрибут, который может иметь несколько типов?Например, MyClass имеет атрибут с именем MyAttribute.Как я могу указать в диаграмме класса, что MyAttribute может принимать значение типа float или string?Альтернативный вариант - написать MyAttribute: (https://docs.microsoft.com/en-us/visualstudio/modeling/uml-class-diagrams-guidelines?view=vs-2015),, то есть не указав тип, но не указав тип, может создать проблемы, если люди начнут использовать свои собственные типы .

* 1007.* Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Когда вы имеете дело с нетипизированными языками (например, Python), ни один из ваших атрибутов не имеет определенного типа.На любом типизированном языке вы решаете во время компиляции, какой тип может принимать атрибут.Я не знаю ни одного языка, который позволял бы назначать набор типов любому атрибуту.

Предполагая, что вы говорите о нетипизированных языках, вы бы добавили ограничение к своим обычно нетипизированным атрибутам, сообщая что-то вроде { must take either type A or B }.Конечно, компилятор / интерпретатор не поможет вам проверить эти ограничения.

0 голосов
/ 05 октября 2018

Один из способов сделать это - смоделировать объединение двух разных типов данных.Вы должны определить тип данных с двумя специализациями, создать обобщающий набор {complete, disjoint}, сделать общий тип данных абстрактным и использовать общий тип данных в качестве типа атрибута.

Возможно, у вас естьпроблема в том, чтобы убедить генератор кода правильно отобразить это на язык программирования, такой как C ++ или XSD, который может оба представлять эту конструкцию, но UML будет совершенно понятен любому читателю.

0 голосов
/ 04 октября 2018

Атрибут или свойство UML может иметь только один тип.

Поэтому, если вы хотите, например, разрешить значения как String, так и Float, вы должны ввести свой атрибут с интерфейсом, общим для них обоих, напримерОбъект например.Но, конечно, он будет менее точным, потому что вы допускаете другие виды значений ....

...