[LinuxFocus-icon]
首页  |  站点地图  |  索引  |  搜索

新闻 | 过往期刊 | 链接 | 关于LF
This document is available in: English  Castellano  ChineseGB  Deutsch  Francais  Nederlands  Turkce  

Georges Tarbouriech
by Georges Tarbouriech
<georges.t(at)linuxfocus.org>

关于作者:

Georges是一个Unix的老用户了。他喜欢GNUstep和这个优秀的结构所提供的工具。


目录:

 

Gorm and ProjectCenter,GNUstep的RAD工具

ProjectCenter and Gorm

摘要:

RAD代表应用程序快速开发(Rapid Application Development)。在80年代末,NeXTstep被发行的时候,一种令人难以置信的工具也随之诞生,它被称作InterfaceBuilder。如果与一个名为ProjectBuilder的工具一起使用,它可以快速建立图形化的应用程序。GNUstep提供了这些工具的免费版本,名为Gorm.app和ProjectCenter.app。



 

At the beginning...

从计算机以往的历史来看,程序开发是一项很富挑战性的工作。虽然那时的计算机性能很低下,但是,它们体积十分庞大。它们十分昂贵,并不是很多用户和开发者都可以如他们所希望的那样经常使用它们,因为他们必须与其他人一起分享这些设备。因此,研究者们试图找到一个方法使计算机能够在同一时间执行多个任务。很明显,他们必须设计并且创造一种编程语言,并且重视可使用机器的可怜的一点点资源。
因此,在60年代出现了很多不同种类的编程语言:LISP,FORTRAN,BASIC,Algol68,BCPL,等等。然后就是起源于BCPL语言的B语言,并且它很快发展为C语言。这最终改变了整个编程世界。
面向对象的语言(SmallTalk,Objective C,C++等)随后出现于“图形时代”。
80年代,一些计算机开始提供图形化的操作系统(Apple Macintosh,Commodore Amiga,Atari ST等)并且X Window System也在计划中。与此同时,公司还在开发基于IBM OS2的,被称作Presentation Manager的图形用户界面(GUI)。在完成这个工作之前,这个公司发布了为它的磁盘操作系统(DOS)开发的,它“自己”的GUI,名为……Windows。Windows的前两个版本几乎无法工作,但是……第三个版本奠定了它的地位,MvAI(Microsoft very Artificial Intelligence)诞生了!
那就是说,每个用户都是计算机专家。此后我们看到“优秀”的应用程序被使用Excel或者Word和Visual Basic写出来 :-(
没关系!
幸运的是,很久以前我们已经达到了上面的情形,NeXTstep诞生了,并且Interface Builder也随之诞生。这个工具使你可以很快为自己的应用程序建立GUI,并且过程十分简单。因此,这种工具流传开来。另外还有Omnis,4D,Delphi,Kylix等同类工具。其中一部分是多平台的,而大多数都只支持Windows。另外,我们应该注意到许多免费工具包都是使用使用的诸如GTK(Gimp Tool Kit)之类的体系。专有Unix系统(Proprietary Unixes)也提供这些工具。
这些工具最大的好处就是你不必为你的应用程序的所有200个窗口编写代码,而只需要编写数据处理代码。
无论你是否喜欢这些工具都不重要。开发周期很短:这的确是事实(因此才有“Rapid Application Development”这个名字)。
GNUstepGNUstep为我们提供了自由的(Free)RAD工具。它们被称作Gorm和ProjectCenter。当然,这些工具还十分“年轻”,但是它们的确能够很好的运行。让我们来了解一下它们。

 

GNUstep

要想能够使用Gorm和ProjectCenter,你需要安装GNUstep。如何安装GNUstep并不在本文讨论的范围之内。你可以在GNUstep的网站找到你所需要的所有东西,包括源代码(Source Code),HOWTO,指南,等等。
你还可以参考下面的文档:GNUstep, the open source OpenStepGNUMail.app, the portability evidence
本文的实验是在FreeBSD 4.7+WindowMaker 0.80.1下,使用gnustep-make-1.5.0,gnustep-base-1.5.0, gnustep-gui-0.8.2和gnustep-back-0.8.2进行的。最后一个是最新的GNUstep的不稳定版本。如果你愿意,你也可以使用稳定版本。最后,我们使用了gcc编译器版本3.0.4,但这并不是最低要求。

 

Gorm.app

Gorm代表图形对象关系模板(Graphic Object Relationship Modeler或者可能是GNUstep Object Relationship Modeler,就像它的README文件所说的)。它是上面提到的NeXTstep Interface Builder(或者现在的MacOS X)的一个克隆。
Gorm是Richard Frith-Macdonald的作品,它现在的版本是0.1.9。更新的CVS预览版可以在http://savannah.gnu.org/projects/gnustep找到。
你可以从GNUstep的站点下载最新版本。
Gorm(还有Interface Builder)的理念是为用户提供调色板中的对象并将它们拖曳到空窗口中以设计你的应用程序的图形界面。
这些对象包括按钮,文本框,检验栏,面板,等。也就是说包括所有你可以加入窗口而使它对于用户更友好的东西。另外,你可以使用检查程序(Inspectors)更改它们。从检查程序(Inspectors)中,你可以更改选定对象的属性,连接定义,尺寸,帮助文档以及操作组(Manipulate Classes)。在创建了组之后,你可以为这个对象加入出口(Outlets)和行为关联。
下面,以这个组为例进行说明,这将在Gorm主窗口中创建一个新的目标,并且你可以将出口(Outlets)和行为关联到相应的部分。你只需要将鼠标从实例拖曳到选择的目标中来关联出口,将鼠标从目标拖曳到实例中来关联行为。最后,创建组源文件的骨架,然后你就完成了。后面还有更多的介绍。 Next you instantiate the class, what creates a new object (the instance) in the Gorm main window, and you connect the outlets and the actions to the corresponding components. You do this just by dragging the mouse from the instance to the selected object to connect outlets and from the object to the instance to connect actions. Last, you create the skeleton of the class source files, and you're done. More on this later.

 

ProjectCenter.app

ProjectCenter,就像它的名字所暗示的,是一个工程的“心脏”。它是NeXTstep和Mac OS X下的Project Builder的克隆。
ProjectCenter是Philippe C.D.Robert的作品,它的最新版本是0.3.0。跟Gorm一样,你可以从GNUstep的网站的Developer区下载它。当然,你可以获取它最新的CVS预览版:我们在本文中就是使用的它,版本号是0.3.1。
在ProjectCenter中,你可以创建一个工程,以及它的界面(用Gorm),编写它的源代码;你可以编译并且运行它(调试功能暂时还不能使用)。总而言之,你可以管理你的工程所必须的所有资源:源代码,文档,库文件(Libraries),子工程(Subproject),界面,等等。
当你创建一个新的工程的时候,你可以选择它的类型。你可以在应用程序,Bundle,工具,库文件和Gorm应用程序之间进行选择。
在其他方面,ProjectCenter为你提供一个编辑器,使你能够完善Gorm框架代码(Skeleton Code)。
Gorm和ProjectCenter是如何协同工作的呢?
下面,我们更深入地用两个例子来说明这个问题。

 

一些按语

本文并不是一篇指南。本文的意图是想展示强调在GNUstep(也就是说,许多Unix平台……而且,如果你喜欢“奋斗”的话,也可以在Windows上实现)以及MacOS X上使用相同的源代码时运用这些工具所带来的的便捷。你所需要做的唯一一件事情就是设计每个平台上的界面,因为nib(InterfaceBuilder或者Gorm)文件是无法移植的(至少现在是如此)。
上面提到的《GNUMail.app》文章从用户的角度展示了它的便捷性。本文将着重于开发者的角度,仍然是讨论便捷性。这就是说,在《GNUMail.app》中我们使用了Ludovic和朋友们的作品,而本文,我们将分别从GNUstep和MacOS X创建一个GUI应用程序。
对于MacOS X和GNUstep,有很多有用的指南。你可以从GNUstep的网站http://www.gnustep.net中找到绝大多数关于GNUstep的文章,下面,我们将提到它们中的一部分。
- An application using Gorm and ProjectCenter by Pierre-Yves Rivaille.
- The Nicola Pero's tutorial page
- 一篇比较老的关于如何制作HTML编辑器的指南: http://stepwise.com/Articles/Technical/HTMLEditor/
为了学到更多的东西,你还需要核对GNUstep应用程序(Gorm,ProjectCenter,GNUMail,GWorkspace等)的源代码,nib文件,等,当然还有gnustep-examples。

 

仅仅称它为“简易编辑器”

在网上众多的MacOS X下的InterfaceBuilder的指南中,我们将在第一个例子中使用以下这些: http://www.macdevcenter.com/pub/a/mac/2001/05/18/cocoa.html. 这篇文章的作者,Mike Beam撰写了许多更为经典的指南,在http://www.macdevcenter.com/pub/ct/37可以找到。
为什么选择这篇文章?因为它为你提供了一个可以工作的文本编辑器,而不需要你另外增加额外的任何代码。这显示出了这些开发工具的实力,无论它们在MacOS X下还是在GNUstep下运行。
我们使用GNUstep下的ProjectCenter.app和Gorm.app创建了一个非常简单的文本编辑器,它能够进行剪切、复制和粘贴。很明显地,你无法保存你的文档:记住,我们并不为它加入任何代码。使用MacOS X下的ProjectCenter.app和Gorm.app也能达到相同的目的。很明显地,我们需要做很多工作来改进这个文本编辑器,并且,我们将它作为一个练习留给读者。再一次强调,本文并不是一篇指南。
下面,我们开始吧。

 

在GNUstep下

打开ProjectCenter.app并且创建一个新工程,命名为Editor。在保存它之前,在窗口顶端选择一个Gorm应用程序工程。这将为你在ProjectCenter的左栏提供一个界面主题。
点选Interfaces显示Editor.gorm。双击Editor.gorm,打开Gorm.app。选择默认的窗口(MyWindow),然后选择工具检察员(Inspector)在属性中将名称更改为Editor
在调色板中,将一个TextView拖放到Editor窗口中。TextView是被选的调色板窗口中最右边的图标中最大的那个。调整这个对象的大小,直到它充满窗口,然后你就完成这一步了。
(当TextView被选中时)再使用一次GormInternalViewEditor检察员(Inspector),选择Size并且更改它的值使它们与Editor窗口的大小相符。后面的工作也以相同的方式进行,也就是选择窗口,并且在GormNSWindow检察员(Inspector)中检查它的大小。如果你没有更改X和Y的值,无论你是否怎样窗口大小你都将无法使用编辑器的所有宽度。
在Gorm的Document菜单中保存所有工作,然后退出到ProjectCenter。选择Build图标并且在第二行点选新建图标。如果你为编译器、调试器等定义了正确的参数,所有一切应该进行得十分顺利。比如,在FreeBSD下,你必须点选ProjectCenter的Settings图标,将make改为gmake(要包括路径名)。还要检查ProjectCenter中的Preferences菜单中的路径名。
如果编译成功(应该是这样),只需要对Run进行同样的工作,你就可以看见Editor应用程序了。你现在可以使用它,写作、剪切、粘贴等。明显地,你可以使用openapp命令来重新启动它。
这将花费多少时间?嗯……我只能说,几分钟。

下面是在开发过程中应该看到的图象:

EdDev

以及最后作为成品的应用程序:

Editor

 

在MacOS X下

你要做的跟上面的几乎相同,因此没什么需要说的。下面是在设计GUI时应该看到的:

EdDev

这是编辑器“工作”时的情况:

Editor

 

创建一个可以真正运行的应用程序

这次我们选择了Mike Beam的另外一个例子。这是一个可以真正运行的应用程序,可以处理数据:一个地址簿。我们建议你阅读Mike关于地址簿的指南(象其他的一样)以了解这个“东西”是怎样工作的。另外,还得看看这个指南的目录,因为Mike提供了开发过程中的不同步骤以及进行改进后的应用程序。
我们再一次在GNUstep和MacOS X创建并且运行这个程序。

 

在GNUstep下

跟你为Editor所做的一样,启动ProjectCenter.app。选择一个Gorm应用程序并命名为AddressBook。从ProjectCenter中双击Interfaces -> AddressBook.gorm。从调色板拖放一个TableView到默认窗口。换句话说,就是象在MacOS X下那样跟着Mike的指南做。你必须适应一些东西,因为它们在Gorm和InterfaceBuilder下的运行有所不同。
比如,TableView中一列的数目无法被Gorm的Attributes Inspector定义。为了简化工作,仅仅将一列数目复制并且粘贴到它下面的一列中来得到所必须的数目(象这里的4)。你最后应该得到象这样的一些东西:

ABdev


当你完成它以后,保存所有工作,然后退回到ProjectCenter来书写或者修改代码。万一你犯了某些错误,Mike为你提供了完整的应用程序源代码。如果你下载了它,将它复制并粘贴到Gorm生成的Controller.m或者Controller.h文件中就足够了。不要包括Cocoa.h,因为它是为MacOS X保留的。另外,你应该保留Gorm“写”的框架并且做一点适当的修改。比如,在Controller.h和Controller.m中用IBAction代替void。将IBOutlet添加到Controller.h的outlets id前。
无论如何,如果你愿意,你可以保留所有提供的代码:仅仅用#import <AppKit/AppKit.h>替换cocoa inclusion。现在,你可以编译并且运行这个应用程序了。
下面请看:你可以开始运行你的新地址簿了。
下面是你应该看到的地址簿:

AddressBook

 

在MacOS X下

Mike Beam完成了所有工作:我还可以做什么?

下面是在MacOS X下进行开发的屏幕截图:

ABdev

下面是最终得到的应用程序:

AddressBook


如何呢?你会花费一些时间来决定GUI,并且所有描绘代码只有2000字节多一点。不太坏,不是么?
在强调一次,虽然还有很多可以改进的地方但是就这样它已经可以工作了!现在,你可以更改代码以获得一个更好的地址簿……

 

GNUstep和MacOS X

很明显,GNUstep开发工具并不可能比Apple的更先进。Apple和NeXT代表了数以千计的开发者15年的经验。GNUstep是一些得以其他工作为生的独立开发者的(免费)作品。因此,当发现在InterfaceBuilder中有比Gorm中更多的可用组(Available Classes)时,不要感到奇怪。记住,Gorm的版本是0.1.9(或者0.2.0)。
另外,我们尝试了一个比较“困难”的办法。我们从OS X移植到GNUstep。由于我们刚才提到的两个开发工具之间的差距,另外的办法可能更简单。
比如,在更先进的Apple开发工具出现之后,移植在MacOS X 10.2下开发的应用程序将更为困难。就像刚才说的那样,它有更多的新的以及更复杂的组。
无论如何,这些工具都依赖于相同的体系,无论它们工作于GNUstep下还是MacOS X下……并且GNUstep每天都在改进。有件事情看上去对于我来说很有利:GNUstep人(译注:这里指GNUstep的用户和开发者)真的在一起工作。当项目有关联时,他们相互帮助,并且都为GNUstep核心部分的发展作出贡献。这是我所喜爱的自由软件的工作方式。我为Mr.Fedor和各位朋友这样的行为表示祝贺。

 

展望……

本文的目的是展示GNUstep “RAD”工具Gorm.app和ProjectCenter.app的强大力量。尽管它们十分“年轻”,它们的确能够帮助你轻松地开发好的应用程序。
此外,这些工具提供了十分舒适且有效的工作方式。Objective C是个十分简洁的语言,并且,在我的印象中在某些方面比C++要简单一些(我知道,我曾经这样说过!)。它允许你在保证体积小巧的同时设计美观的应用程序(嗯……这是一个感觉问题,但是我的确喜欢这样的外观和感觉)。
我必须承认我一直没有从我第一次见到NeXT机器的震惊中恢复过来。事实上Apple发行的现代版NeXTstep使我很高兴。这也是为什么我十分喜欢如GNUstep和WindowMaker之类的计划的原因。无路如何,虽然我热爱自由软件,但是我并非一个“狂热者”,因此我并不反对专有软件(或许对某个编辑器有一点点……但是,仅仅是一点点!)。
GNUstep可以从Apple受益……而Apple也可以从GNUstep受益。GNUstep并不是Apple的竞争者,它是一个自由软件。据我所知,自由软件在OS X中被广泛应用。也就是说为Apple带来更多的自由软件并不是一件坏事。Ludovic和各位朋友为GNUMail.app所做的事情是一个很好的例子。
“我有一个梦想”……Apple正在为GNUstep提供它的大多数开发工具的源代码。GNUstep和Apple的开发者们一起工作来为Unix用户提供更多的优秀的应用程序。慢慢的,人们会发现他们可以脱离Windows……
很不幸,这仅仅是一个梦想……:)
无论如何,如果你不了解GNUstep和它的应用程序,请尝试一下它们。记住,GNUstep是一个框架(Framework),而工具,比如Gorm和ProjectCenter为你提供你所需要创建或者创造的所有东西。换句话说,在得到一些信息之后,你可以开发出一些现在看上去很难的“产品”:Windows应用程序的克隆!
我们生活在一个伟大的时代! We are living in a great time !

 

