Форум Сообщества Аналитиков

Общий раздел => Примеры => Задачи студентов => Тема начата: serp от 20 Марта 2010, 23:57:27

Название: Помогите чайнику нарисовать UML диаграмму
Отправлено: serp от 20 Марта 2010, 23:57:27
Ситуация такая.
Есть некий код, который вызывает некую функцию асинхронно (передав при этом ей некоторое количество параметров), т.е. запускает ее в отдельном потоке. Когда эта функция закончит свое выполнение, то в основном потоке будет вызвана CallBack функция, в которую будет передан результат выполнения асинхронно вызванной функции.
(Асинхронное выполнения делегата C#)
Как это изобразить на UML. Все функции относятся к одному классу, поэтому State diagram и Sequence diagram отпадают. Думается что это должна быть Activity Diagram. Но непонятно как показать асинхронный запуск функции и запуск CallBack функции.
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Денис Иванов от 21 Марта 2010, 23:42:07
Это можно нарисовать и через диаграмму последовательности, и через диаграмму автомата.

Но лучшим решением конечно является диаграмма деятельности.
Ключевые слова: accept event action, flow final node, fork node, join node, send signal action
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: serp от 22 Марта 2010, 08:46:30
нарисовал, хочу выложить диаграмму для оценки (влож. файлик 15kБ), но не получается - говорит папка upload забита
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: bas от 22 Марта 2010, 10:01:28
нарисовал, хочу выложить диаграмму для оценки (влож. файлик 15kБ), но не получается - говорит папка upload забита
Исправлено
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: serp от 22 Марта 2010, 10:14:42
Вот что получилось:

Сразу после запуска основной поток (слева) ожидает сигнала что данные получены (Data Received). В другом потоке последовательно вызываются функции GetPeriodFuelSensor, GetPeriodFuel и GetCarTrace. Как только они выполнятся будет послан сигнал что данные получены. Кроме того в основной поток будет передан параметр result. Основной поток продолжит выполнение и если result = true, то отчет будет выведен.

Все ли правильно и понятно? Спасибо!
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Денис Иванов от 22 Марта 2010, 13:57:51
Исходя из постановки задачи не уверен, что надо использовать join node. Может лучше завершить вспомогательный поток с помощью flow final node? А то получается что основной и вспомогательный потоки должны еще дополнительно синхронизироваться в точке встречи.

Данные (result) в данном случае, как мне кажется, лучше передавать либо в виде аргумента для сигнала data receiver, либо через datastore (object node), а не напрямую как показано. Просто будет нагляднее.
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 24 Апреля 2010, 19:03:08
Не могли бы нарисовать мну диаграмму классов, а то очень трудно разобраться. Буду благодарен.
Хотябы для одного или двух нарисуйте, а то воше не понимаю как деляется.

import javax.swing.*;

public class main{

    public static void main(String[] args){
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {

        JFrame frame = new JFrame("Calculator");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pan p1 = new pan();

        p1.setOpaque(true);
        frame.setContentPane(p1);

        frame.pack();
        frame.setVisible(true);
    }
}


import java.awt.event.*;

public class pan extends javax.swing.JPanel implements ActionListener {

    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton10;
    private javax.swing.JButton jButton11;
    private javax.swing.JButton jButton12;
    private javax.swing.JButton jButton13;
    private javax.swing.JButton jButton14;
    private javax.swing.JButton jButton15;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JButton jButton9;
    private javax.swing.JTextField jTextField1;

    private String text = "0";
    private atan tg = new atan();

    public pan() {
        initComponents();
    }

    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jButton9 = new javax.swing.JButton();
        jButton10 = new javax.swing.JButton();
        jButton11 = new javax.swing.JButton();
        jButton12 = new javax.swing.JButton();
        jButton13 = new javax.swing.JButton();
        jButton14 = new javax.swing.JButton();
        jButton15 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();

        jButton1.setText("7");
        jButton1.setMnemonic(KeyEvent.VK_D);
        jButton1.setActionCommand("7");
        jButton1.addActionListener(this);

        jButton2.setText("8");
        jButton2.setMnemonic(KeyEvent.VK_D);
        jButton2.setActionCommand("8");
        jButton2.addActionListener(this);

        jButton3.setText("9");
        jButton3.setMnemonic(KeyEvent.VK_D);
        jButton3.setActionCommand("9");
        jButton3.addActionListener(this);

        jButton4.setText("4");
        jButton4.setMnemonic(KeyEvent.VK_D);
        jButton4.setActionCommand("4");
        jButton4.addActionListener(this);

        jButton5.setText("5");
        jButton5.setMnemonic(KeyEvent.VK_D);
        jButton5.setActionCommand("5");
        jButton5.addActionListener(this);

        jButton6.setText("6");
        jButton6.setMnemonic(KeyEvent.VK_D);
        jButton6.setActionCommand("6");
        jButton6.addActionListener(this);

        jButton7.setText("1");
        jButton7.setMnemonic(KeyEvent.VK_D);
        jButton7.setActionCommand("1");
        jButton7.addActionListener(this);

        jButton8.setText("2");
        jButton8.setMnemonic(KeyEvent.VK_D);
        jButton8.setActionCommand("2");
        jButton8.addActionListener(this);

        jButton9.setText("3");
        jButton9.setMnemonic(KeyEvent.VK_D);
        jButton9.setActionCommand("3");
        jButton9.addActionListener(this);

        jButton10.setText("0");
        jButton10.setMnemonic(KeyEvent.VK_D);
        jButton10.setActionCommand("0");
        jButton10.addActionListener(this);

        jButton11.setText(".");
        jButton11.setMnemonic(KeyEvent.VK_D);
        jButton11.setActionCommand(".");
        jButton11.addActionListener(this);

        jButton12.setText("+/-");
        jButton12.setMnemonic(KeyEvent.VK_D);
        jButton12.setActionCommand("+/-");
        jButton12.addActionListener(this);

        jButton13.setText("c");
        jButton13.setMnemonic(KeyEvent.VK_D);
        jButton13.setActionCommand("c");
        jButton13.addActionListener(this);

        jButton14.setText("Del");
        jButton14.setMnemonic(KeyEvent.VK_D);
        jButton14.setActionCommand("Del");
        jButton14.addActionListener(this);

        jButton15.setText("arctg(x)");
        jButton15.setMnemonic(KeyEvent.VK_D);
        jButton15.setActionCommand("arctg(x)");
        jButton15.addActionListener(this);

        jTextField1.setText(text);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 241, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(jButton10)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(jButton7)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton8)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jButton9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton12, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton15))
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton5)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton6, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jButton13, javax.swing.GroupLayout.DEFAULT_SIZE, 79, Short.MAX_VALUE)
                    .addComponent(jButton14, javax.swing.GroupLayout.DEFAULT_SIZE, 79, Short.MAX_VALUE)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2)
                    .addComponent(jButton3)
                    .addComponent(jButton13))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton4)
                    .addComponent(jButton5)
                    .addComponent(jButton6)
                    .addComponent(jButton14))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton7)
                    .addComponent(jButton8)
                    .addComponent(jButton9))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton10)
                    .addComponent(jButton11)
                    .addComponent(jButton12)
                    .addComponent(jButton15)))
        );
    }

    private boolean dot = false;
    private String ev, gettext;
    private int evi;
    private double tmp;
    public void actionPerformed(ActionEvent e) {
ev = e.getActionCommand();
text = jTextField1.getText();
try{
    evi = Integer.parseInt(ev);
    if (text.equals("0") || text.equals("ERR")){text = "";}
            text += ev;
            jTextField1.setText(text);
        } catch (NumberFormatException nfe){
if (ev.equals(".") && (dot == false)){
text += ".";
dot = true;
jTextField1.setText(text);
}

if (ev.equals("Del")){
if (text.substring(text.length()-1,text.length()).equals(".")) dot = false;
if (text.length() > 1){
text = text.substring(0,text.length()-1);
    } else if (text.length() == 1){
text = "0";
}
jTextField1.setText(text);
}

if (ev.equals("c")){
dot = false;
text = "0";
jTextField1.setText(text);
}

if (ev.equals("+/-")){
if (!text.equals("0") && !text.equals("0.") && !text.equals("ERR")){
    tmp = Double.valueOf(text);
    if (tmp > 0){text = "-" + text;}
    else if (tmp < 0) {text = text.substring(1,text.length());}
    jTextField1.setText(text);
}
}

if (ev.equals("arctg(x)")){
if (check()){
    float temp = Float.valueOf(text);
    temp = tg.arctg(temp);
    text = Float.toString(temp);
    jTextField1.setText(text);
}
}
        }
       
    }
   
    private boolean check(){
try{
float tmpcheck = Float.valueOf(text);
return true;
} catch (NumberFormatException nfe){
text = "ERR";
jTextField1.setText(text);
return false;
}
}

}



