Представление свойства средства доступа С# в диаграмме классов UML?

Как представить свойство C# (аксессоры set и getter) на диаграмме классов UML?

Вы просто пишете это как обычные методы установки и получения?

Или есть другой способ представления?

Меня интересует, как средства доступа представлены в классе и интерфейсе на диаграмме классов UML.


person leeand00    schedule 25.03.2011    source источник
comment
Начинает казаться, что это не лучший ответ на этот вопрос, слишком объективный или что-то в этом роде.   -  person leeand00    schedule 25.03.2011


Ответы (3)


Некоторые разработчики/аналитики:

(1) показывать свойства как очень концептуальную вещь и показывать только одну строку для каждого свойства.

(2) Другие, более конкретные, отображают 3 строки, свойство, функцию «получатель», функцию «установщик».

(3) А иногда показывать только 2 для аксессуаров.

(4) Некоторые U.M.L. приложения для рисования. позволяет вам выбрать, какой из предыдущих вы хотите отобразить.

А также...

...Насколько я исследовал, все варианты верны. Помните, что стереотипы («‹‹кое-что››») могут помочь документировать класс.

(Примечание: я заменяю пробелы точками)

(1) Только простое свойство (С#, очень концептуально):

+================================================================+
|..........................MyClass...............................|
+----------------------------------------------------------------+
|..[+]..|..void....|..MyClass()...|..<<constructor>>.............|
|..[+]..|..void....|..~MyClass()..|..<<destructor>>..............|
+================================================================+
|..[+]..|..string..|..Text........|..<<property>>................|
+================================================================+

(2) Только «аксессуары» (С++, Java, стиль):

+================================================================+
|..........................MyClass...............................|
+----------------------------------------------------------------+
|..[+]..|..void....|..MyClass()...|..<<constructor>>.............|
|..[+]..|..void....|..~MyClass()..|..<<destructor>>..............|
+================================================================+
|..[#]..|..string..|..FText.......|..<<field>>...................|
+================================================================+
|..[+]..|..string..|..getText()...|..<<function>>,..<<getter>>...|
+----------------------------------------------------------------+
|..[+]..|..string..|..setText()...|..<<procedure>>,..<<setter>>..|
+================================================================+

(2) Все (очень программист, стиль Object Pascal/Delphi):

+================================================================+
|..........................MyClass...............................|
+----------------------------------------------------------------+
|..[+]..|..void....|..MyClass()...|..<<constructor>>.............|
|..[+]..|..void....|..~MyClass()..|..<<destructor>>..............|
+================================================================+
|..[#]..|..string..|..FText.......|..<<field>>...................|
+================================================================+
|..[+]..|..string..|..Text........|..<<property>>................|
+----------------------------------------------------------------+
|..[+]..|..string..|..getText()...|..<<function>>,..<<getter>>...|
+----------------------------------------------------------------+
|..[+]..|..string..|..setText()...|..<<procedure>>,..<<setter>>..|
+================================================================+

Вы доставляете аналитикам? Знают ли ваши программисты на C++/Java, что если на диаграмме показаны только свойства, они должны кодировать аксессоры, или ваша компания требует, чтобы они были явно объявлены на диаграммах?

Выберите тот, который больше соответствует вашим потребностям. (убрать точки).

person umlcat    schedule 25.03.2011
comment
Хороший ответ. Я думаю, это зависит от того, кто собирается читать документацию и чего они ожидают. Если вы не знаете, чего они ожидают, я думаю, мне придется пойти с (2), хотя это кажется немного подробным. - person leeand00; 25.03.2011

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

Извините, я понимаю, что это не совсем прямой ответ на ваш вопрос, но, тем не менее, это хорошая практика.

person Brian Driscoll    schedule 25.03.2011
comment
@Martinho: Теоретически ваше «что, если» не имеет отношения к моему ответу. Можно было бы по-прежнему писать методы getXXX и setXXX в UML. На практике, однако, я подозреваю, что многие системные архитекторы будут создавать общедоступные свойства для их представления. - person Brian Driscoll; 25.03.2011
comment
Разве методы доступа не преобразуются во что-то вроде: public string get_MyProp() { return foo; } public void set_myProp (значение строки) { foo = значение; }? - person MattC; 25.03.2011
comment
@MattC На каком языке. В .NET (C#, VB) версии 3.0 компилятор позволяет автоматически генерировать аксессоры, если не требуются дополнительные операции, что очень полезно. - person umlcat; 26.03.2011
comment
Мартиньо прав. У.М.Л. может использоваться для описания операций, которые не становятся программным приложением. - person umlcat; 26.03.2011

Он должен быть установлен как атрибут. Если у него есть только геттер, установите его только для чтения. Не существует специального UML для свойств C#.

person Aykut Çevik    schedule 25.03.2011
comment
Верно. Там нет конкретного U.M.L. для любого языка. Это дело каждого Софта. Дев. отдел как реализовать концептуальный U.M.L. диаграмма классов в конкретную программу. яз. Я не поклонник свойств только для чтения, как это позволяет С#, я предпочитаю использовать защищенное поле, общедоступную функцию readAttribute и изменять поле в другой части кода. - person umlcat; 26.03.2011