第9章面向对象方法学

合集下载

第9章 面向对象的分析设计方法

第9章  面向对象的分析设计方法

第9章 面向对象的分析设计方法
9.1 面向对象的分析与设计方法概 述
面向对象技术是当前的热门话题,也是软件开发方法 的潮流和方向。面向对象方法的形成最初是从面向对象程 序设计语言开始的,随后才逐渐形成了面向对象的分析和 设计。面向对象是近几十年来国内外IT行业最为关注的技 术之一,面向对象技术是一种按照人们对现实世界习惯的 认识论和思维方式来研究和模拟客观世界的方法学。它将 现实世界中的任何事物都视为“对象”,将客观世界看成 是由许多不同种类的对象构成的,每一个对象都有自己的 内部状态和运动规律,不同对象之间的相互联系和相互作 用就构成了完整的客观世界。面向对象方法(Object Oriented,简称OO方法)克服了传统的功能分解方法只能 单纯反映管理功能的结构状态、数据流程模型只侧重反映 事物的信息特征和流程、信息模拟只能被动地迎合实际问 题需要等缺点,构成以系统对象为研究中心,为信息管理 系统的分析与设计提供了一种全新的方法。
第9章 面向对象的分析设计方法
面向对象方法就是以对象为中心、以对象为出发点的方 法。在应用领域中有意义的、与所要解决的问题有关系的任 何人或事物(即我们说的实体)都可以作为对象,它既可以 是具体的物理实体的抽象,也可以是人为的概念,或者是任 何有明确边界和意义的事物或东西。在面向对象方法中,对 象是一组数据(属性)和施加于这些数据上的一组操作代码 (操作)构成的独立类体。换言之,对象是一个有着各种特 殊属性(数据)和行为方式(方法)的逻辑实体。对象是一 个封闭体,它向外界提供一组接口界面,外界通过这些接口 与对象进行交互,这样对象就具有较强的独立性、自治性和 模块性,从而为软件的重用奠定了坚实的基础。
第9章 面向对象的分析设计方法
第9章 面向对象的分析设计方法 章

《实用软件工程》第9章 面向对象设计

《实用软件工程》第9章 面向对象设计

• 信息隐藏:对于类而言,其内部信息如属性的表示方法和操作的实现算法,对 外界是隐藏的。外界通过有限的接口来访问类的内部信息。
17
9.3.2 面向对象设计的原则
• 低耦合:在面向对象设计中,耦合主要指对象之间相互关联的紧密程度,低耦 合有利于降低一个模块改变对其他模块的影响。
• 高内聚:内聚与耦合密切相关,低耦合往往意味着高内聚,高内聚有助于提高 系统独立性。
但随着需求理解的加深,以及对系统认识程度的逐步 提高,设计人员还要对模型进行修正和完善。 • 设计任务管理子系统包括确定任务,分配任务,还包 括权衡一致性、成本、性能等因素以及未来可扩充性。 • 设计数据管理子系统,需要设计数据格式以及相应的 服务,设计数据格式的方法与所用的数据存储管理模 式密切相关,不同数据存储管理模式时,属性和服务 的设计方法是不同的。
9.2 面向对象设计与面向对象分析的关系
• 设计阶段的任务是及时把分析阶段得到的需求转变成符合各项要求的 系统实现方案。与传统的软件工程方法不同的是,面向对象的方法不强调 需求分析和软件设计的严格区分。实际上,面向对象的需求分析和面向对 象的设计活动是一个反复迭代的过程,从分析到设计的过渡,是一个逐渐 扩充、细化和完善分析阶段所得到的各种模型的过程。严格的意义上来讲, 从面向对象分析到面向对象设计不存在转换问题,而是同一种表示方法在 不同范围的运用。面向对象设计也不仅仅是对面向对象分析模型进行细化。
• (2)人机交互子系统包括有效的人机交互所需的显示和输入,这些类在很大程度上 依赖于所用的图形用户界面环境,例如Windows、Delphi、C++,而且可能包括“窗 口”、“菜单”、“滚动条”、“按钮”等针对项目的特殊类。
25
9.5.1 系统分解