致谢……

感谢GNUstep计划人员:A.Fedor,N.Pero,P.Y.Rivaille,N.Roard,L.Marcotte,R.Frith-Macdonald,P.C.D.Robert, E.Sersale,A.Froloff,F.Kiefer,M.Viviani,M.Guesdon还有所有我没有想起来的为这个优秀的框架(Framework)和应用程序工作的人。
感谢WindowMaker计划人员:A.Kojima,D.Pascu以及那些将一个免费的NeXTstep带到X界面中来的朋友。
感谢J.M.Hullot和B.Serlet开发了InterfaceBuilder。
感谢“Steve Jobs INC.”为我们带来了NeXT,NeXTstep和MacOS X。
感谢所有这里没有提到却又为我们的工作作出贡献的人。  

对这篇文章发表评论

每篇文章都有各自的反馈页面。在这个页面里,您可以提交评论,也可以查看其他读者的评论:
 反馈页面 

主页由LinuxFocus编辑组维护
© Georges Tarbouriech, FDL
LinuxFocus.org

点击这里向LinuxFocus报告错误或提出意见
翻译信息:
en --> -- : Georges Tarbouriech <georges.t(at)linuxfocus.org>
en --> zh: Zer4tul <zer4tul(at)163.com>

2003-04-06, generated by lfparser version 2.25