public class atan{
    private float SQRT3 = (float) 1.732050807569;

    public float arctg(float x){
        int sta = 0, sp = 0;
        float x2, a;

        if(x < (float)0) {x = -x; sta|=1; }
        if(x > (float)1) {x = (float)1/x; sta|=2; }

        while(x > (Math.PI/2)) {
            sp++;
            a = x + SQRT3;
            a = (float)1 / a;
            x *= SQRT3;
            x -= (float)1;
            x *= a;
        }

        x2 = x*x; a = x2 + (float) 1.4087812;
        a = (float) 0.55913709 / a;
        a += (float) 0.60310579;
        a -= (float) 0.05160454 * x2;
        a *= x;

        while(sp > 0) {a += (float)Math.PI/6; sp--;}
        if((sta&2) > 0) { a = (float) Math.PI / 2 - a; }
        if((sta&1) > 0) { a = -a; }
        return(a);
    }
}

Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 25 Апреля 2010, 14:09:50
Не могли бы нарисовать мну диаграмму классов, а то очень трудно разобраться. Буду благодарен.
Хотябы для одного или двух нарисуйте, а то воше не понимаю как деляется.
Возьмите инструмент и осуществите обратное проектирования вашего кода. Вот и будет диаграмма классов
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 25 Апреля 2010, 19:33:31
Цитировать
Возьмите инструмент и осуществите обратное проектирования вашего кода. Вот и будет диаграмма классов