面向对象方法名词解释

面向对象方法名词解释

面向对象方法名词解释
面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。

面向对象方法认为,对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。

而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。

所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。

面向对象方法作为一种新型的独具优越性的新方法正引起全世界越来越广泛的关注和高度的重视,它被誉为"研究高技术的好方法",更是当前计算机界关心的重点。

《软件工程导论》课后习题答案

《软件工程导论》课后习题答案
23:59:38
作业及解答(第3章)
• 数据结构的描述 符 号
= +
含 义
x = a+b


被定义为 与 或
[...,...] 或 [...|...] { ... }或 m{...}n (...) “...” ..
23:59:38
x = [a , b],x = [a | b] 重复 x = {a}, x = 3{a}8 可选 x = (a) 基本数据元素 x = “a” 连结符 x = 1..9
P1 记录存款信息
P2 打印存单 F5存款信息 F3存单 E1 储户 F4利息
F5存款信息 D1存款信息 F7密码 F2取款单
F5存款信息 P3 核算密码
F4利息 F4利息 F6取款信息 P6 设置利率 P4 计算利息
P5 打印利息清单 F8储蓄利率
E2 业务员
23:59:38
F8储蓄利率
F8储蓄利率
23:59:38
重庆工学院计算机科学与工程学院 李梁(liliang@) 李梁
作业及解答( 作业及解答(第3章)
23:59:38
重庆工学院计算机科学与工程学院 李梁(liliang@) 李梁
作业及解答( 作业及解答(第3章)
• 3-6 复印机的工作过程大致如下:未接到复印 命令时处于闲置状态,一旦接到复印命令则进 入复印状态,完成一个复印命令规定的工作后 又回到闲置状态,等待下一个复印命令;如果 执行复印命令时发现没纸,则进入缺纸状态, 发出警告,等待装纸,装满纸后进入闲置状态, 准备接收复印命令;如果复印时发生卡纸故障, 则进入卡纸状态,发出警告等待维修人员来排 除故障,故障排除后回到闲置状态。 • 请用状态转换图描绘复印机的行为。

第9章 面向对象编程习题及答案

第9章 面向对象编程习题及答案

1、关于python类说法错误的是:A 类的实例方法必须创建对象后才可以调用B 类的实例方法必须创建对象前才可以调用C 类的类方法可以用对象和类名来调用D 类的静态属性可以用类名和对象来调用答案:B2、如下类的定义,下列描述错误的是?class A(object):passclass B(A):passb=B()A、i sinstance(b,A)==TrueB、isinstance(b,object)==TrueC、i ssubclass(B,A)==TrueD、i ssubclass(b,B)==True答案:D3、定义类如下class Hello():def __init__(self,name)=namedef showInfo(self)print()下面代码能正常执行的:A、h = Helloh.showInfo()B、h = Hello()h.showInfo(‘张三’)C、h = Hello(‘张三’)h.showInfo()D、h = Hello(‘admin’)showInfo答案:C4、导入模块的方式错误的是:A、i mport moB、from mo import *C、i mport mo as mD、i mport m from mo答案:D5、以下关于模块说法错误的是:A、一个xx.py就是一个模块B、任何一个普通的xx.py文件可以作为模块导入C、模块文件的扩展名不一定是 .pyD、运行时会从制定的目录搜索导入的模块,如果没有,会报错异常答案:C6、多重继承的执行顺序,请解答以下输出结果是什么?并解释。

class A(object):def __init__(self):print('A')super(A, self).__init__()class B(object):def __init__(self):print('B')super(B, self).__init__()class C(A):def __init__(self):print('C')super(C, self).__init__()class D(A):def __init__(self):print('D')super(D, self).__init__()class E(B, C):def __init__(self):print('E')super(E, self).__init__()class F(C, B, D):def __init__(self):print('F')super(F, self).__init__()class G(D, B):def __init__(self):print('G')super(G, self).__init__()g = G()f = F()答案:GDABFCBDA7、编写程序,创建类Temperature,其包含成员变量degree(表示温度)以及实例方法ToFahrenheit(将摄氏温度转换为华氏温度)和ToCelsius(将华氏温度转换为摄氏温度),其中,(华氏度-32)*5/9=摄氏度,摄氏度*9/5+32=华氏度答案:class Temperature:def __init__(self, degree):self.degree = degreedef toFahrenheit(self):return self.degree*9/5 + 32def toCelsius(self):return (self.degree -32) * 5/9n1 = float(input("请输入摄氏温度:"))t1 = Temperature(n1)print("摄氏温度= {0:.2f},华氏温度= {1:.2f}".format(n1, t1.toFahrenheit()))n2 = float(input("请输入华氏温度:"))t2 = Temperature(n2)print("摄氏温度= {0:.2f},华氏温度= {1:.2f}".format(t2.toCelsius(), n2))8、定义一个至少有两个方法的类: getString:从控制台输入获取字符串 printString:打印输入字符串对应的大写形式。

面向对象方法学

面向对象方法学
2、软件生存期各阶段所使用旳措施、技术具有高度 旳连续性。 使用喷泉模型作为其工作模型,软件生存期各 阶段没有明显旳界线,开发过程回溯重叠,使用 相同旳描述措施和模型。
7
面对对象措施旳主要特点(续)
3、软件开发各个阶段有机集成,有利于系统旳稳定 性。 将OOA(Object-Oriented Analysis)、 OOD(Object-Oriented Design)、OOP(ObjectOriented Program)有机地集成在一起。
22
七、构造与连接
• 1、一般-特殊旳构造
又称为分类构造(classification structure), 由一组具有“一般-特殊”关系(继承关系)旳类 构成。是一种以类为结点,以继承关系为边旳连 通有向图。
单重继承构成旳类之间旳关系
交通工具
是层次构造(hierarchy
structure)是一棵树。
• 多态性增强了软件旳灵活性和重用性,允 许用更为明确、易懂旳方式去建立通用软 件,多态性和继承性相结合使软件具有更 广泛旳重用性和可扩充性。
18
四、消息
• 消息(Message)是指对象之间在交互中所传送旳 通信信息。一种消息应该包括下列信息:消息名、 接受消息对象旳标识、服务标识 、消息和措施、 输入信息、回答信息。使对象之间相互联络、协 同工作,实现系统旳多种服务。
• 一般一种对象向另一种对象发送信息祈求某项服 务,接受对象响应该消息,激发所要求旳服务操 作,并将操作成果返回给祈求服务旳对象。
• 注意:在并发系统中,多种控制线程(Thread of Control)并发执行,情况就复杂得多,消息能够 是发出服务祈求、提交数据、公布事件信息或是 传递同步控制信息。

第9章面向对象方法学

第9章面向对象方法学

(三) 面向对象的概念
1. 对象
在应用领域中有意义的、与所要解决的 问题有关系的任何事物都可以作为对象。 它既可以是具体的物理实体的抽象,也 可以是人为的概念,或者是任何有明确边界和 意义的东西。
客观世界的问题看成对象取决于应用的 视角和问题的性质。 当你在路上找人,你看到的对象就是流 动的人群; 当你需要出租车,你看到的对象就是过 往的车辆。
当对象 MyCircle 接受到这个消息后, 执行Circle类中所定义的 Show 操作。 注意: 1)消息由接受消息的对象来解释。 (MyCircle 就是接受消息的对象) 2)一个对象需要另一个对象服务时,就向 它发出请求服务的消息。这时,接受消息 的对象响应消息,触发所要求服务的操作 的方法来完成服务。
OO技术以对象(object)为核心,把静态 属性的数据,和对这些数据施加的操作封装在 一起所构成的统一体。
2. 稳定性好 面向对象的软件系统的结构是根据问题 领域的模型建立起来的。 (而传统方法是基于系统的功能的分解。) 当对系统的功能需求变化时并不会引起 软件结构的整体变化。因此,以对象为中心构 造的软件系统也是比较稳定的。
7. 封装(encapsulation) 从字面上理解,所谓封装就是把某个事物 包起来,使外界不知道该事物的具体内容。 对象具有封装性的条件如下: (1) 有一个清晰的边界。 (2) 有确定的接口。这些接口就是对象可 以接受的消息,只能通过向对象发送消息来使 用它。 (3) 受保护的内部实现。实现对象功能的 细节(私有数据和代码)不能在定义该对象的 类的范围外访问。
一. 传统方法学的问题
(一) 软件不能真正满足用户需求
1. 软件开发效率低 2. 软件不能满足“需求变化”、“需求模糊” 和“需求灵活性” 3. 软件重用度低 4. 软件仍然很难维护

