课程内容 - 海南大学 | Hainan University | www.hainu

信
息
科
学
技
术
学
院
陈
明
锐
教
授
主
讲
第八章 面向对象的系统开发方法
本章目标:
通过本章的学习,应掌握“面向对象”的基本概
念与特征,了解目前流行的四种“面向对象”的系统
开发方法。应对“面向对象”的系统开发有一个整体
的认识,通过一个简单的开发例子,为今后应用面向
对象系统开发打下基础。
第八章 面向对象的系统开发方法
引言
传统的“面向过程”的方法学是把世界分成两个部分,
分别认知:
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模型。
第三节 面向对象的系统开发实例
下面我们将以Coad&Yourdon的方法为基础,结合工资管
理实例,简要地介绍面向对象的系统开发过程。为了便于讲
述,对该例相应做了些简化。
一、面向对象的系统分析
(-)问题陈述
开发人员对问题域的陈述是系统分析的基础。用户最初
提出的要求通常都是不够明确和具体,有时甚至是很含糊
不清的。通过与用户不断交流,开发人员能够加深对问题
领域的认识,经过讨论、修改与补充,逐步明确与具体化,
获得对问题域详尽的陈述。现先将本例的要求说明陈述如
下:
工资管理系统主要对人员、工资数据来源、工资数据进
行管理,数据种类不多,数据的使用频率也不高,但准确
率要求高。
第三节 面向对象的系统开发实例
系统需要维护和提供的信息有:
(1)工资构成信息,包括标准工资、工资性津贴、经常性奖
金、加班加点工资、其它工资、各种代扣款项等;
(2)人员信息,包括职工编号、姓名、人员类别、单位等;
(3)工资数据来源信息,包括人事部门提供的人员变动资料、
科室班组填制并经劳动部门审核的考勤统计资料、生产车间
提供的产量和质量统计资料、总务后勤部门提供的房租、水
电费等代扣款资料、工会部门提供的储蓄、互助金、工会会
费、住房公积金等有关资料等;
(4)汇总核算信息,收集、汇总完上面所列这些工资数据后,
会计人员对每一职工的工资数据进行计算,得出每一职工的
实发工资,编制出工资结算单,并根据需要编制各种统计表;
(5)工资管理员信息,包括姓名、使用权限、密码等。
第三节 面向对象的系统开发实例
(二)识别对象/类(P195)
…
(三)确定对象的属性
…
(四)确定对象的服务
…
(五)确定对象/类的关系
…
二、面向对象的系统设计
…
三、面向对象的实施:使用面向对象语言Visual FoxPro 6.0
为程序开发语言,简单的开发例子如下:
第三节 面向对象的系统开发实例
例1:建立不变数据文件(表),并输入若干数据,表结构如下:
文件:不变数据文件 文件名:BBSJWJ.DBF
第三节 面向对象的系统开发实例
例2:建立工资子系统一级菜单,模块结构如下:
第三节 面向对象的系统开发实例
例3:建立不变数据管理子菜单(表单名:
BBSJGL),模块结构如上。
例4:建立不变数据查询程序(表单名:
BBSJCX)。
最后运行,看效果。
——第八章结束