Я начал, как и многие другие, с консольного программирования (как в терминале, а не на Playstation). Но рано или поздно нужно коснуться программирования на основе GUI, хотите вы этого или нет. Этот переход содержит много изменений в том, как вам нужно думать о внешнем интерфейсе (и, возможно, также о внутреннем интерфейсе).
Итак, каковы основные различия при переходе от консольного программирования к программированию на основе графического интерфейса?
Ответы:
Самым большим отличием является дизайн пользовательского интерфейса. Хороший графический интерфейс может создать или сломать приложение. Поклонники Mac будут привлекать внимание к красиво оформленному графическому интерфейсу обычного приложения Mac OS X, и у них есть смысл, но это не проблема технологии - это проблема дизайна / этики / удобства использования.
Что касается технических вопросов, в произвольном порядке:
Пользователь может делать все что угодно в любом порядке и в любое время, в отличие от консольной программы, в которой вы либо запрашиваете ввод, либо сообщаете ему результат. Вы не можете предполагать, что они будут следовать порядку, на который вы надеетесь, если вы не используете стиль рабочего процесса в стиле мастера.
Как уже упоминалось, события играют большую роль в этом, и вы можете получить несколько событий, пока вы обслуживаете последнее, поэтому вы не можете реально построить свое состояние на основе «текущего события». Используйте замыкания или аналогичный механизм для поддержания контекста между различными событиями. В консольном приложении ваш FSM обычно самодостаточен в цикле «получить ввод, обработать ввод, обновить вывод». В программировании с графическим интерфейсом не существует такой же структуры - «main» - это возвращаемая вещь, управляемая событиями, часто это гигантский оператор switch ().
Необходимо учитывать различные размеры / разрешения экрана и разрешить изменение размера графического интерфейса пользователя от 800x600 до максимального значения для монитора пользователя.
Вам необходимо учитывать разные стратегии ввода - мышь, клавиатура, сенсорный ввод и т. Д. Некоторые технологии предоставляются бесплатно (прокрутка колесиком мыши), другие требуют интеграции (Ink).
Доступность - GUI гораздо больше подходит для менее способных пользователей с ограниченными возможностями зрения, слуха, моторики или когнитивных способностей. Шум «дин» приятен и очевиден по сравнению с загадочным сообщением об ошибке на консоли.
Интернационализация - я предполагаю, что ваше консольное приложение только для США / ANSI, но когда вы попадаете в GUI, вы можете иметь языковые / ресурсные пакеты, которые могут быть ориентированы на другие языки и регионы без изменений в кодировке, если вы подготовились к нему из Начало. Например, в коде нет жестко закодированных языковых строк - все как поиск ресурсов.
У вас есть гораздо больше возможностей для реализации технологий - на основе веб-интерфейса, различных наборов графического интерфейса, Flash / WPF и т. Д.
Использование цвета и анимации. Консольные программы, как правило, монохромные и не очень оживляют. Многие современные GUI-структуры предоставляют тематические виджеты и имеют анимационные эффекты перемещения / размера / показа / скрытия, часто бесплатно.
Графика. Консольные приложения иногда используют ASCII-графику для диаграмм, но приложение с графическим интерфейсом дает вам полную графическую возможность. Прекрасное искусство тоже может иметь большое значение.
источник
Для меня это было бы привыканием к программированию на основе событий. Это все еще может применяться к консольному программному обеспечению, но я считаю, что оно в основном используется с GUI. Как только вы поймете это, это очень мощный инструмент.
источник
Я бы сказал, многопоточность и это связано с пользовательским интерфейсом (если вы хотите сделать неблокирующие пользовательские интерфейсы)
источник
Рассмотрение потока управления в пользовательском интерфейсе и проверка пользовательского ввода становятся очень важными.
источник
Консольная программа имеет тенденцию совершенствоваться с течением времени, в то время как программа с графическим интерфейсом имеет тенденцию быть испорченной.
источник
Обычно я думаю о консольной программе как о модели, тогда как программа с графическим интерфейсом - это View / Controller, который встраивает модель.
источник
Для меня разработка хорошего графического интерфейса всегда была более сложной, чем технические детали его реализации.
Легко сказать «сделай это простым и понятным, как Mac». Это невероятно трудно сделать таковым; всегда есть так много деталей, которые должны быть там доступны, но в то же время они должны быть вне поля зрения.
простота http://stuffthathappens.com/blog/wp-content/uploads/2008/03/simplicity.png
источник
В некоторых (многих?) Языках главное отличие для меня заключается в том, что теперь вам приходится выбирать библиотеку. При «консольном» программировании основы (и, если повезет, всем) вашего приложения используются стандартные ресурсы вашего языка. Добавляя графический интерфейс, вы можете (надеюсь) по-прежнему иметь свою «модель» в стандартных идиомах, но теперь огромная часть, «представление» будет зависеть от некоторой внешней библиотеки (и, к сожалению, вы будете придерживаться ее «навсегда»). Выбор этой библиотеки является огромной ответственностью для начинающего, как и ваш (мой) случай (не говоря уже о дополнительной кривой шага обучения).
источник