面向服装销售管理软件系统开发方法是一种全新的分析、设计与构造软件的方法,它使计算机解决问题的方式更符合人类的思维方式,更能直接地描述客观世界。它通过增加代码的可重用性、可扩充性和程序自动生成功能来提高编程效率,并且大大减少软件维护的开销,已经被越来越多的软件设计人员所接受。本章主要介绍面向对象的基本思想与基本概念、面向对象方法以及面向对象软件开发统一过程等。
面向对象基本思想
面向对象方法已深入到计算机软件领域的几乎所有分支。它不仅是一些具体的软件开发技术与策略,而且是关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并对问题进行求解,以及如何进行软件系统构造的软件方法学。
较为完善的面向对象软件开发方法出现在20世纪80年代末期。传统的软件开发方法只注重从一个或少数几个方面构造软件系统;为了克服传统软件开发方法的不足,面向对象软件开发方法从现实世界中的客观对象入手来解决问题,尽量运用人类的自然思维方式从多个方面来构造软件系统,这与使用传统软件开发方法构造系统是不一样的。面向对象软件开发方法有着自己的基本思想。
1.在系统的构造中运用人类的自然思维方式
使用面向对象软件开发方法构造系统,首先是从现实世界的客观事物出发,所以所构造的系统的基本元素就是对象;并且在构造过程中,使用人类最自然的思维方式来构造。在人类进行自然思维的时候,会用到很多的思维方式,包括抽象、分类、推理等,这些思想也会用到面向对象的软件开发过程中。
2.以对象以及对象间关系为中心
客观世界中的事物都是对象,对象间存在一定的关系。面向对象软件开发方法是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。
把众多的事物进行归纳分类是人们在认识客观世界时经常采用的思维方法,“物以类聚,人以群分”就是分类的意思,分类所依据的原则是抽象。抽象(Abstraction)就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征。从而找出事物的共性,并把具有共性的事物划为一类,得到一个抽象的概念。
例如,在设计一个服装销售管理软件系统的过程中,考察会员“张三”这个对象时,就只关心他的身高、年龄、工作等,而忽略他的学历等信息。因此,抽象性是对事物的抽象概括描述,实现了客观世界向计算机世界的转化。将客观事物抽象成对象及类是比较难的过程,也是面向对象方法的第一步。例如,将会员抽象成对象及类的过程如图2.1所示。
面向对象方法还可以利用抽象思想从客观世界中发现对象之间的关系,其中包括整体对象与部分对象,进而把对象之间的关系抽象为类之间的关系。通过继续运用抽象思想,确定类之间的继承关系。
通过抽象思想,可以建立软件基于对象的系统静态模型,系统其他模型也可以通过类似的方式来建立。通过面向对象建模,对所要解决的问题有了深刻且完整的认识,进而把其转化成可运行的软件,使得计算机内对象是对现实世界对象的抽象。
面向对象基本概念
面向对象中的基本概念包括对象、属性、操作、类、继承、多态、关联和聚合等。
1.对象(Object)
面向对象软件开发方法的最终目的是将现实世界的相关事物转化为要开发构造的软件系统中的对象。
与人们认识客观世界的规律一样,面向对象方法认为客观世界是由各种各样的对象组成,每种对象都有各自的内部状态和运动规律,不同对象间的相互作用和联系就构成了各种不同的系统,构成了客观世界。因此,现实世界中存在的任何事物都可以被看做对象。这样的对象可以是有形的,如汽车、教室、会员等;也可以是无形的,如一项计划或者一个抽象概念。无论从哪个方面看,对象都是一个独立单位,它具有自己的性质和行为。对于要构造的特定软件系统模型而言,现实世界的有些对象是有待于抽象的事物。
在面向对象的软件系统模型中,对象是用来描述客观事物的实体,它是组成一个系统的基本逻辑单元。一个对象由一组属性和对这组属性进行操纵的一组操作构成,对象只有在具有属性和行为的情况下才有意义。属性是用来描述对象静态特征的一个数据项,行为是用来描述对象动态特征的一个操作,操作又称为服务,在面向对象编程语言中称为方法。对象是包含客观事物特征的抽象实体,是属性和操作的封装体,可以用“对象一属性+操作”这一公式来表达。在面向对象的软件系统中,客观世界被描绘成一系列完全自治、封装的对象,这些对象通过外部接口访问其他对象。可见,对象是一个有组织形式的含有信息的实体。
在使用面向对象方法进行系统开发时,先要对现实世界中的对象进行分析归纳,以此为基础来定义系统中的对象。系统中的一部分对象是对现实世界中的对象的抽象,但其内容不是全部照搬,这些对象只包含与所解决的现实问题有关的那些内容;系统中的另一部分对象是为了构造系统而设立的。
2.类(Class)
类是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分,类是对象集合的再抽象。类的作用是创建对象,对象是类的一个实例。例如,在服装会员销售管理系统中,“会员”是一个类,“会员”类具有“编号”、“姓名”、“性别”、“年龄”等属性,还具有“注册”、“积分”等操作。一个具体的“会员”对象就是“会员”类的一个实例。同一个类所产生的对象之间一般有着不同点,因为每个对象的属性值可能是不同的。类与对象的关系如同一个模具与用这个模具铸造出来的铸件之间的关系。类给出了属于该类的全部对象的抽象定义,而对象则是符合这种定义的一个实体。
在寻找类时,要用到两个概念,即抽象与分类。如前所述,抽象就是忽略事物的非本质特征,只注意与当前目标相关的本质特征,从而找出事物的共性。把具有共同性质的事物划分出来,得出一个抽象的概念,即类。
3.封装(Encapsulation)
封装体现了面向对象方法的“信息隐藏与局部化”原则。
封装把描述一个事物的静态特征和动态行为结合在一起,对外形成该事物的一个界限。在面向对象方法中,封装就是把对象的属性与操纵这些属性的操作包装起来,形成一个独立的实体单位。封装使对象能够集中而完整地描述并对应一个具体的事物,体现了事物的相对独立性。
通过封装,对象的内部信息对外是隐蔽的,外界不能直接存取对象的内部信息(属性)以及隐藏起来的内部操作,外界也不用知道对象操作的内部实现细节,而只能通过有限的接口与对象发生联系。对于对象的外界而言,只需要知道对象所表现的外部行为,不必了解对象行为的内部实现细节。例如,用陶瓷封装起来的一块集成电路芯片,其内部电路是不可见的,而且使用者也不关心它的内部结构,只关心芯片引脚的个数、引脚的电气参数及引脚提供的功能,利用这些引脚,使用者将各种不同的芯片连接起来,就能组装成具有一定功能的模块。
封装的结果使对象以外的部分不能随意存取对象的内部属性,从而有效地避免了外部错误对它的影响,大大减小了查错和排错的难度。另一方面,当对象内部进行修改时,由于它只通过少量的外部接口对外提供服务,因此同样减小了内部的修改对外部的影响。同时,如果一味地强调封装,则对象的任何属性都不允许外部直接存取,要增加许多没有其他意义、只负责读或写的行为;这为编程工作增加了负担,增加了运行开销,并且使得程序显得臃肿。为了避免这一点,在语言的具体实现过程中应使对象有不同程度的可见性,进而与客观世界的具体情况相符合。
封装机制将对象的使用者与设计者分开,使用者不必知道对象行为实现的细节,只需要知道如何使用设计者设计的对象外部接口。封装的结果实际上隐蔽了复杂性,并提供了代码重用性,从而降低了软件开发的难度。
4.继承(Inheritance)
继承是指特殊类自动拥有或隐含复制其一般类的全部属性与操作,这种机制也称做一般类与特殊类的泛化。继承表示“是一种”的含义,在图2.2中,供应商“是一种”人,会员也“是一种”人;“供应商”和“会员”作为特殊类继承了一般类“人”的所有属性与操作,继承体现了“一般与特殊”的语义关系。在类的继承层次中,位于上层的类称为一般类,而位于下层的类则称为特殊类。
通过不同程度的泛化或者抽象,可以得到较一般的类;而不同程度的细化或者继承,可以得到较特殊的类。图2.3则是基于运输工具类的不同层次的抽象与继承,图中共具有三个不同的层次。有时一个类可以同时继承两个或两个以上的一般类的属性和操作,这种允许一个特殊类具有一个以上一般类的继承模式称为多继承,图2.4给出了一个多继承的示例。由此可见,继承是对客观世界的直接反映,通过类的继承,能够实现对问题的深入抽象描述,反映出人类认识问题的发展过程。
在软件开发过程中,继承性实现了软件模块的可重用性、独立性,缩短了开发周期,提高了软件开发的效率,同时使软件易于维护和修改。这是因为要修改或增加某一属性或行为,只需在相应的类中进行改动,而它派生的所有特殊类都自动地、隐含地做了相应的改动。
5.消息(Message)
对象可以通过它对外提供的操作在系统中发挥作用。当系统中其他对象或系统请求这个对象执行某个操作时,该对象就响应这个请求,完成该操作。在面向对象方法中,把向对象发出的操作请求称为消息。
对象之间通过消息进行通信,实现了对象之间的动态联系。至于消息的具体用途,它们有很多种,例如读取或设置对象某个属性的值。
6.多态(Polymorphism)
面向对象设计借鉴了客观世界的多态性,体现在不同的对象收到相同的消息时产生多种不同的行为方式。例如,在一般类“几何图形”中定义了一个操作“绘图”,但并不确定执行时到底画一个什么图形。特殊类“椭圆”和“多边形”都继承了几何图形类的绘图操作,但其功能却不同,一个是要画出一个椭圆,另一个是要画出一个多边形。这样一个绘图的消息发出后,椭圆、多边形等类的对象接收到这个消息后将各自执行不同的绘图方法,如图2.5所示。
具体来说,多态性是指类中同一方法名对应多个具有相似功能的不同方法,可以使用相同的调用方式来调用这些具有不同功能的同名方法。
继承性和多态性的结合,可以生成一系列虽类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征;由于多态性,针对相同的消息,不同对象可以有独特的表现方式,实现特性化的设计。
7.关联与聚合
关联是两个或者两个以上类之间的一种静态关系。
在实例化后,由类产生对象,由类关联关系产生对象之间的联系。关联关系在实现时,可以通过对象的属性值表达出来。例如,由“供应商”类创建的一个对象“李四”中有一个集合类型的属性“会员类型”,当前该属性的值为“离散数学”和“软件工程”,这意味着张老师讲授这两门课程。
一个较复杂的对象由其他若干较简单的对象作为其构成部分,把这种对象间的关系称为组合或聚合关系。聚合关系刻画了现实世界事物之间的构成关系,例如圆心与圆之间的关系,计算机与内存间的关系。聚合是具有“整体与部分”语义的关联关系;也就是说,聚合是关联的一种,只是它还具有明显的“整体与部分”含义。
面向对象方法
面向对象方法的核心思想是利用面向对象的概念和方法,运用面向对象分析(OOAnalysis,OOA)技术为软件需求建立模型,使用面向对象设计(00Design,OOD)技术进行系统设计,采用面向对象编程语言(00ProgrammingLanguage,OOPL)完成面向对象系统实现(OOImplementation,OOI),并对系统进行面向对象测试(OOTesting,OOT)和面向对象维护(00Maintenance,OOM)。
面向对象技术是软件工程领域中的重要技术,是一种把面向对象的思想运用于软件开发过程中指导开发活动的系统方法,是建立在面向对象基本概念基础上的方法。
面向对象方法简介
面向对象思想在程序设计中的应用起源于20世纪60年代中期的程序设计语言Simula一67,该语言首次引入了类和继承的概念。随后的CLU、Ada和Modula一2等语言对抽象数据类型理论的发展起到了重要作用,它们支持数据与操作的封装。1972年的PARC研究中心发布了Smalltalk一72,其中正式使用了“面向对象”这个术语。Smalltalk的问世标志着面向对象程序设计方法的正式形成,但是最初的Smalltalk语言还不够完善。
PARC先后发布了Smalltalk一72、Smalltalk-76和Smalltalk一78等版本,直至1981年推出该语言的完善版本Smalltalk一80。该版本的问世被认为是面向对象语言发展史上的最重要的里程碑,目前绝大部分面向对象的基本概念及其支持机制在Smalltalk一80中都已具备。Smalltalk-80是一个完备的、能够实际应用的面向对象语言,但随后却没有被广泛应用。
从20世纪80年代中期到20世纪90年代,面向对象的软件设计和程序设计方法已经发展成为一种成熟、有效的软件开发方法,出现了大批比较实用的面向对象编程语言。现在,在面向对象编程方面,普遍采用语言、类库和可视化编程环境相结合的方式,面向对象方法也从程序设计发展到了分析、设计,进而发展到了整个软件生命周期。
面向对象方法已经成为新的流行趋势,面向对象方法论自1986年Booch率先提出后,至今已经有Booch、OMT、OOSE以及Coad/Yourdon等50种以上。1997年,在整合Booch、OMT、OOSE以及Coad/Yourdon等面向对象方法概念的基础上,提出了统一建模语言(UnifiedModelingLanguage,UMI.)。UML是一种可视化建模语言,完全支持面向对象的软件开发方法。UMI。定义了建立系统模型所需要的概念并给出了表示法,但它并不涉及如何进行系统建模。因此,它只是一种建模语言,而不是建模方法;UML是独立于开发过程的,也就是说,它可以适合于不同的开发过程。
所有的面向对象方法都遵守相同的基本观点,即“面向对象一对象+类+继承+通信”。
(1)现实世界是由对象组成的。任何客观事物和实体都是对象,复杂对象可以由简单对象组成。
(2)具有相同数据和操作的对象可以归并为一个类。对象具有封装性,它可以对数据和操作形成一个包装。对象是类的一个实例,一个类可以产生若干对象。
(3)类可以派生子类,继承能避免共同数据和操作的重复。
(4)对象之问通过传递消息进行联系。
当前,面向对象方法几乎覆盖了计算机软件领域的所有分支。此外,许多新领域都以面向对象理论为基础或者作为主要技术,如面向对象的软件体系结构、领域工程、智能代理和基于组件的软件工程等。
几种典型的面向对象方法
20世纪80年代以来,随着面向对象技术成为研究热点,出现了几十种支持软件开发的面向对象方法,其中,Booch方法、Jacobson方法以及Coad/Yourdon方法、OMT方法在面向对象软件开发界得到了广泛的认可。
1.Booch面向对象方法
Booch在1986年提出了“面向对象分析与设计”(OOAD)方法,认为软件开发是一个螺旋上升的过程,它强调过程的多次重复。
Booch面向对象方法的基本开发模型包括逻辑模型、物理模型、静态模型和动态模型。逻辑模型描述系统的类结构和对象结构,分别用类图和对象图表示;物理模型描述系统的模块结构和进程结构,分别用模块图和进程图表示;静态模型描述系统的静态组成结构;动态模型描述系统执行过程中的行为,用状态转换图和时序图表示。
Booch面向对象方法的开发过程分为技术层开发和管理层开发。技术层开发过程让开发人员有充分的自由度,实践渐进的与可复用的开发理念。管理层开发过程有利于管理者有序地掌握控制开发进度、产品质量以及系统总体结构的正确性。Booch面向对象方法的系统技术层开发步骤包括发现类与对象、确定类与对象的语义、标识类与对象间关系;而管理层开发步骤包括强调团队技术管理、明确用户关键需求、建立系统分析模型、完善设计系统结构、软件系统实现以及软件交付。
2.Jacobson面向对象方法
Jacobson的“面向对象软件T程”(OOSE)方法提出一种用例驱动的面向对象方法,它提供了相应的CASE工具来快速建立系统分析模型和系统设计模型。
与系统用户充分交互,明确双方责任,根据用户要求和系统实际运行环境建立用户需求模型和系统分析模型,从而建立面向对象分析模型。其中,建立用户需求模型包括定义执行者及其责任、标识用例、制定初始视图模型、利用用例复审模型等步骤;建立系统分析模型包括标识界面对象、创建界面对象的结构视图模型、表示对象行为操作、分离子系统模型以及利用用例复审模型等步骤。
在建立的分析模型的基础上进行修改、完善,使分析模型适合现实世界环境;同时,创建模块作为主要的设计对象,创建一个显示激励如何在模块间传送的交互图,进而把模块组成子系统,从而建立系统设计模型。
3.Coad/Yourdon面向对象方法
Coad/Yourdon的面向对象方法发表于1991年,它严格区分了面向对象分析OOA和面向对象设计OOD,其概念由信息模型、模型对象语言及知识库系统衍生而来。
Coad/Yourdon方法利用5个层次和相应的5个活动来定义和记录系统行为、输入以及输出,这5个层次以及相应的5个活动包括:
1)类与对象层
描述如何发现类与对象。从应用领域开始识别类与对象,形成整个应用的基础,然后据此分析系统的责任。
2)结构层
该活动分为识别一般与特殊结构和识别整体与部分结构两个步骤,一般与特殊结构捕获并识别出的类的层次结构;整体与部分结构用来表示一个对象如何成为另一个对象的一部分,以及多个对象如何组装成更大的对象。
3)主题层
主题由一组类及对象组成,用于将类与对象模型划分为更大的单位,便于理解。
4)属性层
该层包括确认对象属性、定义类实例(对象)之间的实例连接。
5)服务层
包括确认操作、定义对象之间的消息连接。
在面向对象分析阶段,经过5个层次的活动后的结果是一个分成5个层次的问题域模型,包括主题、类与对象、结构、属性和服务5个层次,由类和对象图表示,5个层次活动的顺序并不重要。
面向对象设计模型由4个部件模型和4个活动组成。4个部件模型是人机接口部件模型、问题域部件模型、任务管理部件模型和数据管理部件模型。相应的4个活动是设计问题域部件、设计人机接口部件、设计任务管理部件和设计数据部件。
在OOD建立模型的整个过程中始终贯穿OOA的5个层次和5个活动,OOA的结果就是OOD的问题域部件,但在OOD中可以改动和增补。
4.OMT面向对象方法
“面向对象技术”(OMT)方法是JamesRumbaugh等提出的,该技术从三个相关但体现系统不同方面的角度去对一个系统进行建模,得到对象模型、动态模型和功能模型,每一种模型描述系统的一个方面。
1)对象模型
对象模型通过反映系统中的对象及对象之间的关系以及表示对象、类、属性和操作来表达一个被建模系统的静态结构,对象模型是OMT模型中最重要的一个部分,更贴近现实世界。
2)动态模型
动态模型关心的是随着时间的变化,对象与对象之问关系的变化。对象与对象之问相互作用或者事件的发生,导致它们的状态不断发生变化。一个事件是指一个单独对象对另一个对象的激励。
3)功能模型
功能模型确定什么事件发生,动态模型决定什么时候,什么条件下发生,对象模型定位该事件发生在哪个对象上。功能模型反映的是系统模块的输人值和输出值。
这三种模型是随着开发过程不断演变的,即从问题域模型逐步演变为计算机域模型。在系统分析阶段,问题域的模型被创建,这时不用考虑实现;在系统设计阶段,解决方法的一些结构要加到模型中去;在实现阶段,问题域和解决方法的结构要实施为代码。
面向对象方法主要优点
面向对象方法已经成为软件工程技术体系中成熟的软件开发方法,它具有显著的优点。
1.面向对象方法改变了开发软件的方式
面向对象方法依据人类传统的思维方式,对客观世界建立软件模型,它利用人类对现实问题的讨论与理解方式,有利于人们之间的交流。面向对象方法是以系统的实体为基础,将实体属性及其操作封装成对象,并在分析、设计、实现各个阶段都能将结果直接映射到系统的实体上,这样,很容易为人们理解和接受。面向对象方法在系统分析、设计阶段采用同样的图形表示形式,分析、设计、实现都以对象为基础,因此在面向对象软件开发的各个阶段之间能很好地无缝衔接。
2.面向对象语言使客观世界到计算机语言鸿沟变窄
机器语言是由二进制的0和1构成的,离机器最近,能够直接执行,但没有任何形象意义,离人类的思维最远。汇编语言以容易理解的符号表示指令、数据、寄存器、地址等物理概念,稍稍适合人类的形象思维,但仍然相差很远,因为其抽象层次太低,仍需要考虑大量的机器细节。非面向对象的高级编程语言隐蔽了机器细节,使用形象意义的数据命名和表达式,这可以将程序与所描述的具体事物联系起来,尤其是结构化编程语言更便于体现客观事物的结构和逻辑含义,与人类的自然语言接近,但仍有不少差距。面向对象编程语言能比较直接地反映客观世界的本质,并使软件开发人员能够运用人类认识事物所采用的一般思维方法来进行软件开发,从而缩短了从客观世界到计算机实现的语言鸿沟。
3.面向对象方法使分析与设计的鸿沟变窄
在结构化的软件开发方法中,对问题域的描述与认识并不以问题域中的事物作为基本单位,而是在全局的范围内以功能、数据或数据量为中心来进行分析。因此运用该方法得到的分析结果不能直接映射到问题域,而是经过不同程度的转化和重新组合。这样容易造成一些对问题域理解的偏差。此外,由于分析与设计的表示体系不一致,导致设计文档与分析文档很难对应,从而产生如图2.8所示的分析与设计鸿沟。
实际上并不存在可靠的从分析到设计的转换规则,这样的转换有一定的人为因素,从而容易因为理解上的偏差而埋下隐患。正是这些隐患,使得程序员经常需要对分析文档和设计文档进行重新认识,以产生自己的理解再进行工作,这样使得分析文档、设计文档和程序代码之间不能很好地衔接。因为程序与问题域和前面各个阶段生成的文档不能较好地对应,因而给软件维护也带来了不小的麻烦。
面向对象开发过程的各个阶段都使用了一致的概念和表示法,而且这些概念与问题域的事物是一致的,这对整个软件生命周期的各种开发和管理活动具有重要的意义。首先是的事物是一致的,这对整个软件生命周期的各种开发分析与设计不存在鸿沟,从而可减少理解偏差并避免文档衔接不好的问题。从设计到编程,模型与程序的主要成分是严格对应的,这不仅有利于设计与编程的衔接,而且还可以利用工具自动生成程序的框架和部分代码。对于测试而言,面向对象的测试丁=具不但可以根据类、继承和封装等概念与原则提高程序测试的效率与质量,而且可以避免测试程序与面向对象分析与设计模型不一致的偏差。因此,采用面向对象软件开发方法,可以使分析与设计间的鸿沟变窄。
4.面向对象方法能很好地适应需求变化
由于客观世界的实体是不变的,实体之间的联系基本上也是稳定的,因此,面向对象方法在需求变化方面是随着用户的需求变化而做相应改变的。系统的总体结构相对比较稳定,所以变化主要集中在对象属性与操作以及对象之间的消息通信上。由于面向对象方法的封装机制使开发人员可以把最稳定的部分(即对象)作为构筑系统的基本单位,而把容易发生变化的部分(即属性与操作)封装在对象之内,对象之间通过接口进行联系,使得需求变化的影响尽量被限制在对象内部。
5.面向对象方法容易实现软件复用
在面向对象方法中,对象所具有的封装、信息隐藏等特性和继承机制,使得它容易实现软件复用。例如,在一个应用系统中,不同类之间会有一些相同的属性和操作,利用类可以派生出新类,类可以产生实例对象的继承机制,可以实现公共属性和操作的复用。而在不同的应用系统中也会涉及很多相同或者相似的实体,它们在不同应用系统中有着不同的属性和操作,同时也有很多相同的属性和操作,在开发一个新服装销售管理软件系统时,可以利用在开发其他系统时产生的已经过实际运行检测的某些类或组件,作为新系统的组成部分,从而实现软件复用。另外,面向对象程序设计语言的开发环境中定义的系统动态链接库,提供了公共使用的程序代码,也能实现软件复用。
6.面向对象方法易于进行系统维护和修改
面向对象系统由对象组成,对象包含属性和操作两部分,是独立的单元。对象的封装性使得对象之间的联系通过消息进行,使用者只能通过接口访问对象,系统是模块化的体系结构。系统各个对象的接口确定后,分配给不同的开发人员负责具体开发、实现,最后按照规定的接口可以方便地组装成一个完整的系统。如果系统出现错误,只要对导致系统发生错误的这个对象进行修改即可,不至于对整个系统进行改动。
面向对象软件开发方法是一种建立在已有的软件开发经验基础上的新的思考方式。面向对象方法将数据和操作结合为对象,面向对象的核心是封装。在网络分布式计算应用需求日益增长的今天,面向对象技术为网络分布式计算提供了基础性核心技术支持。
面向对象开发统一过程
统一过程简介
UML的创始者在创建UML的同时,在1998年提出了与UMI。配套的面向对象软件开发的统一过程(UnifiedProcess,UP),将核心过程模型化。UMI。与UP相结合进行软件系统开发是面向对象系统开发的最佳途径。
用于面向对象软件开发的UP综合了以前多种软件开发过程的优点,全面考虑了软件开发的技术因素和管理因素,是一种良好的开发模式。UP的主要特征是以用例驱动开发过程,以系统体系结构为中心,以质量控制和风险管理为目标,采用反复(循环迭代)、渐增式的螺旋上升开发过程。
面向对象软件系统的开发从建立问题域的用例模型开始,用例包含系统的功能描述,所以用例将影响开发过程所有的阶段和视图。用例“驱动”了需求分析之后的所有开发过程。在项目的早期定义了一个基础的体系结构是非常重要的,然后将它原型化并加以评估,最后进行精化。体系结构给出系统的映像,系统概念化、构建和管理都是围绕体系结构进行的。用UML建模不要试图一次完成定义系统的所有细节,开发过程由一系列循环的开发活动组成,逐步完善、循环、渐增、迭代、重复是UP的主要特色。在UML的开发过程中,质量控制贯穿于软件开发的全过程,即质量全程控制。在软件项目立项之初就要尽可能全面认识项目开发的风险,找出减少或避免以及克服风险的对策,因此,风险管理也要贯穿于软件开发的全过程。
UML与UP相结合的软件开发过程是基于面向对象技术的,它所建立的模型都是对象模型。软件开发统一过程实际上是一种二维结构的软件开发过程,横轴(时间轴)将软件的开发过程(生命周期)划分为开始、详细规划、系统构建、过渡4个阶段;纵轴包含过程成分,即软件项目开发过程的具体工作内容,包括分析、设计、实现、测试等。
统一过程开发阶段
面向对象的软件开发统一过程从时间轴看是一个迭代渐增式的开发过程。在开发一个面向对象的软件系统时,可以先选择系统中的某些用例进行开发,完成这些用例的开发后再选择一些未开发的用例,采用如此迭代渐增的开发方式,直至所有用例都被实现。每一次迭代都要编写相应的文档,进行正式的评审,并提交相应的软件。所提交的软件可能是作为中间结果的内部版本,也有可能是早期用户版本。每一次迭代都包含开始、规划、系统构建、过渡4个阶段。
1。开始阶段
开始阶段主要是确定软件项目的范围和目标,并进行可行性分析。主要工作包括:
(1)理解问题域的各种业务过程及其之间的关系。
(2)考虑和分析项目的成本以及可能得到的效益和风险。
(3)明确待开发软件项目的意义和价值。
(4)确定是否开发此项目。
2.详细规划阶段
详细规划阶段的主要任务是在开始阶段工作基础上,收集详细的系统需求,进行高层次的系统分析和系统设计。
(1)对要开发的软件项目的问题域和功能做详细分析,给出用例图。
(2)建立系统的基础体系结构。
(3)进行风险分析,并制定相应的对策。
(4)制定开发计划。
制定开发计划实际上就是为系统构建阶段制定迭代开发的顺序,制定计划包括用例分类、迭代开发周期界定、迭代中用例分配等。
3.系统构建阶段
系统构建阶段是迭代、渐增地建造系统的过程,通过若干次迭代、循环、重复的工作具体建造软件系统。每次迭代都可以看做开发一个小项目,它应该包含分析、设计、实现、测试等全过程。
(1)渐增式开发:每次迭代都是在前次迭代的基础上增加另外一些新用例的开发。
(2)集成测试:新用例开发完成后要与前次迭代结果集成,进行系统测试。
(3)测试演示:向用户演示测试结果与过程,以表明相关用例已被正确实现。
(4)保存测试案例:所用测试案例都应保存,以便在以后的迭代中进行回归测试。
这种迭代渐增式的开发有助于尽早发现和修改错误,减少开发风险。
4.过渡阶段
过渡阶段是系统正式投入运行前的阶段,主要工作包括系统Beta测试、系统性能调整以及人员培训等。
统一过程成分
统一过程成分实际上是软件开发过程中的一些核心活动,主要包括业务建模、需求分析、系统设计、实现、测试以及配置等。
1.业务建模
采用UML的对象图和类图表示目标软件系统所基于的应用领域中的概念和概念间的关系,这些相互关联的概念构成了领域模型。领域模型一方面可以帮助理解业务背景,与业务专家进行有效沟通;另一方面,随着软件开发阶段的不断推进,领域模型将成为软件结构的主要基础。如果领域中含有明显的流程处理部分,可以考虑利用UMI.的活动图来刻画领域中的T作流,并标识业务流程中的并发、同步等特征。
2.需求分析
UML的用例视图以用户为中心,对系统的功能需求进行建模。通过识别位于系统边界之外的参与者以及参与者的目标,来确定系统要为用户提供哪些功能,并用用例进行描述。可以用文本形式或UML活动图描述用例,利用UML用例图表示参与者与用例之间、用例与用例之间的关系。采用UML顺序图描述参与者和系统之间的系统事件。利用系统操作刻画系统事件的发生引起系统内部状态的变化。如果目标系统比较庞大,用例较多,则可以用包来管理和组织这些用例,将关系密切的用例组织到同一个包里,用UML包图刻画这些包及其关系。
3.系统设计
把分析阶段的结果扩展成技术解决方案,包括软件体系结构设计和用例实现的设计。采用UML包图设计软件体系结构,刻画系统的分层、分块思路。采用UML协作图或顺序图寻找参与用例实现的类及其职责,这些类一部分来自领域模型,另一部分是软件实现新加入的类,它们为软件提供基础服务,如负责数据库持久化的类。用UML类图描述这些类及其关系,这些类属于体系结构的不同的包中。用UML状态图描述那些具有复杂生命周期行为的类。用UMI。活动图描述复杂的算法过程和有多个对象参与的业务处理过程,活动图尤其适合描述过程中的并发和同步。此外,还可以使用UMI。组件图描述软件代码的静态结构与管理。UMI.配置图描述硬件的拓扑结构以及软件和硬件的映射问题。
4.系统实现
把设计得到的类转换成某种面向对象程序设计语言的代码。
5.系统测试
不同的测试小组使用不同的UML图作为他们工作的基础。单元测试使用类图和类的规格说明,集成测试使用组件图和协作图,而确认测试使用用例图和用例文本描述来确认系统的行为是否符合这些图中的定义。
6.系统配置
系统配置是在系统建模阶段后期和过渡阶段进行的,主要是根据系统工作环境的硬件设备,将组成系统体系结构的软件组件分配到相应的计算机上。在UML中,使用组件图和配置图进行描述。
本章小结
面向对象软件开发方法解决问题的思路就是从现实世界中的客观对象人手,尽量运用人类的自然思维方式从多个方面来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题。面向对象方法最重要的原则是抽象和分类,最基本的概念包括对象、类、封装、继承、消息以及关联等。
基于面向对象技术的面向对象方法目前是一种成熟的软件开发方法,是一种把面向对象的思想运用于软件开发过程中指导开发活动的系统方法,是建立在面向对象基本概念基础上的方法。用于面向对象软件开发的统一过程综合了以前多种软件开发过程的优点,全面考虑了软件开发的技术因素和管理因素,是~种良好的开发模式。比如秘奥服装销售管理软件开发统一过程将软件的开发过程划分为开始、详细规划、系统构建、过渡4个阶段;而服装销售管理软件项目开发过程的具体工作内容包括分析、设计、实现、测试等。
本章在运用面向对象基本思想和基本概念的基础上,详细说明了面向对象方法的主要优点并介绍了几种典型的面向对象方法。将面向对象方法与软件开发过程(尤其是统一过程)相结合是进行软件开发的最佳途径,尤其是在面向对象方法的面向对象分析、面向对象设计、面向对象编程、面向对象测试等阶段中,第3章将重点介绍面向对象分析技术和面向对象设计。
文章来源:秘奥软件网,中小企业信息化领跑者!全国咨询热线:400-9908-527_www.misall.com
Copyright @ 2007 MISALL Corporation. All Rights Reserved. All Powered By 粤ICP备07050206号
地址:广州天河区大观南路26号长盛商务大厦B713、715 电话:020-28269517