软件工程-面向对象方法学引论
软件工程课件 第九章(面向对象方法学引论)

例:发货单类的属性“管理员”的描述形式为: -管理员:String=“未定”
3. 定义服务(方法)
UML描述操作的语法格式:
可见性 操作名(参数表):返回值类型{性质串}
参数的语法:
参数名:类型名=默认
-Show(x:integer=0, y :integer, z :integer):integer
基本概念之继承
• 电视和DVD都要遥控器,但里面的按键不同,功 能也有不同,但是它们都是用来遥控的,所以我 抽象出一个抽象父类,抽象的功能就是遥控,而 电视的遥控器和DVD的遥控器就是继承了抽象父 类的遥控功能,至于怎么遥控由具体的子类来实 现,这就是继承的思想。
基本概念
• 当一个类从多个父类继承时,我们称之为 “多重继承”。
9.4 面向对象建模(掌握)
用面向对象方法开发软件,通常需要建立三
种形式的模型,它们分别是:
(1)对象模型:描述系统的数据结构;
(2)动态模型:描述系统的控制结构;
(3)功能模型:描述系统的功能。
3种模型必不可少,其重要程度不同,对象模型是最 基本、最重要的。
9.4 对象模型(描述系统的静态结构)
课题组
*
成员
1…*
教师
图9.10 共享聚集示例
2)组合聚集
部分类完全隶属于整体类,部分与整体共存,整体不存
在了部分也随之消失。
例子:
教材
包含
1+
封面
前言
目录
章
1+ 节
包含
习题
描绘教材结构的对象模型(组合聚集)
3. 泛化(继承)
1)普通泛化
抽象类:描述子类
的公共属性和行为,
软件工程导论class13面向对象方法学引论

第 9 章 面向对象方法学引论
发展概述
面向对象并非是一个新的概念,实际上它已有30 多年的历史。寻其根源可追溯到60年代的挪威, 当时挪威计算中心的Kristen Nygaard和OleJohan Dahl开发了一种称作Simula67的语言。 Simula67首次引入了类、协同程序和子类的概 念,这很象今天的面向对象语言。
使用类-对象-消息
面向对象(objects-based)方法
使用类-对象-消息-继承
9.1.2 面向对象方法学的优点
与人类习惯的思维方式一致 稳定性好 可重用性好 可维护性好 注意:OOM并不是减少了开发时间,而是
通过提高可重用性、可维护性,进行扩充和 修改的容易程度等,从长远角度改进了软件 的质量。
解空间与问题空间的“语义断层” 对象 解空间对象和问题空间对象 解空间对象的呆板 问题空间对象具有静态属性又具有动态行为
OOM的4个要素
(1)对象(object):世界由对象组成。
(2)类(class) :具有相同属性和操作的对象 可划分为类; 单个对象可视为某一类的实例 (instance)
派生类只要理解新生部分,理解量少
(4)容易测试、调试
调试只对新派生类进行,类独立性强,只对 类内部进行调试,比较容易。
9.2 面向对象的概念
9.2.1 对象
在应用领域中有意义的、与所要解决的问题 有关系的任何事物都可以作为对象,对象既 可以是具体的物理实体的抽象,也可以是人 为的 概念,或者是任何有明确边界和意义的 东西。
4 较易开发大型软件产品
构成软件系统的每个对象就象一个微型程序, 有自己的数据、操作、功能、用途。把一个 大型软件产品分解成一系列本质上相互独立 的小产品处理,降低了技术难度。
软件工程导论课件第9章-面向对象方法学引论(第六版)(张海潘编著)

