资源描述
单击此处编辑母版标题样式,本章目标:,通过本章的学习,应了解 “面向对象”的基本概念与特征。应对“面向对象”的系统开发有一个整体的认识。,八,面向对象的,系统开发方法,引言,传统的“面向过程”的方法学是把世界分成两个部分,分别认知:,1)数据(Data):用于描述各种状态的数据结构;,2)过程(Procedures):就是操作这些状态数据的程序,有时也称为“算法”。,说得形象一些,它认为数据是静态的,不会自行改变的,而需要各种各样的过程来改为数据。您还记得,“数据结构”+“算法”=程序,,这一个伟大的等式吗?这就是“面向过程”方法学的精髓。,八,面向对象的,系统开发方法,引言,举个例子,我们要将一块木头从目前的位置向北搬到距原地10米的地方,我们首先会定义一个表示木头的数据结构,存储位置、质量等状态信息,然后再编写一个算法操作这个表示木头的数据结构,以达到目的。,而“面向对象”的方法学则认为世界是由各种各样的对象(object)组成的,而每一个对象都有两个特征:状态(也称为属性)与行为(也称为方法)。,说得形象一些,每个组成世界的对象都是通过自己的行为来变化自身的状态,一切变化都是对象自身、或对象间的协调而产生的,。,第八章,面向对象的,系统开发方法,所谓“面向对象”是一种认识客观世界的世界观,从结构组织角度模拟客观世界的一种方法,人们在认识和理解现实世界的过程中,普遍运用以下三个构造法则:,(1)区分对象及其属性,如区分车和车的大小;,(2)区分整体对象及其组成部分,如区分车和车轮;,(3)不同对象类的形成及区分,如所有车的类和所有船的类。,因而,客观世界可以看成由许多不同种类的对象构成,每个对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用构成了完整的客观世界。,第一节 面向对象的基本概念及特征,一、面向,对象的基本概念,1、,对象,:是,一种对客观事物的抽象,它由状态(属性)和行为(方法)组成。,下面,我们就使用一个图,来帮助大家认识对象。正如图2-1所示,我们使用一个大圆来表示一个对象,中间的一个小圆圈定义了这个对象的各种状态信息,外面则是各种各样的行为,通过执行这个对象的行为,就会改变这个对象的状态。,第一节 面向对象的基本概念及特征,图,2-1,木头对象示意图,第一节 面向对象的基本概念及特征,2、,类,:,是对象的集合也就是由所有相似对象的状态变量(属性变量)与行为(方法)所构成的模板或原型。,我们首先定义了“笔店”这个类,它拥有4个属性:,1) 铅笔;,2) 钢笔;,3) 圆珠笔;,4) 其它笔,同时还定义了三个行为:,1)卖出:将属性的值减少,表示卖出;,2)进货:将属性的值增加,表示进货;,3)盘点:打印出属性的值;,第一节 面向对象的基本概念及特征,3、消息传递,在前面,我们说到在面向对象的世界中,一切变化都是对象自身、或对象间的协调而产生的。那么它们是如何进行协商的呢?,在面向对象的程序设计中,我们采用一种叫消息传递(Message Passing)的机制来实现。消息从一个对象发到另一个对象,使另一个对象完成某一个行为。,通常,我们把发送消息的对象称为“发送对象”(,sender,),而把接受消息的对象称为“接受对象”(,receiver,)。其工作如下图所示:,第一节 面向对象的基本概念及特征,图,2-2,消息传递机制工作示意图,第一节 面向对象的基本概念及特征,4 、,继承,:,是指一个类(即称子类)因承袭而具有另一个类(或称父类)的能力和特征的机制或关系。,例如,汽车中有货车、客车、轿车:,1) 用于运输货物的汽车叫货车;,2) 用于运输旅客的汽车叫客车;,3) 豪华的、较低矮、较小的、有钱人(:-P)坐的汽车叫轿车。,而汽车、货车、客车、轿车都是类!在本例中,汽车这个类是货车、客车、轿车这三个类的超类(,Superclass,),而货车、客车、轿车这三个类则是汽车这个类的子类(,subclass,)。,第一节 面向对象的基本概念及特征,这四个类,(,超类与子类),的关系,可以通过下面这个图来表示:,第一节 面向对象的基本概念及特征,为什么要引入继承的概念呢?,继承机制提高了“软件可复用性”。大家应该知道,在结构化的程序设计中,我们常常将一些经常要使用的功能模块写成子程序,供程序调用,这样会大大提高开发效率。这也就是“软件复用”。,而通过继承,我们可以在已定义类的基础上无限地繁衍出更多的类,并且通过直接继承、新增、局部修改来重复使用超类。这样必将使软件开发的速度更快,同时可以使程序共享成为可能。,第一节 面向对象的基本概念及特征,5 、,封装性,:,就是把一组数据和与其有关的操作集合组装在一起,形成一个能动的实体,也就是对象。,例:,就象电路设计,以前是用一个个晶体管的,后来把能完成某一功能的晶体管做在一起封装起来,并只提供几只引脚,外界只能通过这些引脚而不能通过别的途径来访问内部功能,这就成了集成电路。封装使得一个对象具备独立和明确的功能,并提供接口便于和其它对象作用,而其内部的代码和数据都是受保护的。好处不言自明。,第一节 面向对象的基本概念及特征,6,、,多态性,多态性很有意思,不同的对象可以调用相同名称的函数,却能导致完全不同的行为的现象。这在现实生活中也会发生,比如我这个对象去调用玩电脑这个函数时,一般发生的是打字的行为,而我表弟去调用玩电脑这个函数时,总是发生游戏大战的行为。这是由于玩电脑这个函数它能根据不同的对象做出不同的反应。我们只管玩电脑就行了。,多态性:同一消息发送至不同类或对象可导致不同的操作结果,使软件开发设计更便利,编码更灵活。,第一节 面向对象的基本概念及特征,7、易维护性:面向对象的抽象封装使对象信息隐藏在局部。当对象进行修改,或对象自身产生错误的时候,由此带来的影响仅仅局限在对象内部而不会波及其他对象乃至整个系统环境,这极大方便了软件设计、构造和运行过程中的检错、修改。,第一节 面向对象的基本概念及特征,一、面向对象的系统开发方法的原理,面向对象开发一般经历三个阶段:面向对象系统分析(OOA),面向对象系统设计(OOD)和面向对象系统实现(OOP)。这与传统的生命周期法相似,但各阶段所解决的问题和采用的描述方法却有极大区别。,(一)、面向对象的系统分析,面向对象分析运用以下主要原则:,1,、构造和分解相结合的原则。,2,、抽象和具体结合的原则。,第二节 面向对象的系统开发方法的原理,(一)、面向对象的系统分析,面向对象分析运用以下主要原则:,3,、封装的原则。,4,、继承性的原则。,5,、构造问题空间。,(,1,)区分对象及其属性;,(,2,)区分整体对象及其组成部分;,(,3,)不同对象类的形成及区分,。,第二节 面向对象的系统开发方法的原理,(二)、面向对象的系统设计,课本P194,(三)、面向对象的系统实施,课本P194,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,八十年代末以来,随着面向对象技术成为研究的热点出现了几十种支持软件开发的面向对象方法。其中,布什(Booch),Coad/尤顿(Yourdon),对象模型技术(OMT)和雅寇森(Jacobson)的方法在面向对象软件开发界得到了广泛的认可。特别值得一提的是统一的建模语言UML(Unified Modeling Language),该方法结合了Booch, OMT, 和Jacobson方法的优点,统一了符号体系,并从其它的方法和工程实践中吸收了许多经过实际检验的概念和技术。UML方法自去年提出后到现在已发展到1.1版,并已提交给对象管理集团OMG,申请成为面向对象方法的标准。,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,面向对象方法都支持三种基本的活动:识别对象和类,描述对象和类之间的关系,以及通过描述每个类的功能定义对象的行为。为了发现对象和类,开发人员要在系统需求和系统分析的文档中查找名词和名词短语,包括可感知的事物(汽车、压力、传感器);角色(母亲、教师、政治家);事件(着陆、中断、请求);互相作用(借贷、开会、交叉);人员;场所;组织;设备;和地点。通过浏览使用系统的脚本发现重要的对象和其责任,是面向对象分析和设计过程的初期重要的技术。,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,当重要的对象被发现后,通过一组互相关联的模型详细表示类之间的关系和对象的行为,这些模型从四个不同的侧面表示了软件的体系结构:静态逻辑、动态逻辑、静态物理和动态物理。静态逻辑模型描述实例化(类成员关系)、关联、聚集(整体/部分)、和一般化(继承)等关系。这被称为对象模型。一般化关系表示属性和方法的继承关系。定义对象模型的图形符号体系通常是从用于数据建模的实体关系图导出的。对设计十分重要的约束,如基数(一对一、一对多、多对多),也在对象模型中表示。,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,1、Booch(布什)方法,(1)Booch(布什)方法的过程包括以下步骤:,在给定的抽象层次上识别类和对象,识别这些对象和类的语义,识别这些类和对象之间的关系,实现类和对象,这四种活动不仅仅是一个简单的步骤序列,而是对系统的逻辑和物理视图不断细化的迭代和渐增的开发过程。,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,1、Booch(布什)方法,(2)Booch(布什)方法的力量在于其丰富的符号体系,包括:,类图(类结构静态视图),对象图(对象结构静态视图),状态转移图(类结构动态视图),时态图(对象结构动态视图),模块图(模块体系结构),进程图(进程体系结构),第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,2、Rumbaugh(云豹)的OMT方法,Rumbaugh(云豹)的OMT方法从三个视角描述系统,相应地提供了三种模型,对象模型,动态模型和功能模型。,对象模型描述对象的静态结构和它们之间的关系。主要的概念包括:,类,属性,操作,继承,关联(即关系),聚集,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,2、Rumbaugh(云豹)的OMT方法,动态模型描述系统那些随时间变化的方面,其主要概念有:,状态,子状态和超状态,事件,行为,活动,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,2、Rumbaugh(云豹)的OMT方法,功能模型描述系统内部数据值的转换,其主要概念有:,加工,数据存储,数据流,控制流,角色(源/潭),第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,2、Rumbaugh(云豹)的OMT方法,该方法将开发过程分为四个阶段:,(1)分析,基于问题和用户需求的描述,建立现实世界的模型。分析阶段的产物有:,问题描述,对象模型对象图数据词典,动态模型状态图全局事件流图,功能模型数据流图约束,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,2、Rumbaugh(云豹)的OMT方法,(2)系统设计,结合问题域的知识和目标系统的体系结构(求解域),将目标系统分解为子系统。,(3)对象设计,基于分析模型和求解域中的体系结构等添加的实现细节,完成系统设计。主要产物包括:,细化的对象模型,细化的动态模型,细化的功能模型,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,2、Rumbaugh(云豹)的OMT方法,(4)实现,将设计转换为特定的编程语言或硬件,同时保持可追踪性、灵活性和可扩展性。,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,3、Coad/Yourdon(尤顿)方法,Coad/Yourdon(尤顿)方法严格区分了面向对象分析OOA和面向对象设计OOD。该方法利用五个层次和活动定义和记录系统行为,输入和输出。这五个层次的活动包括:,发现类及对象。,识别结构。,定义主题。,定义属性。,定义服务。,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,3、Coad/Yourdon(尤顿)方法,面向对象设计模型需要进一步区分以下四个部分:,问题域部分,人机交互部分,任务管理部分,数据管理部分,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,4、Jacobson(雅寇森)方法,Jacobson(雅寇森)方法与上述三种方法有所不同,它涉及到整个软件生命周期,包括需求分析、设计、实现和测试等四个阶段,。,在该方法中的一个关键概念就是use case。use case是指行为相关的事务(transaction)序列,该序列将由用户在与系统对话中执行。因此,每一个use case就是一个使用系统的方式,当用户给定一个输入,就执行一个use case的实例并引发执行属于该use case的一个事务。,第二节 面向对象的系统开发方法的原理,二、面向对象的系统开发方法,4、Jacobson(雅寇森)方法,基于这种系统视图,Jacobson将use case模型与其它五种系统模型关联:,领域对象模型。,use case模型根据领域来表示。,分析模型。,use case模型通过分析来构造。,设计模型。,use case模型通过设计来具体化。,实现模型。,该模型依据具体化的设计来实现use case模型。,测试模型。,用来测试具体化的use case模型。,第二节 面向对象的系统开发方法的原理,下面我们将以CoadYourdon的方法为基础,结合工资管理实例,简要地介绍面向对象的系统开发过程。为了便于讲述,对该例相应做了些简化,。,一、面向对象的系统分析,()问题陈述,开发人员对问题域的陈述是系统分析的基础。用户最初提出的要求通常都是不够明确和具体,有时甚至是很含糊不清的。通过与用户不断交流,开发人员能够加深对问题领域的认识,经过讨论、修改与补充,逐步明确与具体化,获得对问题域详尽的陈述。现先将本例的要求说明陈述如下:,工资管理系统主要对人员、工资数据来源、工资数据进行管理,数据种类不多,数据的使用频率也不高,但准确率要求高。,第三节 面向对象的系统开发实例,系统需要维护和提供的信息有:,(1)工资构成信息,包括标准工资、工资性津贴、经常性奖金、加班加点工资、其它工资、各种代扣款项等;,(2)人员信息,包括职工编号、姓名、人员类别、单位等;,(3)工资数据来源信息,包括人事部门提供的人员变动资料、科室班组填制并经劳动部门审核的考勤统计资料、生产车间提供的产量和质量统计资料、总务后勤部门提供的房租、水电费等代扣款资料、工会部门提供的储蓄、互助金、工会会费、住房公积金等有关资料等;,(4)汇总核算信息,收集、汇总完上面所列这些工资数据后,会计人员对每一职工的工资数据进行计算,得出每一职工的实发工资,编制出工资结算单,并根据需要编制各种统计表;,(5)工资管理员信息,包括姓名、使用权限、密码等。,第三节 面向对象的系统开发实例,(二)识别对象类(P195),(三)确定对象的属性,(四)确定对象的服务,(五)确定对象/类的关系,二、面向对象的系统设计,三、面向对象的实施:使用面向对象语言Visual FoxPro 6.0为程序开发语言,简单的开发例子如下:,第三节 面向对象的系统开发实例,例1:建立不变数据文件(表),并输入若干数据,表结构如下:,文件:不变数据文件 文件名:BBSJWJ.DBF,第三节 面向对象的系统开发实例,例2:建立工资子系统一级菜单,模块结构如下:,第三节 面向对象的系统开发实例,例3:建立不变数据管理子菜单(表单名:BBSJGL),模块结构如上。,例4:建立不变数据查询程序(表单名:BBSJCX)。,最后运行,看效果。,第八章结束,第三节 面向对象的系统开发实例,
展开阅读全文