面向对象软件开发教程.docx
《面向对象软件开发教程.docx》由会员分享,可在线阅读,更多相关《面向对象软件开发教程.docx(15页珍藏版)》请在冰豆网上搜索。
面向对象软件开发教程
软件是在代码之外发生的一切事情。
第11章
如何继续学习过程
你将从本章学到什么?
●两千年后(P2K)的软件环境是什么样的?
●P2K软件环境中的技术和技能是什么?
●有关P2K技能和技术有哪些概述性的资源?
●软件专家在面向对象项目中充当什么角色/职位?
●如何继续面向对象的学习过程?
为什么需要阅读本章?
你的技能,以及如何使用它们,是能否成为成功的软件专家的重要决定性因素。
通过阅读本书,你会获得学习对象技术和技巧所需的基本知识,本章也给你提供了继续进一步学习过程的建议。
至此,你已经了解了面向对象的全部内容,现在你已经是一名准备开发大型、关键性任务软件的对象专家。
好吧,现在你还不全是。
实际上,你已经掌握了一些有用的概念和技能,也明白了它们如何一起使用,在浏览复习题以及案例学习的过程中,你已经使用了它们。
目前你正处在有利地位,可以继续你的学习过程,这个过程将很可能贯穿你的整个职业生涯。
本章给出了对软件业目前的状况以及将来的发展方向的见解,在接下来的几年中将会需要什么样的技能,要如何才能获得这些技能。
11.1P2K环境
在你的整个职业生涯中一直要学习新的技能。
软件业在20世纪90年代后半期被Y2K危机严重影响了,新的开发被耽搁下来或者干脆取消,以转移资源解决Y2K危机,结果,许多企业都推迟了对采用新的技术和技能的投资。
现在Y2K危机已经过去了,我们正面对着两千年后(P2K)的软件环境,一个使用本书中描述的技术支配的环境。
在P2K环境中,你将会应用新的方法,例如面向对象的和基于组件的方法,采用迭代和增量方法的新的开发过程,像Java和CORBA这样新的技术,以及像用况建模这样新的技术。
本书概述了对象开发技术,本节也总结了用于P2K环境的关键技术和技能。
要理解P2K环境,必需考虑下面几项内容:
●新的软件策略。
●使能技术。
●领先的开发技术。
●现代软件过程。
●对象编程语言。
●如何获得P2K技能。
定义
两千年后(P2K)环境(post-2000environment):
机构在IT部门内部部署的一系列技术和技能(大部分是基于面向对象和组件技术的)。
2000年(Y2K)危机(year2000crisis):
软件组织在20世纪90年代未期要更新或替代那些使用两位数而不是四位数来存储年份的软件。
11.1.1新的软件策略
21世纪初期将会由两项关键的软件策略来统治:
企业应用集成(EAI)和电子商务。
EAI把全异的软件应用集成为一个整体以支持新的和复杂的业务过程。
中间件和组件技术,例如下面这节里描述的CORBA和兼容COM+的工具也用于支持EAI。
了解EAI的一个好去处是,也可以参考《EnterpriseApplicationIntegration》(Linthicum,2000)一书。
包装技术是《BuildingObjectApplicationsThatWork》(Ambler,1998a)一书详细讲述的主题,对于EAI的开发者来说它也是一项重要的技能。
电子商务也称为基于Internet的商务,它关注于使用电子技术支持产品销售和服务。
电子商务成功的机构有,戴尔公司(c:
\iknow\docshare\data\cur_work\))—一个计算机软硬件零售商;亚马逊(c:
\iknow\docshare\data\cur_work\))—一个销售书、录像带、音乐CD的零售商;Ebay网(c:
\iknow\docshare\data\cur_work\))—一个在线拍卖网站。
电子商务最好的资源是杂志《TheIndustryStandard》(),它以报纸和在线两种形式出版发行。
11.1.2使能技术
除了11.1.5节描述的对象编程语言外,还有好几个使能技术也是P2K环境中占主导地位的技术。
这些技术有:
●CORBA
●COM+
●EJB(企业Java组件模型)
●XML
●持久层/框架
1.CORBA(公共对象请求代理体系结构)。
CORBA是一种由对象管理组(OMG)制定的支持和维护分布式对象的一种标准结构,在20世纪80年代晚期引入。
在20世纪90年代早期,CORBA承诺要成为最好的面向对象开发的标准环境,实际上,业已证明CORBA是21世纪初中间件竞技中的一支重要力量。
学习CORBA的一个好地方是beginners.html。
2.COM+。
这是微软组件对象模型(COM)的最新体现。
COM是微软的对象链接和嵌入(OLE)以及ActiveX技术的演化,后来COM变成分布式COM(DCOM),现在变成了COM+。
COM+是一项专有方法,用于微软平台的分布式组件开发。
访问com可以得到一系列基于COM技术的白皮书、演示文稿以及案例学习的链接。
3.EJB。
EJB是一种组件结构,用于开发和部署基于组件的分布式业务应用。
遵照EJB结构编写的应用程序是可升级的、可进行事务处理的并且是多用户安全的。
这些应用程序可以编写一次,然后就部署到任意支持EJB标准的服务器平台上。
EJB让开发人员获得并使用企业类服务来创建关键任务应用。
开始学习EJB最好的地方是在线EnterpriseJavaBeans》(Roman,1999)一书。
4.可扩展标记语言(XML)。
进行数据共享的一种工业标准方法,对于EAI和电子商务来说这是一种重要的使能技术。
网站是开始学习XML最好的地方。
5.持久层。
持久层(也称做持久框架),通过映射元数据使得从永久存储(例如关系数据库)中存储、检索和删除对象得以自动化。
如果关系数据库用来存储对象,那么映射元数据会把对象的一条属性与存储对象的数据库表列联系起来。
持久层向对象隐藏了数据模式,这会大量减少持久对象所需编写的代码数量,从而增强软件的健壮性并增加开发生产力。
在《BuildingObjectApplicationsThatWork》(Ambler,1998a)一书中我详细讨论了持久层,这本书是本系列的第二本书。
你可能想下载描述持久层设计的白皮书,我已经把它放在网站/persistenceLayer.html上了。
定义
中间件(middleware):
使得软件可以部署到各不相同的硬件系统中,从而互相通信的一种技术。
对象管理组(ObjectManagementGroup,OMG):
一个工业认可的标准化实体,负责像统一建模语言(UML)和公共对象请求代理体系结构(CORBA)这样的标准。
11.1.3领先的开发技术
作为工作在P2K环境中的开发人员,你很可能会用到下面大多数或所有的开发技术:
●基于组件的开发(CBD)。
●增量开发。
●迭代开发。
●面向对象。
●模式。
●统一建模语言(UML)。
●以应用为中心的设计。
●用况建模。
1.基于组件的开发(CBD)。
一种开发方法,其中软件可以作为系列交互组件来部署,每个组件都封装一套预定义的行为。
包括面向对象和结构化语言在内的任何一种技术都可能用来实现组件。
常见的组件方法包括OMG的CORBA组件模型(CCM),Sun公司的EJB和微软的COM+。
开始学习CBD的最好的地方是《ComponentSoftware:
BeyondObject-OrientedProgramming》(Szyperski,1998)一书和网站。
2.增量开发。
一种软件开发方法,它把项目组织成几个小的发布版本,而不是以一次“大爆炸”版本发行。
这使你能较早地把软件交付给用户,并通过用户对最初版本的反馈来减小项目风险。
增量开发已经在第10章中详细讨论过了。
3.迭代开发。
这是软件开发中的一种非顺序方法。
换句话说,可以做一点儿需求工程,一点建模,一点实现,一点测试,再一点建模,再一点实现,再一点需求工程,等等。
使用迭代开发方法,执行活动的顺序并不是一成不变的。
通过把技术用到项目当中它们最起作用的地方,迭代开发减少了项目风险和开发时间。
迭代开发已经在第10章中详细讨论过了。
4.面向对象。
软件范型基于下面的概念:
软件应该从表示状态(数据)和行为(过程)的对象上创建。
面向对象的概念在20世纪60年代后期引入;在20世纪80年代,使用Smalltalk和C++这样的语言后面向对象开始流行;到20世纪90年代,C++和Java已经变成了事实上的开发标准。
对于对象开发人员来说,网上最有价值的资源是Cetus中对象和组件的链接,。
下一步,我推荐阅读《ApplyingUMLandPatterns》(Larman,1998),它关注于面向对象分析和设计,这些内容分别是本书第6章和第7章的内容,如果想要了解得更详细一点,请参考《BuildingObjectApplicationsThatWork》(Ambler,1998a)一书,这本书从对象开发人员的角度详细讲述了一系列面向对象的专题。
5.模式。
模式是考虑到相关因素的通用问题的解决方案,支持复用经过验证的其他开发人员的技术和方法。
模式有许多不同的类型,包括设计模式、分析模式、过程模式、结构模式、组织模式、编程习语甚至还有反模式(经过验证不能起作用的那些方法)。
分析模式在第6章中已经讨论过,设计和结构模式在第7章中也讨论过,编程习语在第8章中讨论过,过程模式在第10章中讨论过了。
在对象建模世界中,模式组成了建模人员间通用语言的基础。
例如,听到“那是Singleton”或“这是一种策略实现”这样的话,你要明白他们所说的Singleton和“策略”设计模式是很常见的。
你可以在网站中找到一系列有用的并与模式相关的资源,包括概述和高级主题。
6.统一建模语言(UML)。
UML是一种工业标准建模语言,它定义了面向对象建模的符号和语义。
《UMLDistilled》(Fowler和Scott,1997)是一本极好的对UML技术进行介绍的书,如果对UML有兴趣的话,它也是你在读完本书之后需要阅读的一本书。
在《BuildingObjectApplicationsThatWork》(Ambler,1998a)和《ProcessPatterns》(Ambler,1998b)这两本书里,我概述了这些技术以及它们如何配合使用,这与本书中每一个建模章节(第3、6、7章)中我给出的概述概念上相似。
如果需要更详细的信息,请访问c:
\iknow\docshare\data\cur_work\g.org。
我也维护着一个网页,在它上面有一些重要资源的网络链接。
7.以应用为中心的设计。
一种流线型的系统化的方法,用于设计真正紧密适应用户需求的软件,这些软件不仅更有用也更易使用,并且也更简单更容易创建。
本质用况和本质用户界面原型(实物模型)在第3章中讲述过,它们是以应用为中心的设计技术的一些例子,学习这些技术最好的开始是《SoftwareforUse》(Constantine和Lockwood,1999)一书。
8.用况建模。
用况建模是一种需求工程技术,在20世纪90年代早期开始在面向对象开发团体内部流行。
正如在第三章中所见,用况模型由用况图和一系列用况组成,用以归档系统需求行为。
我所读过的关于用况的最好的书籍是《ApplyingUseCases》(Schneider和Winters,1998);我强烈推荐阅读本书。
11.1.4现代软件过程
P2K环境的技术和技能很复杂,正如在第10章中所见,要想有效地使用它们,开发人员就需要能够反映这种复杂性的现代软件过程。
这些过程包括:
●极限编程(XP)。
●面向对象软件过程(OOSP)。
●OPEN过程。
●统一过程。
1.极限编程。
一种周密计划的软件开发方法,强调沟通、简化、反馈和自信。
XP关注于与用户一起工作、简单但一流的开发以及测试等。
学习XP,最好从《ExtremeProgrammingExplained》(Beck,2000)一书以及网站开始。
2.面向对象软件过程。
第10章中详细讨论过的OOSP是一系列过程模式,它们一起描述用于开发、维护和支持软件的完整过程。
OOSP基于下面的概念,大型、关键性任务的软件在整体上是顺序的,局部是迭代的,在Internet时代要交付增量发布版本。
OOSP是我的《ProcessPatterns》(Ambler,1998b)和《MoreProcessPatterns》(Ambler,1999)两本书的主题。
我维护着“过程模式资源网页”(c:
\iknow\docshare\data\cur_work\sPage.html),它对过程模式及其相关资源建立了索引。
3.OPEN过程。
一种复杂而综合的软件过程,由OPEN协会()支持,用于进行有效的软件开发。
如果想了解OPEN过程,我建议从《TheOPENProcessSpecification》(Graham、Henderson-Sellers和Younessi,1997)一书开始。
4.统一过程。
统一过程是一种基于迭代和增量软件开发方法的过程。
统一过程的增强生命周期在第10章中已经详细讲过了,它把统一过程技术扩展成一种完整的软件过程,适用于大型、关键性任务的软件。
要了解更多关于统一过程的内容,从《TheRationalUnifiedProcess》(Krutchten,1999)一书开始,然后接着看《TheUnifiedSoftwareDevelopmentProcess》(Jacobson、Booch和Rumbaugh,1999)以及我编写的关于增强生命周期的系列书(Ambler2000a;Ambler2000b;Ambler2000c)。
11.1.5对象编程语言
对象编程语言,包括面向对象和基于对象的语言,到目前为止是P2K开发当中用得最多的语言。
这些语言包括:
●C++
●Eiffel
●Java
●ObjectCOBOL
●ObjectPascal
●Smalltalk
●VisualBasic
1.C++。
一种混合面向对象编程语言,它在C语言中增加了面向对象的特性。
C++用于处理密集型软件应用程序,尤其是系统编程和电子商务开发。
C++是P2K开发的一个主要的语言。
你可以参阅一系列介绍C++的书,它们当中大部分都贴在上面。
对于高级C++,我建议阅读《AdvancedC++》(Coplien,1992)、《EffectiveC++》(Meyers,1992)及《MoreEffectiveC++》(Meyers,1996)等书,因为它们可以教你如何使用C++编写程序。
2.Eiffel。
一种“纯粹的”面向对象编程语言。
Eiffel是一种在小范围内流行语言,它只占很小一部分市场份额,常被慎重思考软件工程的机构使用。
在eiffel.html可以找到多种Eiffel资源。
《Eiffel:
TheLanguage》(Meyer,1992)一书是有关Eiffel语言定义的书。
3.Java。
基于概念“WORA”(一次编写,随处运行)的一种面向对象语言。
Java软件运行于标准Java虚拟机(JVM)上,这使得不同平台上的移植变为可能。
因为Java有着很好的可移植性和多样性(Java代码可以部署在浏览器、应用服务器甚至数据库中),它很可能会成为P2K开发的主要语言。
你可以在找到许多有关Java的资源,这些资源包括介绍性的和高级话题。
一个很好的在线教程也贴在tutorial/index.html上,我强烈推荐《TheElementsofJavaStyle》(Vermeulen等,2000)一书,这本书也是本系列丛书中的第五本。
4.ObjectCOBOL。
一种混合面向对象编程语言,用面向对象的概念扩展了COBOL。
ObjectCOBOL在20世纪90年代一直都不是很稳定,因为COBOL团体过分关注于Y2K危机,而没有关注于先进的技术发展。
ObjectCOBOL可能会在供应商引入新的P2K开发工具后重新流行起来。
时间会告诉我们一切的。
你可以在上找到ObjectCOBOL资源的分类。
尤其在你还不是一个有经验的COBOL开发人员时,我觉得《Object-OrientedCOBOL》(Arranga和Coyle,1996)和《StandardObject-OrientedCOBOL》(Chapin,1997)这两本书会是开始学习COBOL的好地方。
(我在20世纪80年代后期用COBOL语言写程序。
嘘……千万不要告诉其他人哟!
)
5.ObjectPascal。
一种混合面向对象编程语言,用面向对象的概念扩展了Pascal。
虽然ObjectPascal用得稍微多一点儿,在两千年后发展也可能会继续走好,但它仍是一种小范围使用的语言,不可能在P2K语言市场中成为一个强劲的对手。
ObjectPascal的资源可以在找到。
6.Smalltalk。
一种纯粹的面向对象编程语言。
Smalltalk在20世纪70年代由XeroxParc(Xerox公司的一个研发部门)开发,在20世纪80年代后期开始流行,20世纪90年代开始用于商业软件的开发。
Smalltalk由于C++和Java而黯然失色,由于市场而不是技术的关系,在20世纪90年代后期直到现在也只是一种小范围语言。
Smalltalk会不会东山再起,这一点是值得怀疑的。
你可以在上找到许多与Smalltalk相关的资源。
在20世纪90年代中期和早期,我也是一名Smalltalk开发人员,我觉得《DiscoveringSmalltalk》(Lalonde,1994)和《SmalltalkBestPracticePatterns》(Beck,1997)两书也是很不错的选择。
7.VisualBasic。
由微软公司开发的一种面向对象编程语言,它使用好几个面向对象的概念扩展了Basic语言。
VisualBasic是微软应用程序开发环境的主力军,有些版本可以作为宏语言用于一系列微软自己的产品当中。
VisualBasic是P2K环境中一门重要的语言,至少对于编写微软平台的应用程序来说确是如此。
开始学习VisualBasic最好的地方在微软的“VisualBasicStartPage”网页上:
ApplicationswithVisualBasicandUML》(Reed,1999)一书也很不错。
定义
Java虚拟机(JavaVirtualMachine,JVM):
支持一套已定义指令的抽象计算机器。
JVM使得Java可以移植;Java代码被编译成可以在拥有JVM的任意平台上运行的标准字节码。
对象编程语言(objectprogramminglanguage):
面向对象或基于对象的任意一种编程语言。
基于对象的编程语言(object-basedprogramminglanguage):
本质上支持一些但并不支持全部面向对象语言特性的任意一种编程语言。
例如:
VisualBasic。
面向对象的编程语言(object-orientedprogramminglanguage):
本质上支持继承、类、对象、多态和消息传递等面向对象概念的任意一种编程语言。
例如:
Java和C++。
编写一次,随处运行(WriteOnce,RunAnywhere,WORA):
关于Java语言的一种市场推销方式,指出Java语言跨平台的本质。
11.1.6Internet开发语言
要进行基于Web和电子商务开发,你很可能会用到下面的语言:
●HTML
●Perl
●CGI脚本
1.HTML(超文本标记语言)。
一种独立于平台的、有着工业标准定义的文件格式,用于共享信息,HTML页是WWW网事实上的标准用户接口方法。
NCSA有一个极好的HTML初学者指南贴在网上,它的网址是。
2.Perl(practicalextractionandreportlanguage,实用信息提取与报告语言)。
Perl是一种脚本语言,最初开发目的是用于UNIX系统管理任务的自动化,现在一般用于基于Web的软件开发。
Perl包含报表创建设施、编辑和数据操作功能、图形用户界面(GUI)功能、语言功能以及调用其他程序的能力。
网页是关于Perl编程语言的一个在线教程,它是开始学习Perl的一个极好的地方。
3.CGI(公共网关接口)。
CGI是一种用于在Web表单与程序之间通信的一种简单的协议。
网页提供了关于CGI的一个特别好的综述以及使用CGI的方法。
定义
图形用户界面(GraphicalUserInterface,GUI):
由图形组件组成的一种用户界面风格,例如窗口和按钮。
11.2适于特定职位的技能
在第10章中看到,软件过程复杂性给开发人员提供了一系列的机会。
在本节中,我讨论了某天你可能会充当的角色以及为了成为这种角色所需要必备的技能。
这些角色如下所示:
●业务分析员(Businessanalyst)
●IT高级经理(ITseniormanager)
●对象建模员(Objectmodeler)
●持久管理员(Persistenceadministrator)
●持久建模员(Persistencemodeler)
●程序员(Programmer)
●项目经理(Projectmanager)
●质保工程师(Qualityassuranceengineer)
●软件架构师(Softwarearchitect)
●测试工程师(Testengineer)
11.2.1业务分析员
业务分析员需要需求收集和确认技能,也需要面向对象分析的技能。
一名业务分析员要与系统的未来用户一起工作,确定他们的基本业务问题,系统需求,他们可能会怎样使用系统,他们可能需要系统随着时间如何进行演化等。
第3章、第4章和第6章(分别讨论了需求收集、需求确认和面向对象分析),描述了业务分析员每天要用到的技术。
11.2.2IT高级经理
IT(信息技术)高级经理监督机构内部的工作。
他们需要对机构内部使用的技术有一个基本的了解,尤其要对技术蕴含的业务要有所了解,他们必须牢固地掌握机构内部选用的软件过程。
IT高级经理必须在可交付品、过程、所需资源、新旧做法之间的区别以及转变到P2K软件开发环境时遇到的风险等方面得到训练。
首先,许多IT高级经理实行迭代开发时都遇到了困难,因为大部分开发制品,例如需求模型和软件设计等,是整个项目过程演化出来的,而不是以顺序方式在定义里程碑处交付的。
IT高级经理需要训练P2K软件环境中的基本技术和技能,这在11.1节中已经讲述过。
理解电子商务对于IT高级经理来说也很关键,因为它很可能就是机构内部关键业务的驱动器。
11.2.3对象建模员
对象建模员需要大量建模技能,包括UML和以应用为中心的设计技术以及底层的实现技术。
对象建模员负责面向对象软件的分析和设计;这样,他们必须具备熟练的、本书中介绍过的一系列建模技能。
过去,看到软件专家专注于某种建模,例如数据建模或过程建模等,这是很常见的现象,但经验表明这种策略不再有效,甚至会产生功能紊乱。
统一建模语言定义了许多种模型,因为没有哪个模型单独一个就足够完成所有的需求。
只关注于一种类型的模型而不管其他模型,会忽略掉许多关键的建模问题,做出来的软件运行起来也很差或者难以维护。
对象建模员必须理解一系列建模技能以及如何综合使用它们。
除