Я не понимаю о__О
Как оно воше рисуется...
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: mouse от 25 Апреля 2010, 21:20:35
в EA нужная диаграмма выглядит както-так...
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 26 Апреля 2010, 20:39:22
Цитировать
в EA нужная диаграмма выглядит както-так...

Т.е. просто открыть код нужным софтом и будет готовая диаграмма?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: mouse от 26 Апреля 2010, 21:01:09
Т.е. просто открыть код нужным софтом и будет готовая диаграмма?

ага
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 20 Мая 2010, 21:36:02
Насколько я понял, этих переменных (в стиле private JButton jButton10;) там ненужно

Тоесть получается у меня такое
(http://docd.zx6.ru/proj/j2se/Calculator.png)
Модератор: лучше использовать не png формат, а то не отображается Ваша диаграмма
http://docd.zx6.ru/proj/j2se/Calculator.png
Это будет уже полностью завершенная диаграмма классов (для кода что я давал выше)?

Или там нехватает еще ассоциаций или чего другого?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 21 Мая 2010, 14:33:53
Странно что тут нельзя редактировать собственные сообщения...  ???
jpg тоже не отображается...
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 21 Мая 2010, 14:58:56
Разве нельзя, вроде было можно????

Рисунки отображаются
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 21 Мая 2010, 23:51:23
У меня такой кнопки нету (да, я авторизирован)  ???
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 27 Мая 2010, 20:08:35
И мне так и не ответили, правильно ли я нарисовал диаграмму классов к своему коду, что на предыдущей странице, или этой диаграмме еще чегото нехватает?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 29 Мая 2010, 18:18:18
И мне так и не ответили, правильно ли я нарисовал диаграмму классов к своему коду, что на предыдущей странице, или этой диаграмме еще чегото нехватает?
А чего отвечать-то. Есть код, вы сделали обратное проектирование. Так сами и смотрите.

Правда не понятно, почему функция арктангес у Вас класс, да еще имеет роль в связи тангес?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 31 Мая 2010, 01:27:33
Цитировать
почему функция арктангес у Вас класс
Задание такое

Цитировать
Есть код, вы сделали обратное проектирование
Ну я не знаю, думал может обратное проектирование чегото не добавляет или чтото в этом роде...

Понятно. Спасибо.
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 31 Мая 2010, 18:03:16
Оцните пожалуйста хорошо ли я нарисовал use case диаграмму для калькулятора.
Собственно калькулятор подсчитывает арктангенс.
(язык укр (користувач = пользователь, обчислити = вычеслить))
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 04 Июня 2010, 20:03:04
Уже не надо.. перерисовал... думаю теперь норм...
И почему у меня так и нету кнопки "редактировать/удалить"...
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 04 Июня 2010, 20:47:40
Уже не надо.. перерисовал... думаю теперь норм...
И почему у меня так и нету кнопки "редактировать/удалить"...
Конечно, можно сделать так, как ты показал, но имхо это стрельба из пушки по воробьям.

Например, ввести число. Какая это цель пользователя, какое тут взаимодействие между пользователем и системой?
Зачем вообще рисовать диаграмму ВИ.

По-моему, проще, понятнее и очевиднее нарисовать прототип калькулятора с клавишами.

На клавишу посадить событие, а также добавить проверки. Сам калькулятор состоит из дисплея-экрана, где показывается результат, набора кнопок, у каждой кнопки свои методы и т.п.

Зачем городить огород с вариантами использования?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 05 Июня 2010, 01:14:57
Цитировать
По-моему, проще, понятнее и очевиднее нарисовать прототип калькулятора с клавишами.

Даже не представляю, как это )