第九章软件工程面向对象实现

第九章软件工程面向对象实现
着眼长远,反复考虑、精心设计。 主要准则: ① 提高方法的内聚 一个方法(服务)应只完成单个功能,若某个方法涉及两个或 多个不相关的功能,则应将其分解为几个更小的方法。
② 减小方法的规模 若某个方法规模过大(代码长度超过一页纸),即应将其分
解为几个更小的方法。 ③ 保持方法的一致性
一般而言,功能相似的方法应有一致的名字、参数特征(包括参数 个数、类型、次序)、返回值类型、使用条件及出错条件等。
同样,属性和关联也可分为公有和私有两大类,公有属性或关 联又可进一步设置为具有只读权限或只写权限两类。
3、提高健壮性
编写实现方法的代码时,既应考虑效率,也应考虑健壮性,通 常需要在健壮性与效率之间做适当的折衷。
作为软件不可忽视的质量指标。提高健壮性应遵守如下准则: ① 预防用户的操作错误
软件系统必须具有处理用户操作错误的能力。当用户在输入数据时发 生错误,不应该引起程序运行中断,更不应该造成“死机”。
若在执行过程中发现错误,仅返回执行状态。由于实现方法是自含式算法,相 对独立于具体应用,因此在其他应用系统中也可能重用它们。
为提高可重用性,在编程时不应将策略和实现放在同一个方法中,而应将算法 的核心部分放在一个单独的具体实现方法中。为此需要从策略方法中提取具体参 数,作为调用实现方法的变元。
⑤ 全面覆盖 若输入条件的各种组合都可能出现时,应针对所有组合写出方
2、提高可扩充性
上述提高可重用性的准则,也能提高程序的可扩充性。 此外,以下面向对象程序设计准则也有助于提高可扩充性。 ① 封装实现策略
将类的实现策略(包括描述属性的数据结构、修改属性的算法 等)封装起来,对外只提供公有的接口,否则将降低今后修改数 据结构或算法的自由度。 ② 避免用一个方法遍历多条关联链
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

