《Java编程思想》读书笔记(1)

时间:2021-11-19 02:00:27

14章开篇的一句话:设计的宗旨是"能轻松完成简单的任务,有办法完成复杂的任务"。一句发人深省的话。恩,怎么理解哪,我是这样认为的:软件应该能够满足用户的真实需求,为用户完成业务提供足够的支持和帮助,并且这种支持对用户来说,应当是:易于理解,易于使用,高效而便捷的。用户面对的实际业务是多样性的,对于简单的业务的支持是软件所必需的,而能够为用户完成各种复杂的业务需求提供强大的支持能力则是软件能够出色的根本。这让我想起了现下的许多软件,其开发者不把心思放在对用户的实际需求的分析和获取上,而只是花心思去设计花哨的界面,结果当然只是一个个失败的项目了。简单的一句话,却道出了软件的根本-----软件是用来干什么的?可我们在实际中却往往忽视了其核心---用户的需求。试想,如果你连用户的实际需求都没把握住,那么你设计出来的软件 能轻松完成简单的任务,有办法完成复杂的任务吗?那么这样的软件就算外观再漂亮,又有何用处?需求才是王道!!!

 

Java1.0开发的AWT(Abstract Window Toolkit)可以说是一个失败的GUI类库,用它开发出来的界面,在各个平台上看上去都很平庸,并且它的功能也非常有限;只能用四种字体,不能访问操作系统所提供的更复杂的GUI元素,更让人惊奇的是,居然它使用的是非面向对象的编程模式。我想也许是为了快速吸引用户,sun在没有进行充分的设计的情况下就推出了这个GUI类库,哎,在市场的面前,技术也不得不低下它高昂的头颅吧。

 

在接下来的java1.1中,AWT有了一些进步,采用了面向对象的解决方案,更吸引人的是,它引入了javaBean. javaBean是一种为可视编程环境服务的(visual programming environment)组件编程模式(当然也有非可视的javaBean,象在j2ee中使用的)。但11还是没有能让人满意,最终java2中用java Foundation Classes (JFC)全面替换了Java 1.0 AWTJFCGUI部分被称为"Swing“。这是一组易学易用的,能拖放的(当然也可以手写代码)JavaBean,用它创建的GUI还是能令人满意的。而现在,随着Eclipse的发展与壮大,人们又重新审视AWTSwing的优缺点,提出了SWT。不过不论怎样,每种技术都有其存在的合理性,并不能武断地说哪个类库更好,但目前看来SWT应该是发展的大趋势。

 

就我个人的理解,AWT处理用户界面元素的方式是把要建立的元素指派给目标运行平台上自带的GUI工具包,就比如说,在一个窗口中放一个文本框,实际上是由一个隐藏的底层文本框来进行文本处理的。这样开发出来的应用程序就可以运行在各个平台上,这也是Sun公司引以为豪的“Write once,run everywhere‘。这种思路对于简单的应用程序是十分有效的,但想用它来编写依赖于各个平台自带的GUI工具,却有高度的可移植性的GUI应用程序是比较困难的。因为用户界面元素在各个不同平台上表现出来的外观和行为可能会有一些不同之处,这样就会给用户带来不一致的用户体验,再者,考虑到各个平台的差异性以及可移植性的需要,就不得不对基于本地平台的对等实体的可移植库进行限制。除次以外,不同平台上的AWT库中有各种不同的bug,这就出现了一句名言来形容java---“write once,debug everywhere);

 

而它的后继者Swing的产生历史是这样的:1996年、网景创建了个称之为IFC(Internet Foundation C1asses)GUI类,它采用了个与AWT截然不同的方法。按钮、菜单等等诸如此类的用户界面元素都被绘入空白窗口。也就是说用户界面元素是通过纯java代码绘制出来的,而不是采用本地平台上的对等实体来进行处理。当然,完整的JFC并不仅仅只有一个Swing GUI工具包,它还包括一个访问API,一个2D API,一个拖放API.Swing并没有替代AWt,而只是为我们提供了功能更加强大的用户界面组件。它使用的还是1.1 的事件处理模式。也由于Swing是自己绘制用户界面元素,因此效率肯定要比AWT低一些,但对于现在的机器来说,这点是可以不予考虑的,而且,也是考虑到效率的原因,因此Swing是轻量级的组件。相反,Swing的优点让人无法抗拒的:1)它提供了更加丰富,方便的用户界面元素。2)它通过自己绘制用户界面元素,不依赖于本地平台,因此减少了与平台有关的错误,这些错误在平台移植时经常出现,为了实现跨平台移植,Swing全部是采用java写的。3)自己绘制的用户界面元素给用户一致的用户体验。但这一点也带来了一个缺点,使得用户界面元素可能和本地平台上自带的控件不一致,使用户迷惑。Swing还提供一种更前卫的,被称为"pluggable look and feel(可插接式外观)"的功能,也就是说用户界面的外观可以根据操作系统或用户的习惯动态地改变。你甚至可以自己发明一套外观(当然是很难的)。而sun公司为了解决这个毛病,开发了一个与平台无关的外观“Metal”

 

    总而言之,SwingAWT比起来,更加的健壮,可移植性更好,更易于使用(这不就是用户所想要的吗?呵呵)。至于现在兴起的SWT,由于对其了解还不多,在此就不多罗嗦了。而书中提到的,"GUI builders" (可视化编程环境)只是一个"社交"的层面。当你用图形工具把组件放到窗体上的时候,实际上是GUI builder在调用JavaBeansSwing为你编写代码。这一点应该就是IDE 的实现方式吧,那是不是说:我在设计器里拖Button这样的可视化组件,IDE就通过调用一些相关的非可视化组件来产生代码的呢?很好奇,有机会去看看开源IDE的实现方式。。。。