Форум Сообщества Аналитиков
Общий раздел => Примеры => Задачи студентов => Тема начата: serp от 20 Марта 2010, 23:57:27
-
Ситуация такая.
Есть некий код, который вызывает некую функцию асинхронно (передав при этом ей некоторое количество параметров), т.е. запускает ее в отдельном потоке. Когда эта функция закончит свое выполнение, то в основном потоке будет вызвана CallBack функция, в которую будет передан результат выполнения асинхронно вызванной функции.
(Асинхронное выполнения делегата C#)
Как это изобразить на UML. Все функции относятся к одному классу, поэтому State diagram и Sequence diagram отпадают. Думается что это должна быть Activity Diagram. Но непонятно как показать асинхронный запуск функции и запуск CallBack функции.
-
Это можно нарисовать и через диаграмму последовательности, и через диаграмму автомата.
Но лучшим решением конечно является диаграмма деятельности.
Ключевые слова: accept event action, flow final node, fork node, join node, send signal action
-
нарисовал, хочу выложить диаграмму для оценки (влож. файлик 15kБ), но не получается - говорит папка upload забита
-
нарисовал, хочу выложить диаграмму для оценки (влож. файлик 15kБ), но не получается - говорит папка upload забита
Исправлено
-
Вот что получилось:
Сразу после запуска основной поток (слева) ожидает сигнала что данные получены (Data Received). В другом потоке последовательно вызываются функции GetPeriodFuelSensor, GetPeriodFuel и GetCarTrace. Как только они выполнятся будет послан сигнал что данные получены. Кроме того в основной поток будет передан параметр result. Основной поток продолжит выполнение и если result = true, то отчет будет выведен.
Все ли правильно и понятно? Спасибо!
-
Исходя из постановки задачи не уверен, что надо использовать join node. Может лучше завершить вспомогательный поток с помощью flow final node? А то получается что основной и вспомогательный потоки должны еще дополнительно синхронизироваться в точке встречи.
Данные (result) в данном случае, как мне кажется, лучше передавать либо в виде аргумента для сигнала data receiver, либо через datastore (object node), а не напрямую как показано. Просто будет нагляднее.
-
Не могли бы нарисовать мну диаграмму классов, а то очень трудно разобраться. Буду благодарен.
Хотябы для одного или двух нарисуйте, а то воше не понимаю как деляется.
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);
}
}
-
Не могли бы нарисовать мну диаграмму классов, а то очень трудно разобраться. Буду благодарен.
Хотябы для одного или двух нарисуйте, а то воше не понимаю как деляется.
Возьмите инструмент и осуществите обратное проектирования вашего кода. Вот и будет диаграмма классов
-
Возьмите инструмент и осуществите обратное проектирования вашего кода. Вот и будет диаграмма классов
Я не понимаю о__О
Как оно воше рисуется...
-
в EA нужная диаграмма выглядит както-так...
-
в EA нужная диаграмма выглядит както-так...
Т.е. просто открыть код нужным софтом и будет готовая диаграмма?
-
Т.е. просто открыть код нужным софтом и будет готовая диаграмма?
ага
-
Насколько я понял, этих переменных (в стиле private JButton jButton10;) там ненужно
Тоесть получается у меня такое
(http://docd.zx6.ru/proj/j2se/Calculator.png)
Модератор: лучше использовать не png формат, а то не отображается Ваша диаграмма
http://docd.zx6.ru/proj/j2se/Calculator.png
Это будет уже полностью завершенная диаграмма классов (для кода что я давал выше)?
Или там нехватает еще ассоциаций или чего другого?
-
Странно что тут нельзя редактировать собственные сообщения... ???
jpg тоже не отображается...
-
Разве нельзя, вроде было можно????
Рисунки отображаются
-
У меня такой кнопки нету (да, я авторизирован) ???
-
И мне так и не ответили, правильно ли я нарисовал диаграмму классов к своему коду, что на предыдущей странице, или этой диаграмме еще чегото нехватает?
-
И мне так и не ответили, правильно ли я нарисовал диаграмму классов к своему коду, что на предыдущей странице, или этой диаграмме еще чегото нехватает?
А чего отвечать-то. Есть код, вы сделали обратное проектирование. Так сами и смотрите.
Правда не понятно, почему функция арктангес у Вас класс, да еще имеет роль в связи тангес?
-
почему функция арктангес у Вас класс
Задание такое
Есть код, вы сделали обратное проектирование
Ну я не знаю, думал может обратное проектирование чегото не добавляет или чтото в этом роде...
Понятно. Спасибо.
-
Оцните пожалуйста хорошо ли я нарисовал use case диаграмму для калькулятора.
Собственно калькулятор подсчитывает арктангенс.
(язык укр (користувач = пользователь, обчислити = вычеслить))
-
Уже не надо.. перерисовал... думаю теперь норм...
И почему у меня так и нету кнопки "редактировать/удалить"...
-
Уже не надо.. перерисовал... думаю теперь норм...
И почему у меня так и нету кнопки "редактировать/удалить"...
Конечно, можно сделать так, как ты показал, но имхо это стрельба из пушки по воробьям.
Например, ввести число. Какая это цель пользователя, какое тут взаимодействие между пользователем и системой?
Зачем вообще рисовать диаграмму ВИ.
По-моему, проще, понятнее и очевиднее нарисовать прототип калькулятора с клавишами.
На клавишу посадить событие, а также добавить проверки. Сам калькулятор состоит из дисплея-экрана, где показывается результат, набора кнопок, у каждой кнопки свои методы и т.п.
Зачем городить огород с вариантами использования?
-
По-моему, проще, понятнее и очевиднее нарисовать прототип калькулятора с клавишами.
Даже не представляю, как это )
Зачем вообще рисовать диаграмму ВИ.
Ну задание - нарисовать одну статическую и одну динамическую диаграмму.
Я, как обычный (ленивый) студент, решил в качестве динамичной, нарисовать use case потому что ее мне проще понять как рисовать, да и мало рисовать. Я, конечно, с радостью нарисовал бы и чтото поинтереснее, только если этих две недели не были моим первым опытом с диаграммами UML, в которых я (как новичок) мало что понимаю.
Например, ввести число. Какая это цель пользователя, какое тут взаимодействие между пользователем и системой?
Ну по моей логике диаграмма ВИ показывает, что можно делать с калькулятором. А это
1. Редактировать поле ввода числа.
2. Вычислить арктангенс.
Что я и изобразил... Только вот диаграмму поправил. По моему так будет точнее...
-
Я бы не стал относить ДВИ к динамическим. Да они относятся к поведенческим диаграммам, но скорее деклариуют поведение, чем изображают динамику. Если уж говорить о динамической диаграмме то тут была бы уместнее диаграмма деятельности или последовательности.
Например, из вашей ДВИ следует, что калькулятор это некое устройство предназначенное для вычисления арктангеса и очистки экрана. Мне то казалось, что это устройство для математических расчетов, в том числе и для вычисления некоторых тригонометрических функций
-
Но ведь мой калькулятор то и делает, что редактирует экран и вычисляет только одну функцию.
-
Но ведь мой калькулятор то и делает, что редактирует экран и вычисляет только одну функцию.
Тогда у вас единственный ВИ - рассчитать акртангенс. Остальное от лукавого
-
Ясно. Тогда нарисую диаграмму последовательности.
Итак... в классе main метод createAndShowGui запускает jFrame.
Jframe устанавливает JPanel.
на JPanel есть JTextField, в котором наша строка с числом.
через getText мы получаем введеную строку (String text)
ее посылаем кассу atan подсчитать арктангенс
и потом мы устанавливаем полученый результат - text на jTextField с помощью setText.
и это берем в цикл, так как мы делаем тоже самое пока не вырубим прогу. Правильно?
-
Похоже между Jframe и Jpanel ошибка. Вы пишите сообщение f.SetContentPanel(p1). Но по сути setContentPanel - операция класса Jpanel, а у вас получается Jframe
-
Вы правы. Я ошибся тут )
Тогда кажется должно быть так...
-
Перерисовал опять...
Думаю так правильней.
-
Перерисовал опять...
Думаю так правильней.
А где же у вас внешнее системное событие (ну что пользователь ввел параметр в окно) ?
-
А где же у вас внешнее системное событие (ну что пользователь ввел параметр в окно) ?
Спасибо. Так хорошо будет?
-
Спасибо. Так хорошо будет?
Неа, нехорошо.
актер как-то у вас оказался внутри системы.
Проблема в том, что желательно написать таки сценарий ВИ - мы говорим о успешном пока, а есть еще неуспешные сценарии.
Думаю как-то так:
Пользователь вводит число
Система отображает введенное число
Пользователь подает команду "Рассчитать арктангес"
Система выполянет вычисление и отображает результат
Анализируя ВИ мы видим два внешних системных события:
1. ввод числа
2. посылка команды "Рассчитать арктангес"
Здесь при правильном анализе, мы должны специфицировать оба этих событий в виде двух системных операций.
Далее с использованием ДП мы изображаем возможную реализацию системных операций.
-
Думаю как-то так:
Пользователь вводит число
Система отображает введенное число
Пользователь подает команду "Рассчитать арктангес"
Система выполянет вычисление и отображает результат
Это же у нас тогда диаграмма состояний получается... Не представляю как это в ДП нариовать.
И почему мы не может воспринимать пользователя как часть системы?
У нас система с пользоватем и калькулятором.
Main - JFrame - JPanel - JTextField
JTextField берет от пользователя число, отдает в JPanel,
JPanel дает atan, atan возвращает результат к jPanel
JPanel устанавливает число в JTextField.
Ну а далее цикл. JTextField ждет от пользователя нового текста... и т.д.
-
Это же у нас тогда диаграмма состояний получается... Не представляю как это в ДП нариовать.
И почему мы не может воспринимать пользователя как часть системы?
У нас система с пользоватем и калькулятором.
Ну, Вы батенька, загнули. Пользователь часть системы.
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 какой нить, правда в Вашем случае и так однозначно, хотя имеет смысл разделить управление от представления
Это будет хорошо тем, что если вдруг Вы заходите реализовать еще функцию, то просто добавите метод к классу контроллеру, а на еще одну кнопку повесите событие онклик с передачей индекса или имени кнопки.
Таким образом ваш калькулятор легко модифицируется
-
С учетом выше сказаного нарисовал такое.
Хорошо ли?
-
С учетом выше сказаного нарисовал такое.
Хорошо ли?
Лучше.
Правда вот какое замечание. Разве число можно вводить исключительно, нажимая кавиши калькулятора? Т.е. нельзя разве непосредственно в поле ввести его с клавиатуры?
Если все-таки все только через кнопку, тогда нажатие баттнона я бы разделил таким образом: Ввести элемент числа (элементчисла) - это в цикле с условием
Далее таже самая команда но в качестве параметра (арктангес)
-
равда вот какое замечание. Разве число можно вводить исключительно, нажимая кавиши калькулятора? Т.е. нельзя разве непосредственно в поле ввести его с клавиатуры?
Ну можно и с клавиатуры.
Тогда получается рисовать от юзера две одинаковые комманды - "редактировать число"
Только одна стрелка пойдет к JButton а вторая к JTextField?
Както странно выходит думаю...
ажатие баттнона я бы разделил таким образом: Ввести элемент числа (элементчисла) - это в цикле с условием
Далее таже самая команда но в качестве параметра (арктангес)
Тоесть одна стрелка (но лучше думаю назвать "нажать кнопку")
нажать кнопку (ЭлементЧисла) - тогда к setText; и вторая
нажать кнопку (arctg(x)) - тогда к вычеслению.
Я правильно понял?
-
Если я правильно вас понял...
-
Если я правильно вас понял...
Я думаю несовсем. ДП - это визуализированный сценарий действия, даже скажем некий экземпляр такого действия. Потому можно рассмотреть вариант ввода числа кнопками или ввода числа с клавиатуры как две разные диаграммы.
Либо (поскольку ситуация несложная) объединить стрелки редактировать и нажать кнопку фреймом типа alt.
Типа я могу ввести часть числа с клавиатуры, часть нажимая кнопки калькулятора.
-
Так?
Ил еще и взять это все в цикл, как я делал прежде...
А то вот думаю нужно ли всю диаграмму зацыкливать..
-
Так?
Ил еще и взять это все в цикл, как я делал прежде...
А то вот думаю нужно ли всю диаграмму зацыкливать..
Нет диаграмму зацикливать не стоит. Разве фрейм алта обложить циклом - пока не завершен ввод, но думаю это не столь важно.
Это же все таки не исполняемая модель, а спецификация. Вот если бы из модели можно было генерировать исполняемый сразу код, тогда нужно было бы более строго описать условия и скроее всего с использованием OCL выражений
Мне только не совсем понятна задача JPanel - ведь по сути это только контейнер
-
Так. Работу я сделал и сдал. Все хорошо. Большое спасибо за помощь.
Мне только не совсем понятна задача JPanel - ведь по сути это только контейнер
Ну по коду ведь на нее наложены кнопки. И в этом классе (JPanel) берется текст из JTextField, там он посылается в atan, и там же и обратно устанавливается на JTextField