--意义

允许每个对象以自己最合适的方式去响应共同的消 息,从而增强软件的灵活性和可复用性。
9.2 面向对象的概念

多态性的示例
海尔 长虹 TCL
9.3 面向对象建模
建立问题模型是人们理解表达问题的方法之一。 模型是对事物作出的一种抽象,是对事物的一
种形式化的描述。 模型常由专门的语言 (一组图示符号和规则)来 描述. 面向对象建模就是根据面向对象观点(模拟人类 习惯的思维方式)建立问题的解模式. 面向对象的 实现能将此模式在计算机上实施.
(2) 面向对象
UML还吸取了面向对象技术领域中其他流派的长处。UML符号表示 考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极 少使用的符号,也添加了一些新符号。 9.3 面向对象建模
(3) 可视化、表示能力强
事件指对象之间一次消息的传递

多个事件按照时间顺序可构成事件序列
消息 vs. 事件:静 vs. 动
9.2 面向对象的概念

消息与对象

一个对象能接收不同形式不同内容的多个消息。 相同形式的消息可以送往不同的对象。 对于相同形式的消息,不同对象可以有 不同的解释,可以作出 不同的反映。

消息与方法
面向对象方法是一种新的思维方法,它是把程 序看作是相互协作而又彼此独立的对象的集合。 这样就减小了语义断层:系统中解空间对象可以 直接模拟问题空间的对象,解空间与问题空间 的结构十分一致。

