DRAKON.SU

Текущее время: Вторник, 19 Март, 2024 10:52

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Пятница, 13 Ноябрь, 2015 18:36 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Использование структуры Переключатель, как и силуэта, для изображения TRY немного некорректно.

В случае Переключателя выбор маршрута должен быть определён сразу после обработки иконы Выбор.
В случае силуэта переход на Имя ветки происходит только через икону Адрес.
В обоих случаях для TRY приходится допускать противоестественные, для данных конструкций, переходы из неопределённых мест возникновения исключения на маршруты CATCH.

В случае с Переключателем требуется явное (какой-то иконой) указание окончание блока TRY.
Маршруты в Переключателе позволяют переходы друг на друга (например через Развилку), что для TRY избыточно.

В силуэте использование нескольких блоков TRY затруднительно.

Вариант представленный мной лишён всех этих недостатков:
Вложение:
try.png
try.png [ 7.28 КБ | Просмотров: 16843 ]


Макроикона Группа действий, обозначенная как TRY, естественным образом обозначает границы блока TRY.

Структура Параллельные процессы естественным образом обозначает начало и конец маршрутов нормального выполнения программы и веток catch. Самый левый маршрут — нормальное выполнение. Следует добавить что маршруты catch совершенно безболезненно могут активироваться возникающими в охраняемой части исключениями в силу их (маршрутов catch) раздельного, от основного маршрута, существования.

Количество TRY блоков в одной схеме неограниченно. TRY блоки можно использовать на любом маршруте.

Легко реализуется вложенность TRY блоков. Эти блоки визуально прекрасно различаются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Суббота, 14 Ноябрь, 2015 00:33 

Зарегистрирован: Четверг, 02 Июль, 2015 13:47
Сообщения: 45
Как Вам нравится вот такое представление вложенных try?