Цитировать
Зачем вообще рисовать диаграмму ВИ.

Ну задание - нарисовать одну статическую и одну динамическую диаграмму.
Я, как обычный (ленивый) студент, решил в качестве динамичной, нарисовать use case потому что ее мне проще понять как рисовать, да и мало рисовать. Я, конечно, с радостью нарисовал бы и чтото поинтереснее, только если этих две недели не были моим первым опытом с диаграммами UML, в которых я (как новичок) мало что понимаю.

Цитировать
Например, ввести число. Какая это цель пользователя, какое тут взаимодействие между пользователем и системой?

Ну по моей логике диаграмма ВИ показывает, что можно делать с калькулятором. А это
1. Редактировать поле ввода числа.
2. Вычислить арктангенс.

Что я и изобразил... Только вот диаграмму поправил. По моему так будет точнее...
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 05 Июня 2010, 21:52:13
Я бы не стал относить ДВИ к динамическим. Да они относятся к поведенческим диаграммам, но скорее деклариуют поведение, чем изображают динамику. Если уж говорить о динамической диаграмме то тут была бы уместнее диаграмма деятельности или последовательности.

Например, из вашей ДВИ следует, что калькулятор это некое устройство предназначенное для вычисления арктангеса и очистки экрана. Мне то казалось, что это устройство для математических расчетов, в том числе и для вычисления некоторых тригонометрических функций
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 07 Июня 2010, 00:17:01
Но ведь мой калькулятор то и делает, что редактирует экран и вычисляет только одну функцию.
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 07 Июня 2010, 12:53:12
Но ведь мой калькулятор то и делает, что редактирует экран и вычисляет только одну функцию.
Тогда у вас единственный ВИ - рассчитать акртангенс. Остальное от лукавого
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 07 Июня 2010, 19:49:08
Ясно. Тогда нарисую диаграмму последовательности.
Итак... в классе main метод createAndShowGui запускает jFrame.
Jframe устанавливает JPanel.
на JPanel есть JTextField, в котором наша строка с числом.
через getText  мы получаем введеную строку (String text)
ее посылаем кассу atan подсчитать арктангенс
и потом мы устанавливаем полученый результат - text на jTextField с помощью setText.
и это берем в цикл, так как мы делаем тоже самое пока не вырубим прогу. Правильно?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 07 Июня 2010, 21:07:17
Похоже между Jframe и Jpanel ошибка. Вы пишите сообщение f.SetContentPanel(p1). Но по сути setContentPanel - операция класса Jpanel, а у вас получается Jframe
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 07 Июня 2010, 22:34:11
Вы правы. Я ошибся тут )
Тогда кажется должно быть так...
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 08 Июня 2010, 00:32:10
Перерисовал опять...
Думаю так правильней.
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 08 Июня 2010, 10:07:15
Перерисовал опять...
Думаю так правильней.

