软件工程第六章面向对象方法概述讲解学习
第6章面向对象方法学引论

第6章 面向对象方法学引论 教学提示:本章主要讲述面向对象方法学的优缺点;面向对象的基本概念:对象、类、实例、消息、方法、封装、继承、多态性和重载等;面向对象的软件工程:OOA、OOD、OOP、OOT;面向对象的建模及对象模型、动态模型、功能模型;面向对象的开发方法。
教学要求:面向对象的基本概念,比较抽象,教学中要注意结合面向对象的高级语言举一些例子来更深刻地领会。
本章难点是面向对象的概念及特征和面向对象的模型。
掌握面向对象的基本概念及特征,面向对象的建模,面向对象的软件工程。
了解面向对象方法学的定义和优点,面向对象的开发方法。
面向对象的软件开发方法在20世纪60年代后期首次提出,经过将近20年这种技术才逐渐得到广泛应用。
到了20世纪90年代前半期,面向对象的软件工程方法学已经成为人们在开发软件时首选的范例。
今天看来,面向对象技术似乎是最好的软件开发技术6.1 面向对象方法学概述面向对象的技术是当前计算机界所关心的重点,是目前软件发展的主流。
面向对象的概念来自面向对象的程序设计语言,实际上,面向对象的概念和应用已经超越了程序设计语言,扩展到很宽的范围,如面向对象的数据库系统、面向对象的系统分析与设计、CAD 技术、人工智能以及其他广泛的应用范围。
6.1.1 面向对象方法的发展历程面向对象的方法的研究正在引起全世界越来越强烈的关注和高度重视,被誉为“研究最新技术的好方法”。
针对日趋复杂的软件需求的挑战,软件业界开始崇尚利用面向对象的方法和思想进行软件开发。
与人类发明史上的许多创举不同,面向对象不是瞬间出现的。
面向对象不是某个人的突发奇想,而是许多人经历多年研究积累的产物。
面向对象的方法起源于面向对象的程序设计语言。
在20世纪60年代中期Simula-67的设计者Dahl和Nygaard 提出对象(object)的概念,在程序设计语言中开始使用数据封装(data encapsulation)的概念。
第六章面向对象的分析和设计方法

之2面02向0/对10象/2设5 计
6.1 面向对象方法 6.1.2面向对象的软件工程
(3)面向对象的编程
面向对象的编程(OOP)又称作面向对象的实现 (OOI)。 OOP工作就是用同一种面向对象的 编程语言把OOD模型中的每个成分书写出来。
之2面02向0/对10象/2设5 计
6.1 面向对象方法 6.1.2面向对象的软件工程
6.1 面向对象方法 6.1.2面向对象的软件工程
面向对象的软件工程学是面向对象方法在软件工 程领域的全面运用。它包括面向对象的分析、面 向对象的设计、面向对象的编程、面向对象的测 试和面向对象的软件维护等主要内容。
之2面02向0/对10象/2设5 计
6.1 面向对象方法 6.1.2面向对象的软件工程
●属性是用来描述对象静态特征的一个数据项;
●服务是用来描述对象动态特征(行为)的一个操 作序列。
之2面02向0/对10象/2设5 计
6.1 面向对象方法 6.1.3 面向对象的基本概念和特征
2. 消息和方法 (1) 消息
消息就是向对象发出的服务请求,它应含有提供服 务的对象标识、服务标识、输入信息和回答信息。
06第六章面向对象的分析和 设计方法
之2面02向0/对10象/2设5 计
本次课主要内容
6 .1 面向对象方法 6. 2 面向对象的分析 6. 3 面向对象设计 6. 4实时软件设计 6. 5软件复用 6. 6用户界面的设计
之2面02向0/对10象/2设5 计
6.1 面向对象方法 6.1.1面向对象方法概述 6.1.2面向对象的软件工程(OOSE) 6.1.3面向对象的基本概念和特征
• 消息的接收者是提供服务的对象。
• 消息的发送者是要求提供服务的对象或其他系统成 分。
面向对象方法概述

