`
saybody
  • 浏览: 919253 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

GUI的開發瓶頸

阅读更多

文 / 蔡學鏞

年初和某家IT雜誌社編輯一同參加一場某軟體廠商辦的會議。主講人在台上展示使用他們技術開發出來的漂亮介面,相當吸引人。編輯看了之後,頗為讚許,轉身對我說:這東西很棒吧!我澆了她一盆冷水:要做到這樣的GUI(Graphical User Interface)效果,複雜度相當高,背後投入的資源相當多,可不是一般小公司做得出來的。對於GUI程式設計,我的考量點一直都不是「能不能做得到」,而是「容易做得到嗎」。

對許多人來說,學習一個新的編程語言不難,只要學會數十個關鍵字(keyword)的用法,瞭解程式模組、迴圈、分支、物件導向的語法,就可以開始寫程式了。語言本身雖然不困難,真正難的地方在各種領域的API,其中以GUI的API最複雜。

我有資格這麼說,因為在我的Java狂熱期,我幾乎學過用過所有官方的Java API,其中最複雜的不是EJB,而是Java Swing(Java的GUI API)。我將所有的Java Swing原文書都買回家(其中許多本都超過一千頁),一本接著一本詳細閱讀,也寫了不少程式,幾年之後,才能對它「完全」運用自如。這段期間我也花了不少精神在Java 2D API與Java 3D API上。

在Java之前,我學過Win32 GDI、MFC、OWL;在Java之後,我用過WinForms、GDI+,也接觸過Flex、WPF,它們全都是複雜的GUI API。(但還是比不上Java Swing的複雜。)

如果像我這樣喜歡GUI程式設計的人,都覺得GUI API太複雜,對於那些沒有投入許多時間到GUI的人來說,GUI根本就是開發軟體的一大障礙。

據我所知,許多學術領域的專家或教授,會使用各種編程語言,將自己的研究結果,寫成特殊領域的程式,例如氣象、水利、天文、自然語言處理...等。但是這些程式往往只有文字的輸入和輸出。他們很希望讓程式具有美觀的GUI介面,但是這部分他們做不來,正是因為大多數的GUI程式設計門檻都很高。

難道GUI程式設計都沒有什麼進化嗎?勉強算是有進化一點點。近十年來,在GUI設計上,我們經歷過三個主流階段,分別是:(1) C語言介面;(2) 元件化;(3) XML化。

在C語言介面的時期,任何動作都是透過C的函數呼叫,程式寫起來相當囉唆,也大量使用函式指標當作回呼函式(call-back)。

在「元件化」的時代,我們用OOP語言(C++、Java、C#)編寫GUI。通常我們會透過雙向(2-way)GUI設計工具(例如JBuilder、Visual Studio)的協助,讓我們可以用拖曳(drag-n-drop)的方式,產生出程式碼。對於這種自動產生出來的程式碼,我們最好不要徒手修改,否則可能會造成雙向GUI設計工具無法瞭解程式碼。因此,像JBuilder這樣的工具會將產生的程式碼獨立於建構子(constructor)之外,放在一個專門的jbInit()方法內,並希望編程員不要徒手修改此方法。

上面這種作法的缺點是,將GUI設計和程式邏輯混雜在一起。而GUI設計和程式設計是不同的專業領域,最好分開由各自的專家負責。除此之外,GUI的設計也比較偏宣告(declarative)的方式,而不是主流語言使用的命令(imperative)方式。

於是在「XML化」的時代,WPF和Flex的作法,允許我們將GUI設計的部分獨立出來,使用XML來描述(而不是使用編程語言)。XML可以當作描述語言,但有一些嚴重的缺點:(1) XML檔案不適合徒手編寫,最好要有工具的協助;(2) XML冗長,檔案大小暴增。 (3) XML缺乏彈性,XML適合用來描述結構性的資料,但不適合描述以外的東西。

上述進化過程,廠商都是利用「GUI設計工具」來簡化GUI開發過程的複雜度,而不是從簡化GUI API著手。因此,如果沒有「GUI設計工具」可用的話,根本沒有人有能力寫出像樣的GUI程式。加上主流GUI API不斷地改朝換代(例如MFC -> WinForms -> WPF),更是讓我們疲於奔命,剛熟悉一套API,又要開始學新的API。

有些人以不變應萬變,使用像Tk這樣的GUI套件。不管什麼語言,什麼平台都可以透過橋接器使用Tk。但是像Tk這樣的GUI套件往往太僵化,且不美觀,做出來的GUI效果並不吸引人,甚至和OS的GUI差異太大,畫面看起來顯得詭異。

由於GUI API的實做和OS的關係相當密切,能跨平台的部分不多,所以許多開放源碼的語言沒有足夠的資源做一套自己的GUI API,只好橋接到像Tk這樣的GUI套件,儘管不合適,也只好將就著使用。以Erlang來說,至今還沒有一套令人滿意的GUI API可用,於是內定使用Tk,但其實Erlang和Tk的設計理念根本是不搭的。

不管使用什麼語言,只要需要開發GUI,就會讓我頭痛一陣子。而短期內,這似乎沒有解藥。

分享到:
评论

相关推荐

    基于PDA上嵌入式Linux的GUI应用程序的开发

    11. **性能优化**:PDA的计算能力相对较弱,因此优化代码执行效率、减少内存占用和降低功耗是GUI开发的重点。 通过以上这些知识点的学习和实践,开发者可以创建出高效、用户友好的PDA GUI应用程序,充分利用嵌入式...

    UIGUI使用手册

    **三、UIGUI开发流程** 1. **设计界面**: 利用UIGUI提供的设计工具或XML描述文件,规划和设计用户界面的布局和样式。 2. **编写代码**: 将设计转换为C/C++代码,实现控件的逻辑功能。 3. **编译链接**: 将编写的...

    gui class 查看工具

    - **辅助调试和优化**:对于开发者而言,GUI Class 查看工具可以帮助他们在开发过程中快速定位问题,比如查找特定类型的控件、分析性能瓶颈等。 #### 3. 应用场景示例 - **开发阶段**:在软件开发初期,设计师和...

    Python GUI Programming Cookbook

    - 设计模式在GUI开发中的运用 3. **Python GUI库详解** - Tkinter库的安装与使用 - PyQt库的核心组件及其功能 - wxPython的特点及优势 4. **高级GUI设计技巧** - 复杂窗口的设计与实现 - 动态界面元素的创建...

    基于EasyandFastGUI控件库进行的二次封装,便于快速的GUI程序开发,附件包括程序全部源代码和课程示例的代码.zip

    在IT领域,GUI(图形用户界面)程序的开发是至关重要的,它使用户能够通过图形化的方式与软件交互。在C#编程语言中,有很多库和框架可以...对于想要提升C# GUI开发技能的程序员来说,这是一个非常有价值的资料集合。

    jd-GUI jdeclipse

    另一方面,jdeclipse 是jd-GUI的扩展,它是一款Eclipse集成开发环境(IDE)的插件。Eclipse是Java开发者广泛使用的IDE之一,jdeclipse插件将jd-GUI的功能无缝集成到Eclipse中,允许开发者在编辑器内直接查看类的源...

    uC/GUI V5.46 用户手册英文版

    ### uC/GUI V5.46 用户手册关键知识点...通过以上内容的详细介绍,我们可以看出uC/GUI V5.46不仅是一款功能强大且易于使用的GUI开发工具,而且具有很高的灵活性和扩展性,非常适合于嵌入式系统领域内的GUI开发工作。

    MATLAB——对GUI进行编译

    `deploytool`在老版本中用于编译传统GUI,而`appdesigner`适用于新式的APP开发。编译步骤包括: - 打开`deploytool`,选择"Stand-Alone Application"。 - 选择要编译的GUI文件(.fig或.app)。 - 指定输出路径和...

    GUI简易写字板程序

    通过完成GUI简易写字板程序的设计与实现,学生不仅能够加深对GUI编程的理解,还能提高解决问题的能力,尤其是在遇到编码错误、布局问题或性能瓶颈时。此外,该项目还能帮助学生熟悉软件工程的标准流程,包括需求分析...

    jd-gui 反编译class文件 查看java源码的必备工具

    在本文中,我们将深入探讨jd-gui的使用方法、功能及其在Java开发中的重要性。 首先,jd-gui是一款图形化界面的工具,它的主要功能是将Java字节码(.class)转换回可读的Java源代码(.java)。这个过程称为反编译,...

    apktool-jdgui

    4. **性能优化**:通过查看反编译的代码,开发者可以找出性能瓶颈,优化算法和数据结构,提升应用性能。 5. **资源提取**:可以方便地提取APK中的图片、音频、布局文件等资源,用于个人项目或学习参考。 尽管...

    perl gui 日志分析工具

    Perl GUI日志分析工具是一款基于Perl编程语言开发的图形用户界面应用,专为解析和分析日志文件设计。它能够帮助用户快速理解日志数据,提取关键信息,从而进行故障排查、性能监控或数据分析。这款工具包含源码,使得...

    jd_gui_windows_1.6.6.zip

    标题中的"jd_gui_windows_1.6.6.zip"表明这是一个适用于Windows操作系统的JD-GUI版本,版本号为1.6.6,而描述中列出了从JDK 1.1.8到JDK 10.0.2的多个Java开发工具包版本,这些是JD-GUI可以支持和应用于分析的环境。...

    jd-gui-windows-1.6.6.rar

    Java反编译工具JD-GUI是一款在Windows平台上...总之,JD-GUI作为一款强大的开发工具,对于Java开发者来说是不可或缺的辅助软件,尤其在面对没有源代码的情况下,它能够提供宝贵的洞察力,帮助开发者解决各种开发问题。

    mysql gui 工具

    MySQL GUI工具是数据库管理员和开发人员用来更直观、便捷地管理MySQL数据库的强大工具。这些工具提供了图形化的用户界面,使得数据库的创建、查询、备份、优化等任务变得更加简单,无需直接编写SQL命令行。在本篇...

    eclipse GUI插件

    Eclipse GUI插件是开发人员在使用Eclipse集成开发环境时增强其图形用户界面功能的工具。这些插件能够提供更高效、更直观的工作环境,帮助程序员更好地管理和操作代码。Eclipse作为一个高度可扩展的平台,其核心特性...

    spatialite_gui-4.3.0a-win-amd64.7z

    6. **性能优化**:在数据库设计和查询优化方面,Spatialite GUI提供了性能监控和调优工具,可以帮助用户识别瓶颈,提升数据处理速度。 总的来说,Spatialite GUI 4.3.0a-win-amd64是Windows平台上的一个强大工具,...

    mysql工具GUI

    MySQL图形用户界面(GUI)工具是数据库管理员和开发人员用于交互式管理MySQL数据库的重要软件。在初学者的旅程中,掌握这些工具可以帮助更直观、高效地执行常见的数据库操作,如查询、创建表、备份和恢复数据等。在...

    uC_GUI应用笔记

    通过上述分析,我们可以看出uC_GUI虽然功能强大且易于移植,但在实际应用过程中仍需针对具体平台进行定制化开发。随着更多高级主题的加入,uC_GUI的应用范围将进一步扩大。对于有兴趣的开发者而言,深入了解并掌握uC...

Global site tag (gtag.js) - Google Analytics