А где же у вас внешнее системное событие (ну что пользователь ввел параметр в окно) ?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 08 Июня 2010, 14:22:08
Цитата: Galogen
А где же у вас внешнее системное событие (ну что пользователь ввел параметр в окно) ?

Спасибо. Так хорошо будет?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 08 Июня 2010, 19:40:29
Спасибо. Так хорошо будет?
Неа, нехорошо.
актер как-то у вас оказался внутри системы.

Проблема в том, что желательно написать таки сценарий ВИ - мы говорим о успешном пока, а есть еще неуспешные сценарии.

Думаю как-то так:
Пользователь вводит число
Система отображает введенное число
Пользователь подает команду "Рассчитать арктангес"
Система выполянет вычисление и отображает результат

Анализируя ВИ мы видим два внешних системных события:
1. ввод числа
2. посылка команды "Рассчитать арктангес"

Здесь при правильном анализе, мы должны специфицировать оба этих событий в виде двух системных операций.

Далее с использованием ДП мы изображаем возможную реализацию системных операций.
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 08 Июня 2010, 20:46:19
Цитировать
Думаю как-то так:
Пользователь вводит число
Система отображает введенное число
Пользователь подает команду "Рассчитать арктангес"
Система выполянет вычисление и отображает результат

Это же у нас тогда диаграмма состояний получается... Не представляю как это в ДП нариовать.

И почему мы не может воспринимать пользователя как часть системы?
У нас система с пользоватем и калькулятором.

Main - JFrame - JPanel - JTextField
JTextField берет от пользователя число, отдает в JPanel,
JPanel дает atan, atan возвращает результат к jPanel
JPanel устанавливает число в JTextField.

Ну а далее цикл. JTextField ждет от пользователя нового текста... и т.д.
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 08 Июня 2010, 21:02:58
Это же у нас тогда диаграмма состояний получается... Не представляю как это в ДП нариовать.

И почему мы не может воспринимать пользователя как часть системы?
У нас система с пользоватем и калькулятором.
Ну, Вы батенька, загнули. Пользователь часть системы.

Цитировать
Main - JFrame - JPanel - JTextField
JTextField берет от пользователя число, отдает в JPanel,
JPanel дает atan, atan возвращает результат к jPanel
JPanel устанавливает число в JTextField.
Ну и прекрасно.
Пользователь вводит число - куда в поле JTextField
Пользователь жмет команду Рассчитать
Возможно Atan посылает запрос на получение значения поля getValue и получает его
Вычисляет арктангес
Отсылает значение в JtextField - т.е. setValue
Все.
Все остальное - инициализация Main, Jframe и т.п. производится до начала варианта использования

Ну а далее цикл. JTextField ждет от пользователя нового текста... и т.д.

Т.е. JTextField - интерфейсная часть, ATAN контроллер вычисления - других то функций у вас нет, сущностных клаасов как таковых нет, результат или исходное значение хранится в JTextField.