张山 (instance)
Class 中国人 张山的 Attributes 李士 (instance) Class 杭州人 中国人李士的 Attributes 杭州人李士的 Attributes
首页
上页
下页
末页
退出
特点: 特点: 杭州人的 中有与中国人的同名, 中有与中国人的同名 若杭州人的 methods中有与中国人的同名,则 时以杭州人为 杭州人为准 不执行中 李士执行该 method 时以杭州人为准,不执行中 国人中定义的同名 国人中定义的同名 method。 。
OOD
OOP OOP
1.3.5 面向对象开发方法的组成
1、OOA法 OOA法
1、OOA法 OOA法 就是要解决“作什么”的问题。 就是要解决“作什么”的问题。OOA 法的基本任务就是要 建立三种模型: 建立三种模型: 对象模型(信息模型) 对象模型(信息模型) 定义构成系统的类和对象,它们的属性与操作。 定义构成系统的类和对象,它们的属性与操作。 状态模型(动态模型) 状态模型(动态模型) 描述任何时刻对象的联系及其联系的改变,即时序。 描述任何时刻对象的联系及其联系的改变,即时序。常 用状态图, 事件追踪图描述。 用状态图, 事件追踪图描述。 处理模型(函数模型) 处理模型(函数模型) 描述系统内部数据的传送处理。 描述系统内部数据的传送处理。 显然,在三大模型中,最重要的是对象模型。 显然,在三大模型中,最重要的是对象模型。
6.1.2 面向对象的基本概念
6.1.2 面向对象的概念
理解面向对象的基本概念对于学习和掌握面向对象的 开发方法是十分重要的。 开发方法是十分重要的。 对象(Object) 类(Class) Class) 继承(Inheritance) Inheritance) 消息(Information) 多态性(Polymorphism) 永久对象(Persistent object) 重载
06第六章:面向对象学导论

