Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет yigal_s ([info]yigal_s)
@ 2012-12-01 23:32:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
опять программистское - Inversion of Control
Тут вот
http://occuserpens.livejournal.com/700387.html?thread=3501027#t3501027

возник интересный вопрос, а есть ли какие-то способы избавиться от Inversion of Control в случае GUI, то есть НЕ писать код как обработчик событий от мыши, клавиатуры и прочего, где каждое новое событие влетает в одну и ту же функцию, что напрочь гробит всякую структурность кода и его maintainability.

Т.е. вот функцию scanf уже просто так не вызовешь и НЕ НАПИШЕШЬ, ибо сначала может нажаться клавиша клавиатуры, потом мышки, ну и вообще сначала вобьют буковку в одно окошко, а потом в другое.

Хотелось бы, тем не менее, писать код GUI более вменяемо, чем это предлагают книги а-ля Петзольд, в идеале - просто в виде обычного линейного кода, или хотя бы в виде фрагментов линейного кода большей связности, чем просто в тупом обработчике событий, написанном как конечный автомат.

Вопрос - есть ли подобные разработки?


(Добавить комментарий)


[info]vantive_98@lj
2012-12-02 01:49 (ссылка)
Continuations?
http://blog.sigfpe.com/2011/10/quick-and-dirty-reinversion-of-control.html
http://pagesperso-systeme.lip6.fr/Christian.Queinnec/PDF/www.pdf
http://www.slideshare.net/Nathangl/inversion-of-control-containers-vs-handrolled-how-they-compare

(Ответить) (Ветвь дискуссии)


[info]yigal_s@lj
2012-12-02 01:59 (ссылка)
да, вот подозревал, что в эту степь вопрос.

спасибо за ссылки.

(Ответить) (Уровень выше)


[info]solomon2@lj
2012-12-02 02:00 (ссылка)
Web парадигма (HTML + CSS + JavaScript) для GUI - самое подходящее.

(Ответить) (Ветвь дискуссии)


[info]yigal_s@lj
2012-12-02 02:04 (ссылка)
Напишешь на этом всём Photoshop, например?

Или GUI CAD для коррекции разводки печтаных плат?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]solomon2@lj
2012-12-02 02:10 (ссылка)
К этому идет. Через несколько лет другого GUI вообще не будет.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yigal_s@lj
2012-12-02 02:12 (ссылка)
А чем, например, Java Script тут лучше какого-нидь старого кода на С++ или Visual Basic?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]solomon2@lj
2012-12-02 02:31 (ссылка)
Функциональностью и динамичностью, конечно. Я, кстати, сейчас на нем и работаю, очень легко и приятно на самом деле (при наличии мощных библиотек типа jQuery): event handler можно навесить на любой элемент или передать как параметр когда и куда надо. Event loop включен в семантику языка, про синхронизацию можно не думать. При этом структуру страницы и визуальные эффекты на самом языке описывать вообще не надо - для этого есть markup.

(Ответить) (Уровень выше)


[info]occuserpens@lj
2012-12-02 11:35 (ссылка)
Идет в браузере и теоретически (кхе-кхе) от него независим

(Ответить) (Уровень выше)


[info]staerum@lj
2012-12-02 11:06 (ссылка)
Так есть уже.
Вот вчера только в ленте было (http://ru-cooltech.livejournal.com/6277.html?nc=8#comments).

(Ответить) (Уровень выше)


[info]occuserpens@lj
2012-12-02 11:42 (ссылка)
Возьмем гуй к зипу или фтп. Нужно быть очень наивным, чтобы надеяться сходу его написать. И действительно, со временем появились 7zip, Bitkinex, парочка конкурентов - и все. Потому что нет простых способов делать серьезные гуи.

(Ответить)


[info]yatur@lj
2012-12-02 19:05 (ссылка)
В смысле? Их же вагон и маленькая тележка.

В стиле "голого" Win32 а-ля Петцольд с его WinProc(HWND hWnd, MESSAGE msg) никто не пишет уже лет 15 (с ужасом смотрит на календарь) 20. Понаписали библиотек контролов, начиная с MFC и заканчивая WPF.

А в браузерах WinProc и не было никогда. Там изначально объекты и button.onClick = "javascript:...".

scanf() в этом мире не нужна - в лучшем случае atoi(), которую надо вызывать либо при каждом изменении текста, либо по нажатию кнопочку "поехали".

(Ответить) (Ветвь дискуссии)


[info]yigal_s@lj
2012-12-02 19:24 (ссылка)
* начиная с MFC

это то же самое. объектная обертка и раутинг сообщений на отдельные объекты - не играет тут существенной роли. Всё равно код становится "пассивным", т.е. должен быть готовым реагировать на события, приходящие в определенной последовательности.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yatur@lj
2012-12-02 19:28 (ссылка)
Обертка играет огромную роль. Вместо одного гигантского неподъемного автомата мы получаем много подъемных маленьких.

Что же касается "пассивности" кода - то это следствие не парадигмы программирования, а устройства среды выполнения. Кнопочки и менюшки, которые пользователь может нажать в любой момент, принципиально отличаются от текстого терминала с его "а теперь введите значения координаты Х". Это, возможно, не очень удобно программисту, зато очень удобно пользователю.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yigal_s@lj
2012-12-03 01:25 (ссылка)
ну я-то говорю о более радикальных вещах, чем структурирование кода в виде объектов.

Что до "пассивности" - так ведь и в консольную аппликацию нажатия клавиш по прерываниям заходят, и в сетевую отдельные байты или отдельные блоки данных опять же вполне асинхронно принимаются.

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

(Ответить) (Уровень выше)