27
9 . 4 对象模型
描述系统内部对象的静态结构,包括对象本身的 定义、对象的属性和操作、以及对象与其它对象 之间的关系。
对象模型为建立动态模型和功能模型,提供了实 质性的框架。
UML 中,对象模型通常由“类图”组成。
28
9.4.1 类图的基本符号
1、定义类
类的图形符号 为长方形;
用两条横线把 长方形分成上、 中、下3个区域;
a的子类图的子类图94实现继承机制的原理继承举例人员姓名性别出生日期进校离校23教职工继承职工号工资挣工资学生继承学号专业选课研究生继承课题方向研究工作教师继承职称教课职员继承职务管理事务8多态性polymorphism多态性指子类对象可以象父类对象那样使用同样的消息既可以发送给父类对象也可以发送给子类对象
对象中的数据表示对象的状态,一个对象的状态只 能由该对象的操作来改变。
每当需要改变对象的状态时,只能由其他对象向该 对象发送消息。
对象响应消息时,按照消息模式找出与之匹配的方 法,并执行该方法。
12
2、对象的定义
从动态角度或对象的实现机制来看,对象是一台动机来模
拟:
具有内部状态S,操作fi(i=1,2,…,n),且与操作fi对应 的状态转换函数为gi(I=1,2,…,n)的一个对象。
9.2.2 其他概念
1、类(Class) 类就是对具有相同数据和相同操作的一组相似
软件工程 第9章 面向对象方法学引论

面向对象方法学:到了20世纪90年代,面向对 象方法学已经成为人们在开发软件时首选的 范型。面向对象技术已成为当前最好的软件 开发技术。
向过程开发模式中优先考虑的是过程抽 象,在面向对象开发模式中优先考虑的是实 体(问题论域的对象)。 在面向对象开发模式中,把标识和模型化问 题论域中的主要实体做为系统开发的起点, 主要考虑对象的行为而不是必须执行的一系 列动作。
9.1 面向对象方法学概述
9.1.1 面向对象方法学的要点
出发点和基本原则是尽可能模拟人类习 惯的思维方式,使开发软件的方法与过 程尽可能接近人类认识世界解决问题的 方法与过程,也就是使描述问题的问题 空间与实现解法的解空间在结构上尽可 能一致。
面向对象方法学的四个要点
认为客观世界是由各种对象组成的,任何 事物都是对象,复杂的对象可以由比较 简单的对象以某种方式组合而成。 面向对象方法用对象分解取代了传统方法 的功能分解。
从动态角度或对象的实现机制来看,对象是一台自 动机。具有内部状态S,操作fi(i=1,2,…,n),且与 操作fi对应的状态转换函数为gi(i=1,2,…,n)的一个 对象,可以用图9.3所示的自动机来模拟:
图9.3 用自动机模拟对象
3 对象的特点
1、以数据为中心。操作围绕对其数据所需做的处 理来设置,而且操作的结果往往与当时的所处的 状态(数据值)有关。 2、对象是主动的。程序不能直接从外部直接加工 它的私有数据。 3、实现了数据封装。数据对外隐藏,不可见。 4、本质上是并行的。不同对象各自独立地处理自 身的数据,彼此通过发消息传递信息完成通信。 5、模块独立性好。对象内部各种元素彼此结合得 很紧密,内聚性相当强。对象的元素(数据和方 法)基本上都被封装在对象内部,与外界的联系 少,对象之间的耦合较松。
软件工程 第09章 面向对象方法学引论