6.1.4 使用C++代码实现
void Circle :: Hide() //隐藏圆的函数的类外定义 { int TempColor; TempColor = getcolor(); setcolor(getbkcolor()); Visible = false; circle(X, Y, Radius); setcolor(TempColor); } Arc :: Arc(int InitX, int InitY, int InitRadius, int InitStartAngle, int InitEndAngle) : Circle(InitX, InitY, InitRadius) //类内已经说明了原型,在此进行函数体定义 { StartAngle = InitStartAngle; EndAngle = InitEndAngle; }
6.1.4 使用C++代码实现
void main() { //下面这两条语句用于初始化图形系统 int graphdriver = DETECT, graphmode; //DETECT进行显示器侦测 initgraph(&graphdriver, &graphmode, “..\\bgi”);//三个参数分别代表: // 图形示器、显示模式、路径 Circle c1(100,100,40),c2(200,300,20); //初始化两个圆的对象 Arc a1(400,150,50,30,120); //初始化一个弧的对象 c1.Show(); //显示圆c1 c2.Show(); //显示圆c2 a1.Show(); //显示弧a1 getch(); closegraph(); //关闭图形系统 }
图6.2 简单图形程序的类等级
第六章面向对象基础

6.1 面向对象方法概述
面向对象方法的基本思想是从现实世界中客 观存在的事物(即对象)出发,尽可能地运 用人类的自然思维方式来构造软件系统。
6.1 面向对象方法概述
它更加强调运用人类在日常的逻辑思维中经 常采用的思想方法与原则,例如抽象、分类、 继承、聚合、封装等,使开发者以现实世界 中的事物为中心来思考和认识问题,并以人 们易于理解的方式表达出来。
面向对象的发展历史
发展阶段
到80年代中后期,面向对象的软件设计和程序设 计方法已发展成为一种成熟有效的软件开发方法。 涌现了大批如C++、Objective-c、Object Pascal、 Actor、Eiffel等实用的面向对象编程语言 (OOPL),特别是C++语言已成为最为广泛的OOPL 相比而言,面向对象的分析技术发展得比较滞后。
6.2 面向对象基本概念
面向对象=对象+类+继承+通信
客观世界是由对象组成的,任何客观的事物或实 体都是对象,复杂的对象可以由简单的对象组成。
具有相同数据和相同操作的对象可以归并为一个 类,对象是对象类的一个实例。
类可以派生出子类,子类继承父类的全部特性 (数据和操作),又可以有自己的新特性。子类 与父类形成类的层次结构。
面向对象的软件工程方法
面向对象软件维护(OOSM)
在面向对象方法中,各阶段采用的表示是一 致的,从而大大降低了理解的难度,无论 是从程序中的错误追溯到问题域,还是需 求的变化都要从问题域追溯到程序,整个 过程都是平坦的。另外,对象的封装性使 得一个对象的修改对其他对象的影响很小, 不至于牵一发而动全身。
面向对象的发展历史
第六章面向对象的软件工程

30
1. 确定对象
运用前面介绍的方法确定系统中所有的对象及对象的属性和操作。 运用前面介绍的方法确定系统中所有的对象及对象的属性和操作。如家 庭安全系统: 庭安全系统:
继承意味着可以利用已有的定义、设计和实现, 继承意味着可以利用已有的定义、设计和实现,简 化了相似类的重复定义。实现了软件的可重用性。 化了相似类的重复定义。实现了软件的可重用性。
14
从结构上讲类是分层的,一个类的上层可以有超 从结构上讲类是分层的,一个类的上层可以有超 父类),下层可以有子类 继承具有传递性。 ),下层可以有子类, 类(父类),下层可以有子类,继承具有传递性。
Y1
Y2
Yn
Y
多重继承: 多重继承:
X
单重继承: 单重继承:
X
15
1 面向对象软件的开发过程
采用面向对象开发方法构造的软件具有以下特点: 采用面向对象开发方法构造的软件具有以下特点: 面向对象技术构造的模型与客观世界一致; 面向对象技术构造的模型与客观世界一致; 适应变化的需要,修改局限在模块中; 适应变化的需要,修改局限在模块中; 具有可复用性
26
Caod & Yourdon的设计模型 的设计模型
窗口 人机交互 界 面 问题域
系统交互 界 面 (任务 管理) 管理)
其它系统
设 备 数据管理 报告 处理器
数据库
27
应用框架结构 根据应用领域系统的特有结构划分子系统(模板、 根据应用领域系统的特有结构划分子系统(模板、 主题、抽象类的集合) 主题、抽象类的集合)。 然后设计细化每个子系统的对象模型、动态模型 然后设计细化每个子系统的对象模型、 和功能模型。 和功能模型。 如专家系统的典型结构: 如专家系统的典型结构:
软件工程 6 面向对象分析

建立用例图
第六章 面向对象分析
标题 用例名称: 用例标识号: 简要说明: 前置条件:
基本事件流:
其他事件流:
异常事件流:
后置条件:
编写用例描述
说明
借阅图书。
UC204
读者可通过此用例借阅图书,借阅成功后修改读者和图书的状态。
读者选择要借阅的图书。
⒈ 判断该读者的状态是否为正常。 ⒉ 判断该图书的状态是否为正常可借。 ⒊ 判断读者是否还能借阅图书,即是否已到最大借阅数。 ⒋ 上述条件都满足时,修改读者的状态和图书的状态,完成借阅过程。 ⒌ 用例结束。
需求人员事前准备 访谈内容的设计,列出大纲 访谈方式 可以全面了解用户的业务 不适用于大规模用户
访谈-用户访谈问题大纲第六章 面向对象分析
1. 用户情况
姓名:
(用户姓名)
公司及部门:
(用户所在公司及部门)
职务:
(用户在公司中的职务)
主要职责:
(用户在公司中所负的主要职责)
(注:多留些空白,以记录其他基本情况)
第六章 面向对象分析
访谈-用户访谈问题大纲(续)
4. 反馈理解情况 业务问题理解: 有否补充问题: 5. 询问非功能需求 可靠性预期: 性能预期: 维护和服务预期: 安全需求: 安装和配置需求: 其它需求: 6. 总结 访谈之后如何联系: 用户参加需求审阅: 需求优先级:
(对刚才询问用户的业务问题,用自己的话复述问题,以确认问题没有被误解) (用户对刚才的理解是否有需要补充之处)
用例向与之关联的角色输出什么信息? 用例需要对哪些硬件设备进行操作? 例:“图书借阅管理系统“中类的识别
第六章 面向对象分析
软件工程第章面向对象的概念与模型