Мне не понятно почему ATAN получает значение у JPanel, почему он не может обратится непосредственно к источнику информации JTEXTField. Типичный шаблон Information Expert
Да я бы добавил класс JButton какой нить, правда в Вашем случае и так однозначно, хотя имеет смысл разделить управление от представления

Это будет хорошо тем, что если вдруг Вы заходите реализовать еще функцию, то просто добавите метод к классу контроллеру, а на еще одну кнопку повесите событие онклик с передачей индекса или имени кнопки.

Таким образом ваш калькулятор легко модифицируется
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 08 Июня 2010, 22:37:15
С учетом выше сказаного нарисовал такое.
Хорошо ли?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 09 Июня 2010, 09:01:12
С учетом выше сказаного нарисовал такое.
Хорошо ли?
Лучше.
Правда вот какое замечание. Разве число можно вводить исключительно, нажимая кавиши калькулятора? Т.е. нельзя разве непосредственно в поле ввести его с клавиатуры?

Если все-таки все только через кнопку, тогда нажатие баттнона я бы разделил таким образом: Ввести элемент числа (элементчисла) - это в цикле с условием

Далее таже самая команда но в качестве параметра (арктангес)
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 09 Июня 2010, 15:50:47
Цитировать
равда вот какое замечание. Разве число можно вводить исключительно, нажимая кавиши калькулятора? Т.е. нельзя разве непосредственно в поле ввести его с клавиатуры?

Ну можно и с клавиатуры.
Тогда получается рисовать от юзера две одинаковые комманды - "редактировать число"
Только одна стрелка пойдет к JButton а вторая к JTextField?
Както странно выходит думаю...

Цитировать
ажатие баттнона я бы разделил таким образом: Ввести элемент числа (элементчисла) - это в цикле с условием

Далее таже самая команда но в качестве параметра (арктангес)

Тоесть одна стрелка (но лучше думаю назвать "нажать кнопку")
нажать кнопку (ЭлементЧисла) - тогда к setText; и вторая
нажать кнопку (arctg(x)) - тогда к вычеслению.

Я правильно понял?
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 09 Июня 2010, 16:11:35
Если я правильно вас понял...
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 09 Июня 2010, 19:53:12
Если я правильно вас понял...
Я думаю несовсем. ДП - это визуализированный сценарий действия, даже скажем некий экземпляр такого действия. Потому можно рассмотреть вариант ввода числа кнопками или ввода числа с клавиатуры как две разные диаграммы.

Либо (поскольку ситуация несложная) объединить стрелки редактировать и нажать кнопку фреймом типа alt.

Типа я могу ввести часть числа с клавиатуры, часть нажимая кнопки калькулятора.
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 09 Июня 2010, 20:34:03
Так?
Ил еще и взять это все в цикл, как я делал прежде...
А то вот думаю нужно ли всю диаграмму зацыкливать..
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Galogen от 10 Июня 2010, 12:01:26
Так?
Ил еще и взять это все в цикл, как я делал прежде...
А то вот думаю нужно ли всю диаграмму зацыкливать..
Нет диаграмму зацикливать не стоит. Разве фрейм алта обложить циклом - пока не завершен ввод, но думаю это не столь важно.

Это же все таки не исполняемая модель, а спецификация. Вот если бы из модели можно было генерировать исполняемый сразу код, тогда нужно было бы более строго описать условия и скроее всего с использованием OCL выражений

Мне только не совсем понятна задача JPanel - ведь по сути это только контейнер
Название: Re: Помогите чайнику нарисовать UML диаграмму
Отправлено: Doctor Drive от 10 Июня 2010, 17:19:22
Так. Работу я сделал и сдал. Все хорошо. Большое спасибо за помощь.

Цитировать
Мне только не совсем понятна задача JPanel - ведь по сути это только контейнер
Ну по коду ведь на нее наложены кнопки. И в этом классе (JPanel) берется текст из JTextField, там он посылается в atan, и там же и обратно устанавливается на JTextField