OOM:以object 为核心,强调对现实概念的模拟而不 强调算法。“面向对象方法学的基本原则, 是按照人们习惯的思维方式建立问题域的模 型,开发出尽可能直观、自然地表现求解方 法的软件系统”。 Class:由特殊到一般的归纳(induction) Inheritance:由一般到特殊的演绎(deduction)
(3) 按照父类(或称为基类)与子类(或称为派生类)的关 系,把若干个相关类组成一个层次结构的系统(也称 为类等级)。在类等级中,下层派生类自动拥有上层 基类中定义的数据和操作,这种现象称为继承。
(4) 对象彼此间仅能通过发送消息互相联系。 也就是说,对象的所有私有信息都被封装在该对象内, 不能从外界直接访问,这就是通常所说的封装性。
fi(X)
§2.基本概念
f1 f2 f3 …… fi
……
fn
gi(X,S)
输 出
S’
输 出
.
对象的几个定义:
(1) 定义1: 对象是具有相同状态的一组操作的集合。 主要是从面向对象程序设计的角度看“对象”。
(2) 定义2: 对象是对问题域中某个东西的抽象,这种 抽象反映了系统保存有关这个东西的信息或与它交互 的能力。也就是说,对象是对属性值和操作的封装。
.
④ 传统方法:可维护性是最令人头痛的问题。 OOM:从以下几方面改善了可维护性 ——
• 稳定性好:软件功能需求的变化不牵动全局, 只需局部修改;
• Class 独立性强:只要修改不涉及class的对外 接口,则内部修改完全不影响外部调用;
• Inheritance和多态性(polymorphism)使其很容 易被修改和扩充;
09面向对象方法学引论

对象模型
表示关系的符号
关系种类 – 关联
–
–
关联的属性
进一步说明对象间关联的性质
对象模型
表示关系的符号
关系种类 – 聚合(聚集)
– – 一种“整体与成员”的关系。表示整体类的那一端增加一个菱形框。 包括共享聚合和组合聚合。
对象模型
表示关系的符号
关系种类 – 泛化
– – 继承性的体现。 通常包含一个基类和几个子类。基类表示较为一般、普通的概念; 子类则继承基类的属性和操作,但又具有自身的属性和操作。
面向对象方法学概述
面向对象软件的工程
按人类习惯的思维方法,以现实世界中客观存在的事 物(即对象)为中心来思考和认识问题。 采用的思想方法与原则:抽象、分类、继承、聚合、 封装等。 以易于理解的方式表达软件系统,建立问题域模型, 使设计出的软件尽可能直接地描述现实世界,具有更 好的可维护性。 面向对象=对象+类+继承+通信 如果一个软件系统采用这些概念来建立模型并予 以实现,那么它就是面向对象的。
面向对象概念
其他概念
继承(inheritance) – 在现存类定义的基础上,建立新定义类的技术。 – 新类的定义可以是现存类所声明的数据、定义与新 类所增加的声明的组合。新类复用现存类的定义, 而不要求修改现存类。 – 现存类可当作父类(泛化类、基类或超类)来引用 , 则新类相应地可当作子类(特化类、子女类或派生 类)来引用。 – 实现继承机制的原理
软件工程第9章 面向对象方法引论(简版)PPT课件

下篇:面向对象方法学:面向对象方法学: 面向对象方法学:面向对象方法学:面向 对象方法学:面向对象方法学:面向则以功能分解为结构的软件结构也易变;
对象稳定则由对象组成的系统也稳定;
下篇:面向对象方法学:面向对象方法学: 面向对象方法学:面向对象方法学:面向 对象方法学:面向对象方法学:面向对象
方法学
单9.1.击2 面此向对处象方编法学辑的优母点 版标题样 式1. 与人类习惯的思维方法一致
用对象表达现实世界中的事物或实体是最完美、最自然、 最习惯的思维和表达方式;
面向对象的解空间(软件)是模拟问题空间的最自然、 最习惯的思维和表达方式:
2) 对象类或类:类是对相似对象的抽象和描述,每个类都定义了 一类相似对象的一组数据和一组方法,用于标识和划分各种不 同类型的对象。人以群分,物以类聚。
3) 继承是一种先进的思想和机制:继承就是子类获取或共享父类 信息属性和行为特征的一种机制;继承关系形成了一个类层次 结构,是抽象、归纳和演绎的完美体现和实现。
下篇:面向对象方法学:面向对象方法学: 面向对象方法学:面向对象方法学:面向 对象方法学:面向对象方法学:面向对象
方法学
单击此处编辑母版标题样 4) 对象彼此之间仅能通过传递消息互相联系:对象实现了信息的隐藏 式和封装。对象彼此之间必须通过消息机制实现通信,即一个对象必须
通过给另一个对象发送消息,请求它执行其内部的某个处理对其私有 数据进行操作,并给出结果,而绝不能从外界直接对其它对象的私有 数据进行操作。 面向对象的方法学可以用下列方程来概括: OOM=objects+classes+inheritance+communication with messages
张海藩《软件工程导论》(第6版)(课后习题 第9章 面向对象方法学引论)【圣才出品】

