Answers:
最大的不同是UI的设计。好的GUI可以创建或破坏应用程序。Mac爱好者会注意到普通Mac OS X应用程序中设计精美的GUI,这很有意义,但这不是技术问题,而是设计/精神/可用性问题。
至于技术问题,无特殊顺序:
用户可以在任何时间以任何顺序执行他们想要的任何事情,这与控制台程序不同,在控制台程序中,您要么要求输入,要么告诉他们输出。您不能假定他们会遵循您希望的顺序,除非您强制执行工作流向导样式。
如前所述,事件在其中起着很大的作用,在为最后一个事件服务时,您可能会发生多个事件,因此您无法真正基于“当前事件”构造状态。使用闭包或类似的机制来维护不同事件之间的上下文。在控制台应用程序中,您的FSM通常围绕“获取输入,处理输入,更新输出”循环而独立。GUI编程中没有相同的结构-“ main”是可重入的事件驱动的东西,通常是硕大的switch()语句。
您需要考虑不同的屏幕尺寸/分辨率,并允许GUI从800x600调整到用户显示器的最大值。
您需要考虑不同的输入策略-鼠标,键盘,触摸等。某些技术是免费提供的(鼠标滚轮滚动),另一些则需要进行一些集成工作(墨水)。
可访问性-GUI非常适合视力,听力,运动技能或认知技能受限的能力较弱的用户。与控制台上的一个隐秘错误消息相比,“叮”声很明显。
国际化-我假设您的控制台应用程序仅是US / ANSI,但是当您进入GUI时,如果您从开始。例如,代码中没有硬编码的语言字符串-一切都作为资源查找。
您还有许多实施技术的选择-基于Web的,各种GUI套件,Flash / WPF等。
使用颜色和动画。控制台程序通常是单色的,并且没有太多动画。许多现代的GUI框架提供主题的小部件,并具有移动/大小/显示/隐藏动画效果,通常是免费的。
图形。控制台应用程序有时会使用ASCII图形进行绘制,但是GUI应用程序可为您提供完整的图形功能。可爱的艺术也可以发挥很大的作用。
对我来说,它将习惯于事件驱动的编程。它仍然可以应用于基于控制台的软件,但是我发现它主要用于GUI。一旦掌握了它,它就是一个非常强大的工具。
对我而言,设计一个好的GUI始终比实现它的技术细节更具挑战性。
很容易说“使其变得简单明了,就像Mac一样”。很难做到这一点。总会有很多细节可用,但同时,它们也不应该出现。
简单http://stuffthathappens.com/blog/wp-content/uploads/2008/03/simplicity.png