9.1 面向对象方法学概述
面向对象方法具有下述4个要点: (1)认为客观世界是由各种对象组成的,任何事物都 是对象,复杂的对象可以由比较简单的对象以某种 方式组合而成。因此,面向对象的软件系统是由对 象组成的。 (2)类(class)是对一组对象的抽象,集中了该组对象 的共同特性(一组数据和一组方法)。对象是类的 实例。
9.1 面向对象方法学概述
与传统方法相反,面向对象方法是一种以数据 或信息为主线,把数据和处理相结合的方法。 面向对象方法把对象作为由数据及可以施加在 这些数据上的操作所构成的统一体。 对象与传统的数据有本质区别,它不是被动地 等待外界对它施加操作,相反,它是进行处理 的主体。

9.1 面向对象方法学概述
9.2 面向对象的概念

类的两种图形记法:
类名 属性:
例: Teacher类
teacher
操作
Username Password
属性: classes 操作:
Addclass() Removeclass()
9.2 面向对象的概念

对象

状态:张三,30岁,计算机系,讲师,1000元 行为:提职称,调工资
统一建模语言UML
2000年 (计划的较小修订) 1999
<documents> UML 1.4 <documents> UML 1.3 <documents> UML 1.2 <documents> UML 1.1 <documents> UML1.0 <documents> UML 2.0
1998 1997年9月最后 提交给OMG 1997年1月最 初提交给 OMG 1996 1995
9.4 对象模型
对象模型表示静态的、结构化的系统的“数据” 性质。它是对模拟客观世界实体的对象以及对 象彼此间的关系的映射,描述了系统的静态结 构。
用UML表达的对象模型由类图(类和类间关系)构 成.
9.4.1 类图的基本符号
类图描述类及类与类之间的静态关系。类图是一种 静态模型,它是创建其他UML图的基础。一个系统 可以由多张类图来描述,一个类也可以出现在几张 类图中。 1. 定义类 UML中类的图形符号为长方形,用两条横线把长方 形分成上、中、下3个区域(下面两个区域可省 略),3个区域分别放类的名字、属性和服务,如 图9.5所示。
9.4.1 类图的基本符号 2. 定义属性
UML描述属性的语法格式如下: [可见性] 属性名: 类型名=初值 {性质串} ——类的属性中还可以有一种能被该类所有对象共享的 属性,称为类的作用域属性,也称为类变量。C++语言 中静态数据成员就是这样的属性,在类图中表示为带下 划线的属性。 例如:发货单类的类变量“货单数”: -货单数:Integer



在问题空间中……
“人以类聚,物以群分” 类代表着具有类似性质的一组对象 类中的每一个对象即为类的不同实例 (instance)
在解空间 (计算机系统) 中……



类是对一组对象的抽象,集中了该组对象的共同特性。 在构造软件时,类实际上是具有特定功能的模块,其代码由该 种所有对象所共享。 类 vs. 对象:静 vs. 动。

类 (教师)

属性:姓名,年龄,系别,职称,工资 操作:提职称,调工资 方法 (指操作的具体代码实现)

实际上,类是创建对象的模板!
9.2 面向对象的概念

消息和事件(message & event) 消息是对象之间进行通信的构造或结构

消息分为请求消息和完成消息两种 (由消息模式描述) 消息模式:发送对象、接收对象、内容
9.1 面向对象方法学概述

对象?(面向对象语言)
在问题空间中,对象是…… • 现实世界中存在的实体 • 应用所关心的抽象概念、规则、事件、或者具有明 确边界和意义的具体事物
在解空间 (计算机系统) 中,对象是…… • 问题空间中的对象在计算机系统中的表示 • 封装 (encapsulation) 了数据和行为的通信单位
9.1 面向对象方法学概述
•面向对象方法学的要点
现实世界
领域知识 抽象
生成知识 设计知识 模拟 解空间 (计算机系统) 实现域
问题空间 问题域
9.1 面向对象方法学概述

