Самым большим отличием является дизайн пользовательского интерфейса. Хороший графический интерфейс может создать или сломать приложение. Поклонники Mac будут привлекать внимание к красиво оформленному графическому интерфейсу обычного приложения Mac OS X, и у них есть смысл, но это не проблема технологии - это проблема дизайна / этики / удобства использования.
Пользователь может делать все что угодно в любом порядке и в любое время, в отличие от консольной программы, в которой вы либо запрашиваете ввод, либо сообщаете ему результат. Вы не можете предполагать, что они будут следовать порядку, на который вы надеетесь, если вы не используете стиль рабочего процесса в стиле мастера.
Как уже упоминалось, события играют большую роль в этом, и вы можете получить несколько событий, пока вы обслуживаете последнее, поэтому вы не можете реально построить свое состояние на основе «текущего события». Используйте замыкания или аналогичный механизм для поддержания контекста между различными событиями. В консольном приложении ваш FSM обычно самодостаточен в цикле «получить ввод, обработать ввод, обновить вывод». В программировании с графическим интерфейсом не существует такой же структуры - «main» - это возвращаемая вещь, управляемая событиями, часто это гигантский оператор switch ().
Необходимо учитывать различные размеры / разрешения экрана и разрешить изменение размера графического интерфейса пользователя от 800x600 до максимального значения для монитора пользователя.
Вам необходимо учитывать разные стратегии ввода - мышь, клавиатура, сенсорный ввод и т. Д. Некоторые технологии предоставляются бесплатно (прокрутка колесиком мыши), другие требуют интеграции (Ink).
Доступность - GUI гораздо больше подходит для менее способных пользователей с ограниченными возможностями зрения, слуха, моторики или когнитивных способностей. Шум «дин» приятен и очевиден по сравнению с загадочным сообщением об ошибке на консоли.
Интернационализация - я предполагаю, что ваше консольное приложение только для США / ANSI, но когда вы попадаете в GUI, вы можете иметь языковые / ресурсные пакеты, которые могут быть ориентированы на другие языки и регионы без изменений в кодировке, если вы подготовились к нему из Начало. Например, в коде нет жестко закодированных языковых строк - все как поиск ресурсов.
У вас есть гораздо больше возможностей для реализации технологий - на основе веб-интерфейса, различных наборов графического интерфейса, Flash / WPF и т. Д.
Использование цвета и анимации. Консольные программы, как правило, монохромные и не очень оживляют. Многие современные GUI-структуры предоставляют тематические виджеты и имеют анимационные эффекты перемещения / размера / показа / скрытия, часто бесплатно.
Графика. Консольные приложения иногда используют ASCII-графику для диаграмм, но приложение с графическим интерфейсом дает вам полную графическую возможность. Прекрасное искусство тоже может иметь большое значение.