软件工程导论第9章面向对象方法学引论内容摘要:
它的动态行 为 ,在面向对象 分析和面向 对象设计中 , 通常把对象 的操作称为 服务或方法 。 表示 为有助于读 者理解对象 的概念,图 形象地描 绘了具有 3个操作的对 象。 看了图 之后,读者可能会 联想到一台 录 音机。 确实 , 可以用一台 录音机比喻 一个对象, 通俗地说明 对象的某些 特点。 当使用一台 录音机的时 候,总是通过按 键来 操作:按下“ Play(放音 )” 键,则录音带正 向转动, 通过喇叭放 出录音带中 记录的歌曲 或其他声音 ; 按下 “ Record(录音 )” 键,则录音带正 向转动,在录音带中 录下新的音 响 „„ 完状态 S 操作 1, 2, 3 的实现 操作 1 操作 2 操作 3 图 对象的形象 表示 界 面 成录音机 各种功能的 电子线路被 装在录音机 的外壳中 , 人们无须了 解这些电子 线路的工作 原理就可以 随心所欲地 使用录音机 。 为了使用录 音机根本没 有必要打开 外壳去触动 壳内的各种 零部件 , 事实上 , 不是专业维 修人员的一 般用户 ,完全不允许 打开录音机 外壳。 一个对象很 像一台录音 机。 当在软件中 使用一个对 象的时候,只能通过对 象与外界的 界面来操作 它。 对象与外界 的界面也就 是该对象向 公众开放的 操 作,例如, C++语言中对象 的公有 (public)成员函数。 使用对象向 公众开放的 操作就好像 使用录音机 的按 键 , 只须知道该 操作的名字 (好像录音机 的按键名 )和所需要的 参数 (提供附加信 息或设置状 态 , 例如听录音 前先装录音 带并把录音 带转到指定 位置 ),根本无须知 道实现这些 操作的方法 。 事实上 , 实现对象操 作的代码和 数据是隐藏 在对象内部 的 , 一个对象好 像是一个黑 盒子 , 表示它内部 状态的数据 和实现各个 操作的代码 及局部数据 , 都被封装在 这个黑盒子 内部 , 在外面是看 不见的,更不 能从外 面去访问或 修改这些数 据或代码。 使用对象时 只需知道它 向外界提供 的接口形式 而无须知道 它的内部实 现算法 , 不仅使得对 象的使用变 得非常简单 、 方便 , 而且具有很 高的安全性 和可靠性。 对象内部的 数据只能通 过对象的公 有方法 (如 C+十的公有成 员函数 )来访问或处 理,这就保证了 对这些数据 的访问或处 理 , 在任何时候 都是使用统 一的方法进 行的 , 不会像使用 传统的面向 过程的程序 设计语言那 样 , 由于每个使 用者各自编 写自己的处 理某个全局 数据的过程 而发生错误 。 此外,录音机中放 置的录音带 很像一个对 象中表示其 内部状态的 数据,当录音带处 于不同位置 时按下 Play键所放出的 歌曲是不相 同的,同 样 , 当对象处于不同状态时 , 做同一个操 作所得到的 效果也是不 同的。 目前,对对象所下 的定义并不 完全统一,人们从不同 角度给出对 象的不同定 义。 这些定义虽 然形式不同 , 但基本含义 是相同的。 下面给出对 象的几个定 义。 (1)定义 1:对象是具有 相同状态的 一组操作的 集合。 这个定义主 要是从面向 对象程序 设 计的角度看 “ 对象 ”。 (2)定义 2:对象是对问 题域中某个 东西的抽象 ,这种抽象反 映了系统保 存有关这个 东西的信息 或与它交互 的能力。 也就是说 , 对象是对属 性值和操作 的封装。 这个定义着 重从信息模 拟的角度看 待 “ 对象 ”。 (3)定义 3:对象:: =(ID, MS, DS, MI)。 其中, ID 是对象 的标识或名 字,MS是对象 中的操作集 合, DS 是对象 的数据结构 , MI是对象 受理的消息 名集合 (即对外接口 )。 这个定义是 一个形式化 的定义。 总之, 对象是封装 了数据结构 及可以施加 在这些数据 结构上的操 作的封装体 ,这个封装体 有可以惟一 地标识它的 名字 , 而且向外界 提供一组服 务 (即公有的操 作 )。 对象中的数 据表示对象 的状态 , 一个对象的 状态只能由 该对象的操 作来改变。 每当需要改 变对象的状 态时 , 只能由其他 对象向该对 象发送消息 。 对象响应消 息时 , 按照消息模 式找出与之 匹配的方法 , 并执行该方 法。 从动态角度 或对象的实 现机制来看 ,对象 是一台自动 机。 具有内部状 态 S,操作 fi(i=1, 2, „ , n),且与操作 fi对应的状 态转换函数 为 gi(I=1, 2, „ ,咒 )的一个对象 ,可以用图 9.3 所 示的自动机 来模拟。 对象有如下 一些基本特 点: (1)以数据为中 心。 操作围绕对 其数据所需 要做的处理 来设置,不设置与这 些数据无关 的操作 , 而且操作的 结果往往与 当时所处的 状态 (数据的值 )有关。 (2)对象是主动 的。 它与传统的 数据有本质 不同,不是被动地 等待对它进 行处理,相 反 , 它是进行处 理的主体。 为了完成某 个操作,不能从外 部 直接加工它 的私有数据 , 而是必须通 过它的公有 接口向对象 发消息 , 请求它执行 它的某个操 作 , 处理它的私 有数据。 (3)实现了数据 封装。 对象好像是 一只黑盒子 ,它的私有数 据完全被封 装在盒子内 部 , 对外是隐藏 的 、 不可见的 , 对私有数据 的访问或处 理只能通过 公有的操作 进行。 为了使用对 象内部的私 有数据 , 只需知道数 据的取值范 围 (值域 )和可以对该 数据施加的 操作 (即,对象提供了 哪些处理或 访问数据的 公有方法 ),根本无须知 道数据的具 体结构以及 实现操作的 算法。 这也就是抽 象数据类型 的概念。 因此 , 一个对象类 型也可以看 作是一种抽 象数据类型 。 (4)本质上具有 并行性。 对象是描述 其内部状态 的数据及可 以对这些数 据施加的全 部操作的集 合。 不同对象各 自独立地处 理自身的数 据 , 彼此通过发 消息传递信 息完成通信 。 因此 , 本质上具有 并行工作的 属性。 (5)模块独立性 好。 对象是面向 对象的软件 的基本模块 ,为了充分发 挥模块化简 化开发工作 的优点 , 希望模块的 独立性强。 具体来说 , 也就是要求 模块的内聚 性强 , 耦合性弱。 如前所述 , 对象是由数 据及可以对 这些数据施 加的操作所 组成的统一 体 , 而且对象是 以数据为中 心的 , 操作围绕对 其数据所需 做的处理来 设置 , 没有无关的 操作。 因此 , 对象内部各 种元素彼此 结合得很紧 密 , 内聚状态 S 状态 S 操作: 1f , 2f ,„„, 转换: 1g , 2g ,„„, ng 输出 if ( SX, ) 输入 if ,X 转换 :新状态 39。 S = ig (X ,S ) 图 用自动机模 拟对象 性相当 强。 由于完成对 象功能所需 要的元素 (数据和方法 )基本上都被 封装在对象 内部,它与外界的 联系自然就 比较少,因此,对象之间的 耦合通常比 较松。 其他概念 (class) 现实世界中 存在的客观 事物有些是 彼此相似的 ,例如,张三、李四、王五 „„虽说每个人 职业、性格、爱好、特长等等 各 有不同 , 但是 , 他们的基本 特征是相似 的 , 都是黄皮肤 、 黑头发 、 黑眼睛 , 于是人们把 他们统称为 “ 中国人 ”。 人类习惯于 把有相似特 征的事物归 为一类 , 分类是人类 认识客观世 界的基本方 法。 在面向对象 的软件技术 中, “ 类 ” 就是对具有 相同数据和 相同操作的 一组相似对 象的 定义 , 也就是说 , 类是对具有 相同属性和 行为的一个 或多个对象 的描述 , 通常在这种 描述中也包 括对怎样创 建该类的新 对象的说明 。 例如, 一个面向对 象的图形程 序在屏幕左 下角显示一 个半径 3cm的红颜色 的圆,在屏幕中部 显示一个半 径 4cm的 绿颜色的圆 ,在屏幕右上 角显示一个 半径 1cm的黄颜色的 圆。 这三个圆心 位置 、 半径大小和 颜色均不相 同的圆 , 是三个不同 的对象。 但是 , 它们都有相 同的数据 (圆心坐标、半径、颜色 )和相同的操 作 (显示自己、放大缩小半 径、在屏幕上移 动位置,等等 )。 因此,它们是同一 类事物,可以用 Circle类 ” 来定义。 以上先详细 地阐述了对 象的定义,然后在此基 础上定义了 类。 也可以先定 义类再定义 对象 , 例如 , 可以像下面 这样定义类 和对象 : 类是支持继 承的抽象数 据类型 , 而对象就是 类的实例。 (instance) 实例就是由 某个特定的 类所描述的 一个具体的 对象。 类是对具有 相同属性和 行为的一组 相似的对象 的抽象 , 类在现实世 界中并不能 真正存在。 在地球上并 没有抽象的 “ 中国人 ” , 只有一个个 具体的中国 人 , 例如 , 张三 、 李四 、 王五 „„ 同样 , 谁也没见过 抽象的 “ 圆 ” , 只有一个个 具体的圆。 实际上类是 建立对象时 使用的 “ 样板 ” ,按照这个样 板所建立的 一个个具体 的对象,就 是类的实际 例子 , 通常称为实 例。 当使用 “ 对象 ” 这个术语时 ,既可以指一 个具体的对 象,也可以泛指 一般的对象 ,但是, 当使用 “ 实例 ” 这个术语时 , 必然是指一 个具体的对 象。 (message) 消息就是要 求某个对象 执行在定义 它的那个类 中所定义的 某个操作的 规格说明。 通 常 , 一个消息由 下述 3 部分 组成: 接收消息的 对象; 消息选择符 (也称为消息 名 ); 零个或多个 变元。 例如, MyCircle 是一 个半径 4cm、圆心位于 (100, 200)的 Circle类的 对 象,也就是 Circle 类 的一个实例 ,当要求它以 绿颜色在屏 幕上显示自 己时,在 C++语言中应该 向它发下列 消息: MyCir(GREEN); 其中 MyCircle是接收消息 的对象的名 字 , Show 是 消息选择符 (即消息名 ),圆括号内的 GREEN是消息的变 元。 当 MyCircle 接 收到这个消 息后,将执行在 Circle类中所定义 的 Show操作。 (method) 方法就是对 象所能执行 的操作,也就是类中 所定义的服 务。 方法 描述了 对象执行操 作的算法 , 响应消息的 方法。 在 C++语言中把方 法称为成员 函数。 例如,为了 Circle 类的 对象能够响 应让它在屏 幕上显示自 己的消息Show(GREEN), 在 Circle 类中必 须给出成员 函数 Show(int color)的定义,也就是要给 出这个成员 函数的实现 代码。 (attribute) 属性就是类 中所定义的 数据,它是对客观 世界实体所 具有的性质 的抽象。 类的每个实 例都有自己 特有的属性 值。 在 C++语言中把属 性称为数据 成员。 例如, Circle类中定义 的代表圆心 坐标、半径、 颜色等的数 据成员 , 就是圆的属 性。 (encapsulation) 从字面上理 解,所谓封装就 是把某个事 物包起来,使外界不知 道该事物的 具体内容。 在面向对象 的程序中,把数据和实 现操作的代 码集中起来 放在对象内 部。 一个对象好 像是一个不 透明的黑盒 子 , 表示对象状。软件工程导论第9章面向对象方法学引论
相关推荐
..................................................... 33 对战界面 .......................................................................................................... 34 聊天界面 ......................
之间的关系是怎样的。 层次图 层次图是用来描述软件的层次结构的。 HIPO 图 HIPO 图 = 层次图 +输入 +处理 +输出 结构图 结构图和层次图类似,都是描述软件结构的图形工具。 类图 对象图 包图 状态图 活动图 顺序图 协作图 构件图 配置图 5 . 详细设计 详细设计阶段就是在总体设计的基础上要确定怎样具体的详细的实现系统所要求的功能,要对系统进行精确的描述。 程序流程图
port。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import .*。 public class FiveChessDemo { public static void main(String
基本路经1. 参与者提出管理用户请求2. 系统显示用户信息浏览界面3. 参与者选择需要删除的用户4. 参与者请求删除用户5. 系统判断要删除的用户类型6. 系统删除用户扩展点字段列表业务规则非功能需求补充说明5) 修改用户修改用户用例的参与者是系统管理员,用于修改系统中的用户的相关信息,用例规约如表26所示。 表26
020 年年度 预算, 财务中心将 按年度费用预算进行分解, 责任到人 ,严格执行计划控制,费用考核。 加强费用报销的监控力度 ,设置各类费用执行标准 、使用范围、签批权限 ,严格执行“先请示后执行”的原则,对 不符合规定的 情况 坚决 不予报销。 对于以下情况,将不予受理。 ① 无 《 招待费审批单 》 或项目填写不全 的。 ② 无批示的。 ③超过规定时限事后补签的。 ④规定时限