客观世界中的实体既具有静态的属性又具有动 态的行为。然而传统语言提供的解空间对象实 质上却仅是描述实体属性的数据,必须在程序 中从外部对它施加操作,才能模拟它的行为。
9.3 面向对象建模
面向对象方法需要建立3种形式的模型:
1)描述系统数据结构的对象模型 2)描述系统控制结构的动态模型 3)描述系统功能的功能模型
在不同的应用问题中,这3种模型的相对重要程度会有 所不同,对象模型始终都是最重要、最基本、最核心的。 典型的软件系统组合了上述3方面内容: 使用数据结构(对象模型),执行操作(动态模型),并且完 成数据值的变化(功能模型)。 本课程介绍UML作为描述这些模型的语言.
9.1 面向对象方法学概述

面向对象的方法学可以用下列方程来概括:
OO=objects +classes +inheritance +communication with messages
面向对象就是既使用对象又使用类和继承等机 制,而且对象之间仅能通过传递消息实现彼此 通信。 也可以说,只有同时使用对象、类、继承和消 息的方法,才是真正面向对象的方法。
交 互

注 释
用 对 构 实 类 例 象 件 施 图 图 图 图 图 节 点 顺 协 状 活 序 作 态 动 图 图 图 图
用 接 类 例 口
协 作
活 动 类
组 件
统一建模语言UML
(1) 统一标准
UML统一了Booch、OMT和OOSE等方法中的基本概念,已成为OMG的 正式标准,提供了标准的面向对象的模型元素的定义和表示。
9.4.1 类图的基本符号 2. 定义属性
UML描述属性的语法格式如下: [可见性] 属性名: 类型名=初值 {性质串} ——属性的[可见性]:
公有的(public) (+) 、 私有的(private) (-) 保护的(protected) (#) 注意: 没有默认的可见性。
——类型名表示该属性的数据类型,它可以是基本数据 类型,也可以是用户自定义的类型。 ——{性质串}明确地列出该属性所有可能的取值,也可 以说明属性的其他性质。 e.g. “+婚否:布尔=假{真,假}”
9.4.1 类图的基本符号
图9.5 表示类的图
9.4.1 类图的基本符号
为类命名时应该遵守以下几条准则: (1) 使用标准术语。 例如,“交通信号灯”比“信号单元”这个名字好, “传送带”比“零件传送设备”好。 (2) 使用具有确切含义的名词。 例如,“库房”比“房屋”或“存物场所”更确切。 (3) 必要时用名词短语作名字。 例如,“最小的领土单元”、“储藏室”、“公司员 工”等都是比较恰当的名字。 总之,名字应该是富于描述性的、简洁的而且无二义性的。
第九章 面向对象方法学引论
9.1 9.2 9.3 9.4 9.5 9.6 9.7 面向对象方法学概述 面向对象的概念 面向对象建模 对象模型 动态模型 功能模型 3种模型之间的关系
9.1 面向对象方法学概述
-- 源于20世纪60年代后期出现的面向对象编程语言 Simula-67(类和对象的概念),逐步形成了面向对象 方法学 。到了20世纪90年代,面向对象方法学已经 成为人们在开发软件时常选的范型。

9.2 面向对象的概念


对象 类 类间关系 消息与事件 多态性
9.2 面向对象的概念

对象 定义:是类的实例,是属性+方法封装在一起构 成的实体。 对象的三要素是:名称+属性+方法
例:三角形对象
triangle (10,50) (30,60) (20,30) Draw Move(Δx, Δy) Contains?(a point)
3. 定义服务 服务也就是操作,UML描述操作的语法格式如下: 可见性 操作名(参数表): 返回值类型{性质串} 参数表是用逗号分隔的形式参数的序列。描述一个参数的 语法如下: 参数名: 类型名=默认值 当操作的调用者未提供实在参数时使用默认值。 与属性类似,在类中也可定义类作用域操作:这种操作只 能存取本类的类作用域属性。 “- set_counters(Integer=0, Integer): Integer {-1,0}”
相关文档
最新文档