7. 继承(Inheritance) 广义地说,继承是指能够直接获得已有的性质和
特征,而不必重复定义它们。在面向对象的软件技术
中,继承是子类自动地共享基类中定义的数据和方法
当一个类只允许有一个父类时,也就是说,当类 等级为树形结构时,类的继承是单继承;当允许一个 类有多个父类时,类的继承是多重继承。
2.
面向对象方法基于构造问题领域的对象模型,以 对象为中心构造软件系刻画实体间的
联系。因为面向对象的软件系统的结构是根据问题领 域的模型建立起来的,而不是基于对系统应完成的功 能的分解,所以,当对系统的功能需求变化时并不会 引起软件结构的整体变化,往往仅需要作一些局部性 的修改。例如,从已有类派生出一些新的子类以实现 功能扩充或修改,增加或删除某些对象等。总之,由 于现实世界中的实体是相对稳定的,因此,以对象为
面向对象的软件技术所实现的可重用性是自然的
4.
当开发大型软件产品时,组织开发人员的方法不 恰当往往是出现问题的主要原因。用面向对象范型开 发软件时,可以把一个大型产品看作是一系列本质上 相互独立的小产品来处理,这就不仅降低了开发的技 术难度,而且也使得对开发工作的管理变得容易多了。 这就是为什么对于大型软件产品来说,面向对象范型 优于结构化范型的原因之一。许多软件开发公司的经
综上所述,面向对象的方法学可以用下列方程来 OO=Objects+Classes+Inheritance+Communication with messages 也就是说,面向对象就是既使用对象又使用类和继承 等机制,而且对象之间仅能通过传递消息实现彼此通
6.2面向对象方法学的主要优点
1. 面向对象的软件技术以对象(Object)为核心,用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
▪ 尽量避免使用多重继承。 ▪ 继承的层次不宜太多
多态性
▪ 对不同的消息表现出不同的行为 ▪ 覆盖与重载
➢ 虚方法 ➢ 参数重载
参数数目不同 参数类型不同 参数类型顺序不同
软件工程
第17讲:面向对象方法
主讲人:阳王东 Email:yangwangdong@
主要内容
▪ 编程的沉思 ▪ 什么是面向对象 ▪ 面向对象的特征 ▪ 对象之间的关系
编程的沉思
▪ 编程存在重复劳动吗
➢ 机器替代了人手工的重复劳动 ➢ 程序则替代了人脑的重复性劳动 ➢ 编程无重复
▪ 程序中的世界
服
提供物品,
务
帐单,入库 、出库
属 商标,型号,
性 计量单位、价
抽象
格、数量
入库、销售 服 ▪ 子类自动地共享基类中定义的数据和方法的机制。
➢ 基类与派生类 ➢ 单继承与多重继承
▪ 继承的优点
➢ 减少原代码,即代码可重用。 ➢ 代码的相互独立性。 ➢ 易于维护。 ➢ 体现自然界之间的关系。
▪ 归纳关系体现为一种继承关 系
归纳关系(续)
组合关系
▪ 组合关系就是“整 体—部分”关系,它 反映了对象之间的构 成关系。组合关系也 称为聚集关系。
▪ 组合关系具有的最重 要的性质是传递性。 也就是说,如果A是B 的一部分,B是C的一 部分,则A也是C的一 部分
组合关系(续)
关联关系
▪ 关联关系反映对象之 间相互依赖、相互作 用的关系。通常把两 类对象之间的二元关 系再细分为一对一 (1∶1)、一对多(1∶M) 和多对多(M∶N)等三 种基本类型,类型的 划分依据参与关联的 对象的数目
➢
➢ 消息选择符(也称为方法名) ➢ 零个或多个参数值。
▪ 对象A向对象B发送消息f就是对象A调用对象B的 方法f
面向对象的特征
▪ 以数据为中心,抑或以行为为中心
➢ 分别用上述两种方式来描述人
▪ 封装性 ▪ 继承性 ▪ 多态性
封装性
▪ 封装性是把对象的属性和方法结合成一个独立的 单元,并尽可能荫蔽对象的内部细节。
学生 1..n
1 班级
1
班主任 1
关联关系(续)
▪ 链属性。关联链可以通过关联类来实现
班级
课程
课程表
对象模型实例
作业
▪ 利用面向对象的方法对项目的题目进行初 步业务对象分析和描述。
继承性(续)
▪ 车辆的继 承关系
▪ 动物科目
划分的一 灵长目
种继承关
系
人科
车辆
非机动车 机动车
哺乳动物
翼手目
食肉目
猴科
犬科
自行车 人力车 客车 卡车 拖拉机
鲸目
猫科
人
猩猩
狗 狼 狐猫 虎 豹
继承性(续)
▪ 不要滥用继承
➢ 如果类A和类B毫不相关,不可以为了使B的功 能更多些而让B继承A的功能。 人想拥有狗鼻 子的灵敏问题。
▪ 抽象类和接口
➢ 实现与继承
类与对象的描述
▪ (a)是表示类—&—对象的图形符号,(b)是表 示类的图形符号。
对象之间的关系
▪ 归纳关系 ▪ 组合关系 ▪ 关联关系。
归纳关系
▪ 归纳关系就是“一般—特珠” 关系,它反映了一个类与若 干个互不相容的子类之间的 分类关系。高层类(即基类) 说明一般性的属性,低层类 (即派生类)说明特殊属性。 低层类对象是某种特殊的高 层类对象,它继承了在高层 类中定义的属性和服务。
的封装体 ➢ 对象是一台自动机。 ➢ 对象∷=<ID,MS,DS,MI>
其中,ID MS DS MI是对象受理的消息名集合(即对外接口)
➢ 对象(Object)是类(Class)的一个实例(Instance)。
面向对象的基本概念(续)
▪ 消息,就是要求某个对象执行在定义它的那个类 中所定义的某个操作的规格说明。通常,一个消 息由下述三部分组成:
➢ Public,private,protected ➢ 避免访问内部数据 ➢ 尽量通过方法访问
▪ 优点
➢ 数据独立 (每个对象都对应于一个独立的地址空间) ➢ 具有隐藏性和安全性 ➢ 易于维护(由于数据独立,易于发现问题)
▪ 缺点
➢ 需要较多的输入输出函数
超市销售系统
仓库
商品
属 抽象 性
价格表,物品列 表, 帐单
➢ 经典的公式:数据结构+算法 ➢ 面向对象认为软件功能是通过一个个对象的行为来完
成的。
▪ 庖丁解牛的三重境界
眼中全牛,心中无牛 心中解牛 心中全牛
面向对象的基本概念
▪ 对象的定义
➢ 对象是具有相同状态的一组操作的集合。 ➢ 对象是对业务系统中某个东西的抽象,这种抽象反映了系统
保存有关这个东西的信息或与它交互的能力。 ➢ 对象是封装了数据结构及可以施加在这些数据结构上的操作