2016-10-12 4 views
1

Мой профессор дал нам эту программу, но не объяснил нам UML, и мне интересно, правильно ли я сделал эту диаграмму.Является ли моя UML-диаграмма правильной для прилагаемого кода?

КОД:

package p1; 
public class MyProg { 
    static int i = 5; 
    private Integer j = new Integer(10); 
    protected double k = 2.5; 
    public MyProg() {} 

    public static void main(String[] args) { 
     MyProg mp = new MyProg(); 
    } 

    void m1(){ 
     System.out.println("Hello World!"); 
    } 

    void m1(String str, int n){ 
     for(int k = 0; k < n; k++) 
      System.out.println(str); 
    } 

    public static int getI(){ 
     return MyProg.i; 
    } 

    protected Integer getJ(){ 
     return new Integer(j); 
    } 

    double getK(){ 
     return new Double(k); 
    } 
} 

enter image description here

+0

В моей oponion: 1. – Minh

+0

В моей oponion: 1. Вы не должны добавить имя параметра в диаграмме класса. (Аргументы вашего основного и m1's str и n) 2. Тип вашего основного метода параметров неверен (это String [], а не String) 3. Входящий или выключенный параметр здесь трудно сказать, поскольку он должен исходить из проектного представления, а не из код. – Minh

+0

Вы также можете указать начальные значения в UML: i: int = 5 –

ответ

1

Я никогда не был много для слишком навязчивым о деталях UML сам (я определенно видел конструктивные встречи, опущенных в обсуждение тонкостей UML, а не о самом дизайне), но несколько мелких баллов:

  • Обычно вы не хотите включать частные переменные, методы и т. Д. На класс dia потому что это деталь реализации (а не детализация). Редактировать: Этот вопрос, вероятно, в некоторой степени зависит от цели вашей диаграммы - некоторые люди утверждают, что приемлемо включать их в определенных обстоятельствах (например, если ваша основная цель - сообщить вашу реализацию, а не ваш дизайн).
  • Некоторые из этих методов (например, double getK()) не содержат модификаторов доступа. Хотя технически синтаксически законно полагаться на дефолты, всегда лучше говорить о своих намерениях.
+0

По умолчанию видимость в Java - это «пакет», но видимость по умолчанию в UML является «общедоступной» (UML spec 7.8.12.5). Чтобы указать видимость пакета в UML, используйте тильду (~). –

+1

Если вы показываете приватную собственность или нет, зависит от того, на каком уровне создана диаграмма. Насколько я понимаю, задача состоит в том, чтобы моделировать (документировать) фактический код, и в этом случае использование частных свойств абсолютно нормально. Кроме того, вы можете показать, что некоторая информация хранится, но не отображается, или какое-либо поведение существует внутри системы даже на уровне моделирования, а затем вы также моделируете такие свойства, как частные. – Ister

+0

@ www.admiraalit.nl Кажется, что спецификации отображают видимость «+», «-», «#» и «~» в 9.5.4, но не определяют где-либо, что есть: o) До сих пор Я нигде не видел тильду. Кажется, что EA использует тире, как для частного. –

2

На диаграмме:

  • Как уже упоминался я и J не является строкой
  • в главном параметре операции ARGS является своим родом массива, так что вы упускаете индикатор кратности (звездочку в квадратных скобках перед закрытием круглого кронштейна). Поэтому строка должна выглядеть как + main(in args: String[*]). Конечно, подчеркнул
  • в m1 операции п должны иметь неопределенного типа
  • начальные значения должны быть определены, как уже упоминалось в комментариях
  • вы можете использовать стандартный стереотип <> при работе MyProg, чтобы пометить его как конструктор. В некоторых книгах предлагается не моделировать конструктор, если он не является стандартным (т. Е. Требует некоторых параметров)
  • Я был бы очень осторожен в отношении индикатора vout inout для параметров. В Java объекты передаются по ссылке по умолчанию, что означает, что параметр находится вне, а не внутри. В C++ это противоположная ситуация, параметр передается через значение, то есть он находится в.
+1

Вторая пуля не совсем правильная. Тип массива строк для параметра args может быть указан в UML следующим образом: + main (в args: String [*]) –

+0

@ www.admiraalit.nl вы правы. Спасибо за упоминание. Я исправил ответ соответственно и добавил пример, чтобы дать понять. – Ister

+0

Спасибо вам большое за вашу помощь! – kbb5268

0

Было бы неплохо вставить все ответы в одном одном ...

  • в программе вы используете Integer, String, Double (как классы, я думаю), а иногда и смешивать int в то время как в диаграмме классов вы используете все строчные (будучи примитивов) и всегда integer. Это должно быть выровнено.
Смежные вопросы