Вложения:
nested try.png
nested try.png [ 19.94 КБ | Просмотров: 16827 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Суббота, 14 Ноябрь, 2015 04:01 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Не нравится.

Нельзя одно Действие защищать двумя try.

Схема во многом не соответствует языку Дракон.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Вторник, 17 Ноябрь, 2015 23:40 

Зарегистрирован: Четверг, 02 Июль, 2015 13:47
Сообщения: 45
Возникли следующие соображения.

Показ шампура try , а справа от него шампуров catch интуитивен и нагляден.
Шампуры catch при этом скорее ветки, функционально, чем варианты выбора, или последовательность вопросов.
Но в целом оператор try-catch, часто защищающий единственный оператор и полностью умещающийся в одну икону, как у Степана - локальный маленький оператор, а не целый набор веток силуэта, это пушкой по воробьям.
И для полноты картины хотелось бы иметь вложенный try, что в силуэте выглядит как мешанина веток, текстовые ссылки на ветки try отнюдь не интуитивны для прояснения простой вложенности элементарных блоков кода.

Интересно с finally - нужно ли его размещать в главном шампуре после try и catch.

Да, в простом случае finally выполняется после try или catch, как и показывают линии в варианте Эдуарда.
Но для такого простого случая код try { a } catch () { b } finally { c } полностью эквивалентен try { a } catch () { b } c , без всякого finally.

finally работает по особому в следующих случаях:

- если в try { } возникает Exception , не пойманное блоками catch () {} .
Прежде чем выйти из функции с Exception, выполнится блок finally (сначала текущего try, потом родительских).
Линии, соединяющие у Эдуарда шампур try и finally, а также finally с последующими операторами в шампуре показаны, но не работают.
А тот факт, что сразу после блока finally произойдет выход из алгоритма не показан, но важен.

В следующих случаях, аналогично:
- если в catch () { } возникает Exception
- если в try { } или catch () есть оператор return
- если в try { } или catch () есть оператор break или continue

Затем, есть finally вложенных try - в случае непойманной Exception блоки finally вложенных try выполнятся по одному в порядке, не обязательно совпадающем с изображенным на шампуре.

Во всех этих случаях, изображение finally как самой правой ветки как бы локального силуэта вполне работает - как говорят по английски, last but not least, и в моем последнем варианте вложенные finally выполнятся слева направо.
Тем более что функционально finally чаще всего используется только для одного: закрытии обьектa, связанного с ресурсами - ровно один оператор ...close(), что называется уборка мусора.
Известно, что в Java не приходится явно освобождать память, занятую локальными обьектами, это делается автоматически.
Таким же образом, размещение оператора освобождения файла на главном шампуре - довольно опционально, т.е. его отсутствие не меняет смысла главного алгоритма, это дело вторичное, легко постигаемое передвижением глаз направо :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Понедельник, 23 Ноябрь, 2015 00:26 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 73
Откуда: Россия, Санкт-Петербург
Предлагаю к рассмотрению ещё один вариант схемы.


Вложения:
Комментарий к файлу: схема try-catch
try-catch.png
try-catch.png [ 14.28 КБ | Просмотров: 16728 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2015 12:26 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
Олег, по следам нашего вчерашнего разговора по телефону.
viewtopic.php?p=94139#p94139

Олег, спасибо за подсказку про солнечный зайчик.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2015 14:19 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Olegar писал(а):
Как Вам нравится вот такое представление вложенных try?

Отличный вариант. Так и сделаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Суббота, 14 Январь, 2017 18:24 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
Я только что провел переговоры по Скайпу с Олегом Гариповым (Канада, Галифакс) длительностью 1 час 42 минуты.

Олег Гарипов (Olegar) утверждает следующее. Тезис Олега Гарипова
Цитата:
9 миллионов Java-программистов и 4 миллиона Си-шарп-программистов испытывают на работе серьезные трудности. Эти трудности можно устранить или ослабить с помощью языка ДРАКОН
Олег Гарипов знает, как это можно сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Воскресенье, 15 Январь, 2017 09:19 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
Тезис Олега Гарипова
Цитата:
9 миллионов Java-программистов и 4 миллиона Си-шарп-программистов испытывают на работе серьезные трудности. Эти трудности можно устранить или ослабить с помощью языка ДРАКОН
Слова Олега Гарипова произвели на меня очень сильное впечатление.

На нашем форуме такие слова звучат впервые. Согласен ли кто-нибудь с Олегом?

Олег сказал мне, что этот тезис доказан здесь:
http://integratorsoft.com/?mo=651381494 ... 5138149515

Но мне кажется, что текст по ссылке является неубедительным.
Цитирую:
Цитата:
CodeView (Basic Edition)

Getting a handle on complexity

Integrator CodeView (Basic Edition) offers code visualization within traditional integrated development environment tools such as Eclipse, Idea and Netbeans (IDEs). CodeView works as a plug-in for your IDE and you switch back and forth with a keystroke. CodeView helps Java developers maintain and troubleshoot code faster and easier.

CodeView generates a picture of the code, which shows the flow of the program. You see the whole at once and your mind grasps it easily. The "control flow" of a stack is the order of execution of the program lines; branches and calls are hard to follow in the IDE. CodeView simplifies understanding of the main and secondary flows of the algorithms, showing all binary yes/no choices, multiple choices, cycles, branches, calls, iterations, event handlers, comments and try/catch/finally exception handlers.

You can edit the diagrams generated by Integrator to change the code and save changes. Add comments, making it easy to understand later, or for others, such as newcomers to the team or business analysts.

Download Integrator CodeView (Basic Edition)

Navigation

CodeView includes powerful navigation capabilities. You can expand and collapse diagrams, scroll or move a hover window over the diagram to magnify portions. Method calls are displayed as straight arrows and are navigable in both directions. Related code files not shown on the picture can be added with a button until all the algorithms needed to solve an issue are shown. Hide modules you don't need with a keystroke. Save a picture once you are satisfied.

CodeView pictures are maps of the code modules and their connections and they can get large for complex projects. A standard HD monitor will show about 60 lines of code in readable form; you have to move around to see larger pictures. Print it on large paper as a PDF and then, in Adobe, chose Poster format to display how it will lay out. The code is readable down to 70% of full size. A printout works well for pair programming. Discuss the issues and make notes on the paper, then one person makes changes at the keyboard and the other holds the map to guide the changes.

2,000 lines of code creates a picture 3 meter wide by 2 meter high. You hang it on the wall, and teams can examine it together. Like maps, details require space. The large printout is a rich resource for learning new projects and refactoring legacy code.

Use cases

How do you gain insight into a particular use case, which involves many intricately connected algorithms? CodeView improves the traditional method of analyzing code line by line within the IDE, which requires hundreds of mouse clicks and keyboard shortcuts. Use search in CodeView or the IDE to locate the algorithms relevant to your issue. Now you can collaborate with others effectively; they can see the results of your work and understand the control flow of the use case.

Debugging

If you can find and fix a bug in the IDE, great! Fixing complicated bugs requires tracing code through many linked algorithms, setting up a test scenario and stepping through lines of code in chains of calls in the IDE. Even then you still may not locate the cause of the problem. CodeView displays the entire call stack of algorithms so that the whole sequence of execution is seen as a running ‘spotlight’ on an unchanging big picture.

Errors in the production environment are often captured as exception stack traces scattered in application logs, log4j, etc. Just copy a stack trace from the log and paste it into CodeView. All algorithms relevant to the errors are displayed in CodeView, each stack trace is marked by an individual color and all calls are displayed as arrows. There’s no better way to see what went wrong. (add link to a nice example, open in new tab.)

Learning a new project

A typical project has thousands of lines of code over hundreds of modules. Clicking in the IDE, reading code, clicking to called modules, following branches is exhausting and you still may not understand the control flow. You can see the flow and read the code In CodeView, so the whole begins to make sense much faster. When you work in the new project, Search gets you to the relevant module and CodeView shows you the modules around it, hence your exact location in the project. The big printout is invaluable for providing context and making notes.

Code review

During code review, a printout of the code is easily read by several team members at once and shows any new code in the context of the flow. The details of the new code are easier to understand. There is no better way to discuss code and it is fun and efficient.

Drakon language

CodeView uses a graphical language called Drakon, a friendly and intuitive flow chart notation which is easy to grasp. Drakon is a powerful mathematically-proven language developed for the Russian space program. Their development team works on the software used to fly “Buran” - the reusable spacecraft. Drakon streamlines sharing, reviewing, discussing, fixing, enhancing and evolving algorithms by the entire project team involved in the process, including non-developers. The main features of Drakon are:

• Control flows top to bottom, which is predictable – better than the arbitrary arrangements of Western flow charts. The main flow of the algorithm is always on the left. It represents the main, most important case. In Russian, it is called шампур, literally ‘a skewer’, as if filled with kebab of operators.

• The flow appears clearly as straight lines, without any visual obstacles. In IDE view we do not see this flow at all, especially on multiple recursive if/else algorithms spanning several screens or in multiple files.

• With an “If” fork , operators on the expected path show on the left, in the main flow, and the other branch shows to the right. This is a more ergonomic view than the Java top to bottom flow of indented code. Complicated flows like chained "If" forks are clear in Drakon.

• Multiple Choices and exception handling Try/Catch statements. The flow leads into a given operator and answers the question “how did we get here during program execution?”

• For multi-threaded applications, concurrently running algorithms and thread starting points are displayed side by side, providing a better view.

Main features of CodeView

Source code can be changed directly in CodeView and the changes saved to the original file. Add comments by clicking on the operator and entering. Either natural language and code or both can be displayed. Comments are stored in the code file.

CodeView works as a plug-in for IDE’s such as Eclipse. You can toggle between CodeView and Eclipse editor with CTRL + ALT + C. Changes made in CodeView are reflected in the Eclipse editor and vice versa.

CodeView shows both Java (server side) and Java Script (client side) in the same picture. Other common programming languages are also supported; new languages are being added.

Integrator CodeView (Basic Edition) boosts productivity and promotes communication in development teams. Both developers & non-developers can analyze complicated software effectively. The big picture simplifies making changes and guarantees high quality of code. CodeView simplifies knowledge transfer to new developers on a project and promotes team collaboration. Please give it a try.

Big picture example with 3 traces of Java code


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Воскресенье, 15 Январь, 2017 09:46 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Владимир Паронджанов писал(а):
Согласен ли кто-нибудь с Олегом?
Какого рода трудности имеются в виду?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Воскресенье, 15 Январь, 2017 17:00 

Зарегистрирован: Пятница, 15 Апрель, 2016 11:38
Сообщения: 119
Откуда: из СССР
Мне кажется что вариант от LKom больше соответствует идеологии икон ДРАКОНа, чем второй вариант. Визуальная наглядность больше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Пятница, 17 Февраль, 2017 09:16 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
viewtopic.php?p=99655#p99655
Бытко Сергей писал(а):
Мне понравился первый вариант Эдуарда Ильченко, но слева от шампура, как мне кажется, ничего не надо рисовать. Код после try должен идти по шампуру, в соответствии с требованиями Дракона, как самый благоприятный вариант, а исключения - правее (хуже). Чтобы не путать с case возможно какую-то иконку новую придумать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Вторник, 02 Апрель, 2019 02:22 
Аватара пользователя

Зарегистрирован: Воскресенье, 31 Март, 2019 02:55
Сообщения: 39
Откуда: Саратов, РСФСР, Советский Союз
Степан Митькин писал(а):
Olegar писал(а):
Как представить в Драконе оператор Java try {...} catch (Exception1 e1) {...} catch (Exception2 e2) {...} finally {...} ?

Я тоже задался этим вопросом. Но ничего путного придумать не смог.
В итоге я помещал всю конструкцию try { } catch { } внутри иконы "Действие".

Почему возникло это затруднение?
Из-за глубинной несовместимости исключений и ДРАКОНА.

Исключения подразумевают невидимые пути через алгоритм. В интернете полно ругани относительно пользы и вреда исключений.
Но несомненным является наличие этих невидимых путей.

В ДРАКОНе же, напротив, особый упор делается на видимость всех путей. Сила ДРАКОНа состоит в том, что он делает все пути через алгоритм явными.


Java обязывает обрабатывать исключения. От этого никуда не уйдёшь. В Java-мире бессмысленны войны по поводу: обрабатывать исключения или нет. Часто возникаю ситуации вложенных try-catch. Если размещать вложенные try-catch в одной иконе Действие, то получится вот такое: https://drakonhub.com/ide/doc/8observer8/8

Изображение

Код:
class NestedTry {
 
    // main method
    public static void main(String args[])
    {
        // Main try block
        try {
 
            // initializing array
            int a[] = { 1, 2, 3, 4, 5 };
 
            // trying to print element at index 5
            System.out.println(a[5]);
 
            // try-block2 inside another try block
            try {
 
                // performing division by zero
                int x = a[2] / 0;
            }
            catch (ArithmeticException e2) {
                System.out.println("division by zero is not possible");
            }
        }
        catch (ArrayIndexOutOfBoundsException e1) {
            System.out.println("ArrayIndexOutOfBoundsException");
            System.out.println("Element at such index does not exists");
        }
    }
    // end of main method
}


Вложения:
20190402032106.png
20190402032106.png [ 31.91 КБ | Просмотров: 12197 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в языке ДРАКОН
СообщениеДобавлено: Вторник, 02 Апрель, 2019 14:19 
Аватара пользователя

Зарегистрирован: Воскресенье, 31 Март, 2019 02:55
Сообщения: 39
Откуда: Саратов, РСФСР, Советский Союз
Как мне кажется, я придумал самый простой вариант, который удовлетворит всех начинающих на Java, которые вынуждены использовать обработку исключений, с созданием вложенных try-catch. Мой вариант: запретить try-catch в DRAKON-блок-схемах. Обработка исключений не является логикой алгоритма, это просто вынужденная мера в Java, удоство в коде, но вредность для блок-схемы. Мы можем взять блок-схему алгоритма и начать реализовывать её на Java. Среда программирования на Java сама подскажет, что необходимо обработать такие-то типы исключений. Написание обработчиков в DRAKON-блок-схеме создаёт серьёзные проблемы, но не несёт никакой значимой пользы. Вот такое моё решение и я его буду советовать всем начинающим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в Драконе
СообщениеДобавлено: Четверг, 22 Октябрь, 2020 19:00 

Зарегистрирован: Пятница, 08 Декабрь, 2017 18:24
Сообщения: 439
Откуда: Астрахань-Сочи
Olegar писал(а):
Как Вам нравится вот такое представление вложенных try?

На днях возникло спонтанное обсуждение вопроса об изучении исключений со школьниками, и я обратился к поиску по форуму. Пример Олега довольно близок к нашему пониманию отражения исключений в ДРАКОН-схемах.
Однако думается, что обязательные к исполнению блоки должны находиться на одном шампуре.
В отношении к обработчикам исключений можно применить интуитивно понятный образ, давно применяемый к невидимым/скрытым линиям в черчении: пунктир.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в языке ДРАКОН
СообщениеДобавлено: Четверг, 25 Февраль, 2021 14:28 
Аватара пользователя

Зарегистрирован: Пятница, 19 Февраль, 2021 14:48
Сообщения: 128
Предлагаю использовать такие иконы для try-catch-finally блока. catch можно сделать и как в switch-case, но предлагаю так же возможность сделать вход в икону не только сверху, но и слева, тогда catch и case иконы можно будет рисовать нанизанными на линию, с if-else тоже интересно получается, но это другая тема.

Код finally отделяется от блока try линией возврата из catch, поэтому нет специальной иконы для finally.

Иконы разных типов хорошо бы выделять своим цветом, так схема будет легче читаться.

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


Вложения:
IMG_20210225_141418_863.jpg
IMG_20210225_141418_863.jpg [ 44.9 КБ | Просмотров: 8312 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Java try/catch/finally в языке ДРАКОН
СообщениеДобавлено: Понедельник, 01 Март, 2021 21:21 
Аватара пользователя

Зарегистрирован: Среда, 09 Ноябрь, 2016 00:33
Сообщения: 122
Откуда: Tallinn
по логике код в каждом catch это вообще отдельная программа своего рода и логичнее бы было в таком случае, нарисовать границы области охваченной try... и в этих границах разместить диаграммы на каждый catch как отдельные диаграммы, не соединяя с главной диаграммой


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB