从基于控制台的编程过渡到基于GUI的编程时,主要区别是什么?


18

我和其他许多人一样,都是从基于控制台的(例如在终端中,而不是在Playstation中)开始编程的。但是迟早,无论您是否愿意,都需要接触基于GUI的编程。这种过渡使您需要考虑前端(以及后端)的方式发生了许多变化。

那么,从基于控制台的编程过渡到基于GUI的编程时,主要区别是什么?


1
您的意思是将Console设置为Terminal,对吗?没有控制台在游戏机..
JBRWilkinson

@JBRWilkinson:是的。我会澄清这个问题。
gablin

Answers:


18

最大的不同是UI的设计。好的GUI可以创建或破坏应用程序。Mac爱好者会注意到普通Mac OS X应用程序中设计精美的GUI,这很有意义,但这不是技术问题,而是设计/精神/可用性问题。

至于技术问题,无特殊顺序:

  1. 用户可以在任何时间以任何顺序执行他们想要的任何事情,这与控制台程序不同,在控制台程序中,您要么要求输入,要么告诉他们输出。您不能假定他们会遵循您希望的顺序,除非您强制执行工作流向导样式。

  2. 如前所述,事件在其中起着很大的作用,在为最后一个事件服务时,您可能会发生多个事件,因此您无法真正基于“当前事件”构造状态。使用闭包或类似的机制来维护不同事件之间的上下文。在控制台应用程序中,您的FSM通常围绕“获取输入,处理输入,更新输出”循环而独立。GUI编程中没有相同的结构-“ main”是可重入的事件驱动的东西,通常是硕大的switch()语句。

  3. 您需要考虑不同的屏幕尺寸/分辨率,并允许GUI从800x600调整到用户显示器的最大值。

  4. 您需要考虑不同的输入策略-鼠标,键盘,触摸等。某些技术是免费提供的(鼠标滚轮滚动),另一些则需要进行一些集成工作(墨水)。

  5. 可访问性-GUI非常适合视力,听力,运动技能或认知技能受限的能力较弱的用户。与控制台上的一个隐秘错误消息相比,“叮”声很明显。

  6. 国际化-我假设您的控制台应用程序仅是US / ANSI,但是当您进入GUI时,如果您从开始。例如,代码中没有硬编码的语言字符串-一切都作为资源查找。

  7. 您还有许多实施技术的选择-基于Web的,各种GUI套件,Flash / WPF等。

  8. 使用颜色和动画。控制台程序通常是单色的,并且没有太多动画。许多现代的GUI框架提供主题的小部件,并具有移动/大小/显示/隐藏动画效果,通常是免费的。

  9. 图形。控制台应用程序有时会使用ASCII图形进行绘制,但是GUI应用程序可为您提供完整的图形功能。可爱的艺术也可以发挥很大的作用。


1
虽然我大致了解您的观点,但我还是不同意这里的错误二分法。我的意思是,您还需要注意控制台应用程序的UI,您可以拥有基于事件的控制台应用程序,可以拥有实际上显示GUI的终端应用程序,而不仅仅是线性文本,还需要注意调整大小(以及可以使用鼠标工作),您可以制作可访问的cli应用程序,以与gui相同的方式对cli应用程序进行国际化,可以使用颜色进行动画处理。我将授予您7和9的限制。
haylem

17

对我来说,它将习惯于事件驱动的编程。它仍然可以应用于基于控制台的软件,但是我发现它主要用于GUI。一旦掌握了它,它就是一个非常强大的工具。


同意。您需要学习的事情是您的代码无法完全控制用户接下来可能要做的事情。

随着对话的开始。
Morgan Herlocker 2011年

6

我会说多线程及其与UI的关系(如果您想做非阻塞UI)


+1,因为线程处理是一个非常繁琐的技术问题。
Clement Herreman


2

控制台程序往往会随着时间的流逝而完善,而GUI程序往往会变得很复杂。


1

通常,我将基于控制台的程序视为模型,而将基于GUI的程序视为嵌入模型的视图/控制器。



0

在某些(许多?)语言中,对我而言,主要区别在于,现在您必须选择一个库。在“控制台”中对应用程序的主干(甚至更多,有些运气)进行编程会使用语言的标准资源。添加GUI后,您可以(希望)在标准习语中仍然具有“模型”,但是现在很大一部分,“视图”将取决于某些extern库(并且,希望您将“永远”坚持使用)。对于您(我)的案例(更不用说其他学习步骤曲线),对于初学者来说,选择该库是一个巨大的责任。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.