第1章面向对象概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
封装的信息屏蔽作用反映了事物的相对独立性, 我们可以只关心它对外所提供的接口,即能够提 供什么样的服务,而不用去关注其内部的细节问 题。
3. 继承 继承性是面向对象程序设计语言不同于其他语言的 最主要特点。 继承是指子类可以自动拥有父类的全部属性与操作 的机制。 继承意味着“自动地拥有”,即在特殊类中不必重 新对已经在一般类中所定义过的属性和行为进行定 义,而是特殊类自动地、隐含地拥有其一般类的属 性和行为。 继承对类的重用性,提供了一种明确表述共性的方 法。即一个特殊类既有自己定义的属性和行为,又 有继承下来的属性和行为。
UML基础 与Rose建模实用教程
清华大学出版社
面向对象概述 本章首先介绍了面向对象的基本概念,并 与面向过程进行对比,然后具体到面向对 象的基本特征和实际的方法论技术,最后 对为什么使用UML建模进行简要介绍。
面向对象=对象+类+继承+通信
两种程序设计方法
程序设计的两次飞跃
结构化程序设计
提供构造系统的模板。 记录决策。
建模的原则 (1)仅当需要时,才为业务或软件系统构建模型。
(2)按照实际情况或按我们需要的样式,对业务或软 件系统进行建模。
(3)依据解决方案,来构造需要的模型。
(4)最好用一组相对独立的模型,从不同的侧面,描 述重要的业务或软件系统。
用什么工具建模? 面向对象的建模语言—统一建模语言UML Booch (Grady Booch) OOSE(Jim Rumbaugh)
使用下列标准删除不必要和不正确的关联:
• 如果某个类被删除,则与它有关的关联也应该删去, 或用其他对象重新表达这个关联。
• 与问题无关的或应在实现阶段考虑的关联。
• 关联应该描述问题域的静态结构,而不应该描述一 个瞬时事件。
• 应该删除那些可以用其他关联定义的冗余关联。
(4)确定属性
属性是个体对象的性质,通常利用修饰性的名词 词组来表示。
一个对象的实例图解
1.1.2 面向对象与面向过程的区别 结构化程序设计:其思想是把大的程序分解为具有 层次结构的若干个模块,每个模块再分解为下一层 模块,如此自顶向下,逐步细分,从而把复杂的大 模块分解为许多功能单一的小模块。其特征是以函 数/功能为中心,自上而下,先确定程序的流程怎 么走,函数间的调用关系和依赖关系是什么。
1.1.2 面向对象与面向过程的区别 面向对象:以对象为基础,以事件或消息来驱动对 象执行处理的程序设计技术。是自下而上的程序设 计方法,其特点是:从问题的一部分着手,一点一 点地构建出整个程序。在设计中以数据为中心,使 用类作为表现数据的工具。
1.1.3 对象与类的确定
对象(Object)是由状态(Attribute)和行为 (Behavior)构成的,是包含客观事物特征的抽象实体, 封装了状态和行为。 • 对象=数据+数据操作
void brake() { … } void speedUp() {…}; void slowDown() { … } }
的对象的原型
类的定义需要包含以下要素:
• 定义该类对象的数据结构(属性的名称和类 型)。
• 对象所要执行的操作,即类的对象要被调用执 行哪些操作以及进行这些操作时对象还要执行 哪些操作,如数据库操作等。
1.1.4 消息和事件
消息(Message)是指描述事件发生的信息,是对象 间相互联系和作用的方式。
一个消息由三部分组成:
• 1. 接受消息的对象 • 2. 要完成方法的名字
• 3. 方法需要的参数
• aStudent.setName("陈浩然");
事件通常是指一种由系统预先定义而由用户或系统 发出的动作。事件作用于对象,对象识别事件并作 出相应反应。
自底向上也称为从特殊类发现一般类。
? 公司职员 姓名 身分证号码 …… …… 股东 股份 …… …… 职员 工资 …… ……
股东 姓名 身分证号码 股份 …… ……
职员 姓名 身分证号码 工资 …… ……
(2)自顶向下:将现有的类细化为更具体的类。具 体化常常可以从应用域中明显看出来。 自顶向下也称为从一般类发现特殊类。
继承的描述
单重继承和多重继承的描述
4. 多态性
定义:同一操作作用于不同的对象,可以有不 同的解释,产生不同的执行结果。
1.3 面向对象方法论
1.3.1 面向对象分析
目的:认知客观世界的系统并对系统进行建模。 构造分析模型的用途:明确问题域的需求、为用户 和开发人员提供明确需求、为用户和开发人员提供 一个协商的基础,并作为后继的设计和实现的框架。 需求分析的结果应以文档形式存在。(软件需求规 格说明书)
公司职员 姓名 身分证号码 …… ……
股东 股份 …… …… ? 职员 工资 …… ……
公司职员 姓名 身分证号码 股份 工资 …… ? ……
(5)完善对象模型
对象建模不可能一次就能保证模型是完全正确的, 软件开发的整个过程就是一个不断完善的过程。
模型的不同组成部分多半在不同阶段完成,如果 发现模型的缺陷,就可以返回到前期阶段去修改, 有些细化工作是在动态模型和功能模型完成之后 才开始进行的。
多态性
1. 抽象
抽象忽略了事件中与当前目标无关的非本质特征, 强调与当前事物相关的特征,并将事物正确的归 类,得出事物的抽象模型,并且为对象的重用提 供了保障。
2. 封装
封装是面向对象方法的一个重要原则。 封装有两个含义:
① 结合性:将对象的全部状态和行为结合在一起, 形成不可分割的整体。其私有属性只能由对象 的行为来修改和读取。 ② 信息隐蔽性:尽可能隐蔽对象的内部细节,与 外界的接口只能通过外部接口来实现。
(1)标识和确定类
标识出来自问题域的相关对象类,这些对象类包 括物理实体和概念的描述。 确定类的过程:
需求说明 选取相关名词 暂定类 过滤不符合类 类
查找问题陈述中的所有名词,将产生如下的暂定 类:软件、图书管理信息系统、图书管理员、借 阅者、老师、学生、帐号、图书信息、书刊名、 书刊的ISBN/ISSN号等。
3. 建立对象的动态模型 准备脚本确定事件准备事件跟踪表构造状态 图 4. 建立系统的功能模型
1.3.2 面向对象设计
面向对象设计是把分析阶段得到的需求转变成符 合成本和质量要求的、抽象的系统实现方案的过 程。 面向对象设计分为:
• • 系统设计:用于确定实现系统的策略和目标 系统的高层结构。 对象设计:用于确定问题解空间中的类、关 联、接口形式及实现操作的算法。
设计结果清晰易懂,结构的深度适当,类小,消 息中参数少,设计的变动少。
1.4 面向对象建模 什么是模型?
模型就是现实的简单化。
这些模型是用图形符号对现实世界中某个事物的模 仿或仿真。
为什么要建模?
建模是为了能够更好地理解正在开发的系统。 • 建模的目标 : 便于展现系统。
•
• •
允许指定系统的结构或行为。
确定属性需注意:
• 只考虑与具体应用直接相关的属性。 • 避免只用于实现的属性。
• 为每个属性起一个有意义的名字。
(5)使用继承来细化类
使用继承来共享公共属性,以此来对类进行组织。
可以使用下述两种方法建立继承关系: (1)自底向上:通过把现有类的共同性质一般化为 父类,寻找具有相似的属性关系或操作的类来发 现继承。
(2)准备数据字典
数据字典应当准确描述各个类的精确含义,描述 当前问题中的类的范围。
例如:图书信息=BookID (图书编码)+ BookType (图书类别)+ BookName (书刊名) + Auth (作者)+ Publisher (出版社)+ Price (单价)+ PubDate (出版日期)
查找问题陈述中的所有名词,将产生如下的暂定 类:软件、系统、图书管理信息系统、图书管理 员、借阅者、老师、学生、帐号、图书信息、书 刊名、书刊的ISBN/ISSN号等。
接下来根据标准,去掉一些不必要的类和不正确 的类。
• 消除冗余类 • 消除与系统不相干的类
• 消除模糊类
• 消除属性 • 消除操作
常见的软件开发模式有4种类型: • 第一类:需求完全确定。如瀑布模型。
• 第二类:只提供基本需求的迭代式开发模型。 如喷泉模型。
• 第三类:以体系结构为基础或基于构件的开发 模型。如基于构件的开发模型。 • 第四类:轻量级开发模型。如XP。
class People { private String name; public String getName() { return name; } public void setName(String strName) { name = strName; } }
确定一个类的步骤:确定系统的范围->在系统范围 内寻找对象->将对象抽象成为一个类,进而确定类 的数据和操作。
面向对象分析的过程:
用户
开发者
一般性需求 问题域陈述
管理者
用户知识
对象模型
专业领域知识
问题域建模
动态模型
现实世界经验
功能模型
面向对象分析的过程:
1. 获取问题域陈述
系统分析员与用户一同工作提取用户需求,必须搞 清楚用户的真正意图是什么。
2. 建立系统的对象模型 标识和确定类 准备数据字典 确定关联 确 定属性 使用继承来细化类 完善对象模型
(3)确定关联
两个或多个对象之间相互作用、相互依赖的关系 就是关联。
在需求陈述中使用的描述性动词或动词词组,通 常表示关联关系:
• 大多数关联可通过直接提取需求中的动词词组得出
• 分析需求陈述,与用户及领域专家讨论,还能发现 一些隐含的关联
确定关联的过程:
需求说明 选取相关动词 暂定关联 过滤不必要关联 关联
• 程序=数据结构+算法
面向对象程序设计
• 程序 = 对象 + 消息
两种软件工程方法
传统软件工程
• 软件分析 → 概要设计 → 详细设计 → 面向过 程的编码 → 测试
面向对象软件工程
• 软件分析与对象抽取 → 对象详细设计 → 面向 对象的编码 → 测试
1.1 面向对象的基本概念
1.1.1 对象 对象(Object)是面向对象(Object-Oriented,OO) 系统的基本构造块,是一些相关的变量和方法的软件 集。 客观世界里的任何实体都可以被称为对象。 对象可以是具体的、有形的物,也可以是无形的 事物或概念。 对象是问题域或实现域中某些事物的一个抽象。 对象是一个封装数据属性和操作行为的实体。
对象通过对外提供的方法在系统中发挥自己的作用, 当系统中的其它对象请求这个对象执行某个方法时, 就向该对象发送一个消息,对象响应这个请求,完 成指定的操作。程序的执行取决于事件发生的顺序, 由顺序产生的消息来驱动程序的执行。
1.2 面向对象的基本特征
面向对象的基本特征:
①
②Βιβλιοθήκη Baidu
抽象
封装
③
④
继承
OMT-2(Ivar Jacobson)
UML的发展过程
1.4.2 以面向对象建模为基础的开发模式
软件生命周期:软件从其孕育、诞生、成长、成 熟直至衰亡的生存过程。
软件生命周期分为6个阶段:制定计划、需求分析、 设计、编码、测试、运行和维护。 软件开发模式是跨越整个软件生命周期的系统开 发、运行和维护所实施的全部内容的结构框架, 它给出了软件开发活动中各个阶段之间的关系。
1. 面向对象设计的准则
① 模块化:对象就是模块。
② 抽象 ③ 信息隐藏:通过对象的封装来实现。 ④ 低耦合 耦合:不同对象之间相互关联的紧密程度。
⑤ 高内聚
高内聚:一个对象类中应昼多地汇集逻辑上相关 的计算资源。如果一个模块只负责一件事件,就 说明这个模块有很高的内聚度。
2. 面向对象设计的实用规则
类(Class)是具有相同属性和操作的一组对象的组 合。也就是说,抽象模型中的“类”描述了一组相似 对象的共同特征,为属于该类的全部对象提供了统一 的抽象描述。
•
对象是类的实体化
类和对象
现实生活 中的对象 计算机中
class Car { int color_number; int door_number; int speed;