账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为什么GUI设计这么难?
    79
    0

    我不认为自己智商有问题,有问题的是各种GUI,包括Java Swing以及所有的语言GUI库。这样,打击面似乎有点广。

    我研究过Delphi,JavaSwing,WIn32API,MFC扫过一些程序,Python tkinter。即使是实现一些常见的功能都非常困难,不是做不到,而是缺乏系统的说明书,只能搜索相关键词,找相关的代码试验,某个类、方法的具体意义。

    没错,就是乱试一通。网上有些蠢猪说你不会看文档吗?首先,英文的,大多看不懂或者一知半解,多数靠猜,我也不相信,有谁真能掌握所有控件灵活运用,因为目前GUI的设计确实反人类的,充斥着一堆垃圾设计。其次,文档太多,打印出来可能是一部字典那么厚,有哪个小学生造句需要通读字典呢?

    虽然现在各种GUI库,各种系统、程序设计语言,但是毫不客气的说,它们都是垃圾;当然,那些用这些垃圾制造出实用、精美的软件的程序设计者是可敬的。

    希望将来会出现这样一种GUI库,只需要掌握很少的概念 -- 比如某种组件(类),就能掌握该GUI的精髓,用户只要掌握不超过10个最多几十个函数就能组合出各种软件界面。

    以我的标准,现在的GUI库确实都是垃圾,说明文档更是垃圾。我学的最好GUI,居然是html、CSS、JavaScript这一套网页设计标准。

    我寻思着,把html这一套东西用于桌面软件开发难道是一件很难或者不可能的事情吗?理想情况下,我们把设计好的网页(由html css JavaSCript完成),然后在某个IDE里打开这这些文件,然后点击一个按钮,然后,原生的exe生成了,其显示和用浏览器打开一样!多么惬意!

    只有这种GUI库或者叫框架,才是合格、勉强能算优秀的框架。

    html、css、javascript之所以相对优秀,因为这三者是将页面排版和用户程序交互分离的开来,html负责排版、javascript则用于用户和各种控件的交互处理,而css似乎是用于自定义标签。

    将来的GUI框架、库都应该有类似这样一套哲学:排版和交互的分离,Python等语言有流程、循环等控制结构,用于处理用户和程序的互动(鼠标、键盘操作),而页面布局,则应该专门设计一套类似html标签性质的东西。

    实际上,这一套东西,并不是没有。Delphi里的窗体文件是类似的作用,但是很少用户懂得编辑窗体文件,毕竟,delphi为快速设计窗体开发,用户通过鼠标拖放控件来设计窗体。几乎没有人会教你直接编辑窗体文件来设计窗体。

    很可惜,GUI设计是如此之难,而网页排版似乎又很容易,这很奇怪,不是吗?

    上面说的把网页设计直接编译成exe过于理想化,但是,把html标签用到Java、C++、Python等各种程序设计环境中,似乎是可以做到的。

    我希望,将来的GUI库,设计者,要认真严肃的考虑这个问题,就是直接支持html标签,或者支持其中的一个子集。html也是不断发展变化的。

    总之,我这篇文章的意思其实前人都提过了,就是把排版(窗体界面设计)和程序设计(交互、功能)分离开来。

    各种程序语言,并非用来设计排版的,而目前的GUI系统,以Swing为例,用了一个很原始的layout对象来定义“排版对象”不伦不类,勉强能用。

    将来的GUI框架,首相应该开门见山,告诉你,我们这一套框架有两个组成部分:

    一、窗体排版,实用类似html标签的方式。

    二、交互设计。使用各种带if while等流程、过程式设计的程序设计语言。我不反对类、对象的使用,但是用户设计窗体界面时,不应该考虑这些问题。

    总之,面向对象是个毒瘤,为什么GUI设计会如此之难,因为它们都被所谓的面向对象设计方法给毒害太深。也许是因为,它们没有给html这种控制页面起一个很好听的方法或者名字,才抛弃了这种优秀的设计,转而去搞那些不伦不类的垃圾。

    我鼓励程序员制造优秀的GUI框架,因为目前的GUI框架,可能上百上千,但没一个能用的,只要记住一条,设计好排版系统,也就是设计好类似html这样的标签控制,你可以直接使用html标签,如果你能设计一套更为简单易懂的排版,我也支持 --- 但是出于现实考虑,大量懂得网页排版的前端,我认为直接使用html的一个子集作为GUI库的窗体排版(布局)比较好。

    为什么BS架构比CS架构更为流行?也许是因为html比较人性化。倘若我上面所说类似html排版的GUI库能出现,那时候,使用用C/++或者Java做CS架构会更多。

    GUI库,需要的并不是面向对象(封装、继承、多态),类似C这样的过程式程序设计语言,已经足够,GUI库需要的是一个简单易懂的窗体排版系统!

    所以,我说,目前所有的GUI库,都是垃圾。其中,delphi的窗体文件设计、QT的QML勉强算是摸到门路了,但是还是太复杂,而且它们的目的就不对,它们是为了可视化设计,但是如果GUI设计的发展和html的发展一样,可视化设计窗体的方式将来也会消失。现在谁还用Fontpage、Dreamwaver设计网页 ?-- 这两都是所谓的所见即所得的设计软件。

    实际上,有经验的人们都知道,所谓的所见即所得,是个彻头彻尾的谎言,因为不同的电脑,显示器大小是不一样的,你所见的网页,在另一台电脑、甚至同一台电脑不同的浏览器、即使相同的浏览器、不同的分辨率都可能是不一样的。并不存在所谓的所见即所谓,这是程序员们欺骗那些眼神不好,看东西不仔细的人编出的谎言,当然,乍一看,同一个程序在不同的电脑表现差不多。

    Delphi里,几乎没有人会手动编辑窗体文件,很可惜,因为Delphi强调的是快速开发,本身就是为了鼠标拖放控件来设计窗体的,QT的QML也是这样。它们的理念是一种进步 -- 也就是将版面设计和交互流程分开设计。但是,它们错误的使用了所见即所得的设计方式,这是一颗毒瘤。

    正确的设计方式是:使用屏幕分辨率坐标。Java Swing Delphi、Win32API都使用屏幕左上角作为(0,0)坐标,屏幕右下角坐标则是则是你的屏幕分辨率,除此之外,html/css还是用百分比坐标控制,比如你的UI里使用一个button,你也许可以指定按钮到屏幕左边的距离占整个屏幕宽度的30%,而不是指定分辨率,也许百分比的概念可能比屏幕分辨率更容易理解,这不一定。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 高傲女人本性 普通会员 1楼

      GUI设计之所以难,主要是因为GUI设计涉及到的内容比较多,包括用户界面设计、交互设计、计算机视觉等,这些都需要花费大量的时间和精力去考虑和实现。此外,GUI设计还要考虑到用户体验、可维护性等因素,因此需要有丰富的知识和经验来完成。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部