第9章面向对象方法学引论1.什么是面向对象方法学?它有哪些优点?答:(1)面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致的方法学科。
(2)面向对象方法学优点:①与人类习惯的思维方法一致。
②面向对象软件稳定性好。
③面向对象软件可重用性好。
④较易开发大型软件产品。
⑤可维护性好。
2.什么是“对象”?它与传统的数据有何异同?答:(1)对象是对问题域中某个实体的抽象。
(2)相对于传统数据结构的静态被处理,对象既有静态的属性,也有动态的行为,是进行处理的主体。
3.什么是“类”?答:类是对具有相同数据结构和相同操作的一组组相似对象的定义,即类是对具有相同属性和行为的一个或多个对象的描述,包括对怎样创建该类的新对象的说明。
4.什么是“继承”?答:继承是指能够直接获得已有的性质和特征,而不必重复定义它们。
在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。
5.什么是模型?开发软件为何要建模?答:(1)模型是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。
模型是一种思考工具,利用这种工具可以把知识规范地表示出来。
(2)由于建模忽略了事物的非本质属性,因此模型比原始事物更容易操作。
对于那些因过分复杂而不能直接理解的系统,特别需要建立模型,模型通过吧系统的重要部分分解成人的头脑一次能处理的若干个子部分,从而减少了系统的复杂程度。
6.什么是对象模型?建立对象模型时主要使用哪些图形符号?这些符号的含义是什么?答:(1)对象模型表示静态的、结构化的系统的数据性质。
它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
(2)通常使用UML提供的类图来建立对象模型。
(3)在UML中“类”的实际含义是。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这样做就比较容易地建立起用例模型。
4.用例之间的关系 扩展关系和使用关系,它们是泛化关系的两种不同形式。
1) 扩展关系 向一个用例中添加一些新的动作后构成了另一个用例,
三种模型之间的关系
1)针对每个类建立的动态模型, 描述了类实例的生命周期或运行周期。
2)状态转换驱使行为发生, 这些行为在数据流图中被映射成处理,
在用例图中被映射成用例, 它们同时与类图中的服务相对应。 3)功能模型中的处理(或用例)对应于对象模型中的
类所提供的服务。 有时一个处理(或用例)对应于多个服务, 也有一个服务对应多个处理(或用例)的时候。
通常下层的派生类具有和上层的基类相同的特性 (包括数据和方法)。
4) 对象彼此之间仅能通过传递消息互相联系。
6.1.2面向对象方法学的优点
• 1. 与人类习惯的思维方法一致 • 2. 稳定性好 • 3. 可重用性好 • 4. 较易开发大型软件产品 • 5. 可维护性好
9.2面向对象的概念
• 9.2.1对象 • 1. 对象的形象表示
对象模型为建立动态模型和功能模型,提供了实质 性的框架。
国际上UML(Unified Modeling Language;统一建 模语言)作为面向对象技术的标准建模语言。
通常,使用UML提供的类图来建立对象模型。
9.4对象模型
9.4.1类图的基本符号 • 1. 定义类
类名
Circle(圆)
属性 操作(服务)
接口),符合高内聚、低耦合的设计原则。
9.2.2其他概念
• 1. 类(class) • 2. 实例(instance) • 3. 消息(message) • 4. 方法(method) • 5. 属性(attribute) • 6. 封装(encapsulation) • 7. 继承(inheritance) • 8. 多态性(polymorphism) • 9. 重载(overloading)
圆心坐标 :float 半径 :integer 填充的颜色:color
显示() 放大缩小() 移动() 改变颜色()
2.定义属性 UML描述属性的语法格式如下: 可见性 属性名:类型名=初值{性质串} 属性有可见性(Visibility,即可访问性)。 利用可见性可以控制访问权限,
即,外部事物对类中属性的操作方式。 1) 公有的(public,+):
2.用例(Use Case)
一个用例代表的是系统的一个完整的功能。 用椭圆表示用例,通过关联与行为者连接, 关联指出一个用例与哪些行为者交互。
用例的特征: 1)用例代表某些用户可见的功能,实现一个具体的用户目标; 2)用例总是被行为者启动的,并向行为者提供可识别的值;
3)用例必须是完整。 注意:用例是一个类(不是实例),它代表一类功能。
及数据源点/终点的结构。
9.7 三种模型之间的关系
面向对象建模技术建立了对象模型、功能模型、动 态模型三种模型。
它们相互补充、相互配合,使得我们对系统的认识 更加全面。
其中,对象模型是最基本的、最重要的。 对象模型:定义了做事情的主体;
功能模型:指明了系统应该“做什么”; 动态模型:明确规定了什么时候做
(即在何种状态下接受了什么事件的触发)
图9.1对象的形象表示
• 2. 对象的定义 对象是封装了数据结构及可以施加在这些 数据结构上的操作的封装体。
图9.2用自动机模拟对象
• 3.对象的特点 1)以数据为中心。
对象的操作是针对属性(数据)变化的要求来设计的,操作 的结果往往与对象当前的属性有关。
(操作:增加工资50,1000+50)
2)对象是主动的。 对象是进行处理的主体,对象的属性通常是由该对象自己的操作改变 的。
• 动态模型的构成:把每个类的状态图用共 享事件连接起来,将构成系统的动态模型。 即动态模型是基于事件共享而互相关联的 一组对象状态图的集合。
3.6节介绍状态图
9.6 功能模型
功能模型表示变化的系统的“功能”性质,它指明 了系统“做什么”。
直接地反映了用户对目标系统的需求(做什么)。
传统方法学中 ,功能模型由一组数据流图组成。 在OO方法学中,数据流图不如在结构化分析、 设计方法中那样重要,但是,建立功能模型有 助于更深入地理解问题域,改进和完善自己的 设计。
可见性 属性名:类型名=初值{性质串}
3. 定义服务 服务也就是操作。
UML描述操作的语法格式如下: 可见性 操作名(参数表):返回值类型{性质串}
9.4.2表示关系的符号
• 1. 关联
• 3.泛化
• 4. 依赖和细化
9.5动态模型
• 动态模型表示瞬时的、行为化的系统的 “控制”性质,它规定了对象模型中的对 象的合法变化序列。
3) 实现了数据封装。 私有数据完全被封装在对象内部,对外是隐藏的、不可见的,对私有数 据的访问或处理只能通过公有的操作进行。
4) 对象本质上具有并行性。 不同对象各自独立地处理自身的数据,彼此通过发送消息完成通信。
5) 模块的独立性好。 对象是面向对象的软件的基本模块。对象之间联系比较少(只通过公共
这两个用例之间关系就是扩展关系, 后者继承前者的一些行为,但做某些改动。
前者:基本(通用化)用例, 后者:扩展用例。
售货 (罐装饮料)
常规动作 基本用例
《扩展》
售散装饮料 (纸杯)
非常规动作 扩展用例
2)使用关系 当一个用例使用另一个用例时, 这两个用例之间构成了使用关系。
供货
开始动作 《使用》
打开机器
第10章 面向对象方法学引论
6.1面向对象方法学概述
6.1.1面向对象方法学的要点
面向对象方法学的4个要点:
1)认为客观世界是由各种对象组成的,任何事物都是对象。 面向对象的软件系统是由对象组成的,软件中的任何元素 都是对象,复杂的软件对象由比较简单的对象组合而成。 OO方法用“对象分解”取代了传统方法的“功能分解”。
2)把所有对象都划分成各种对象类(类), 每个对象类都定义了一组数据和一组方法。 数据:表示对象的静态属性,是对象的状态信息。 方法:施加于该类对象上的操作,是该类所有对象
共享的。
3)按照子类(或派生类)与父类(或基类)的关系, 把若干个对象类组成一个层次结构的系统(类等级)。 继承:在类的层次结构中,
UML提供的用例图也是进行需求分析和建 立功能模型的强有力工具。
用用例图建立起来的系统模型称为用例模型。 用例模型描述的是外部行为者(actor)所理解
的系统功能。 功能模型可以由数据流图和用例图来描述。
9.6.1 用例图
一幅用例图包含的模型元素有系统、行为者、用 例及
自动售货系统 用例之间的关系。
顾客 供货人 收款员
售货 供货 取货款
① 方框:代表系统 ② 椭圆:代表用例 (售货、供货、取货款是
自动售货机系统的 典型用例) ③ 人形:代表行为者 ④ 连线:表示行为者之间和
用例之间的的关系。
自动售货机系统的用例图
1.系统 系统被看作是一个提供用例的黑盒子。
① 方框的边线表示系统的边界, 用于划定系统的功能范围, 定义了系统所具有的功能。 ② 用例置于方框内, ③ 行为者置于方框外。
《使用》
最后动作
关闭机器
图9.17 含扩展和使用关系的用例图
9.6.2 用例建模
通过用例可以获取用户需求。 获取用例是需求分析阶段的主要的工作之一,
是首先要做的工作。 大部分用例将在需求分析阶段产生, 随着开发的深入还会发现更多用例。 一个用例模型由若干幅用例图组成。 创建用例模型的关键是:寻找行为者和用例。
能够被系统中其它任何操作查看、使用或修改。 2)私有的(private,-):
① 仅在类内部可见,只有类内部的操作才能存取该属性 ② 该属性不能被其子类使用。
3)保护的(protected,#): ① 供类中的操作存取, ② 该属性能被其子类使用。 属性有类型。如,整型、实型、布尔型、杖举型等
等。 例如“发货单”类: +日期:Data=当天日期 +状态:Status=unpaid{unpaid,paid}未付款,付款 -管理员:String 通常把用例的实例称为脚本。
脚本是系统的一个具体的执行过程。
3.行为者( Actor:参与者、活动者)
行为者是指与系统交互的人或其他系统,它代表外部实体。 使用用例并且与系统交互的任何人或物都是行为者。
行为者代表一个角色,而不是某个具体的人或物。 一个具体的人可以充当多种不同角色。 (张三,收钱->收款员、买饮料->客户) 在用例图中用直线连接行为者和用例, 表示两者之间交换信息,称为通信联系。
9.3面向对象建模
在面向对象方法中要建立三种模型:
对象模型:描述系统数据结构;类图 动态模型:描述系统控制结构;状态图 功能模型:描述系统功能;用例图。
一个典型的软件系统组合了三个方面的内容: 它使用数据结构(对象模型),执行操作(动态模型), 并且完成数据值的变化(功能模型)。
9.4对象模型
对象模型表示静态的、结构化的系统的“数据”性 质。
4)数据流图中的数据存储,以及数据的源点/终点, 通常是对象模型中的对象。
5) 数据流图中的数据流,往往是对象模型中的对象的 属性值, 也可能是整个对象。
6) 用例图中的行为者,可能是对象模型中的对象。 7) 功能模型中的处理(或用例)可能产生动态模型中
的事件。 8) 对象模型描述了数据流图中的数据流、数据存储以