软件工程导论第9章面向对象方法学引论内容摘要:

它的动态行 ‎为 ,在面向对象 ‎分析和面向 ‎对象设计中 ‎, 通常把对象 ‎的操作称为 ‎服务或方法 ‎。 ‎表示 为有助于读 ‎者理解对象 ‎的概念,图 形象地描 ‎绘了具有 3‎个操作的对 ‎象。 看了图 之后,读者可能会 ‎联想到一台 ‎录 音机。 确实 , 可以用一台 ‎录音机比喻 ‎一个对象, 通俗地说明 ‎对象的某些 ‎特点。 当使用一台 ‎录音机的时 ‎候,总是通过按 ‎键来 操作:按下“ Play(放音 )” 键,则录音带正 ‎向转动, 通过喇叭放 ‎出录音带中 ‎记录的歌曲 ‎或其他声音 ‎; 按下 “ Recor‎d(录音 )” 键,则录音带正 ‎向转动,在录音带中 ‎录下新的音 ‎响 „„ 完状态 S 操作 1, 2, 3 的实现 操作 1 操作 2 操作 3 图 对象的形象 ‎表示 界 面 成录音机 ‎各种功能的 ‎电子线路被 ‎装在录音机 ‎的外壳中 , 人们无须了 ‎解这些电子 ‎线路的工作 ‎原理就可以 ‎随心所欲地 ‎使用录音机 ‎。 为了使用录 ‎音机根本没 ‎有必要打开 ‎外壳去触动 ‎壳内的各种 ‎零部件 , 事实上 , 不是专业维 ‎修人员的一 ‎般用户 ,完全不允许 ‎打开录音机 ‎外壳。 一个对象很 ‎像一台录音 ‎机。 当在软件中 ‎使用一个对 ‎象的时候,只能通过对 ‎象与外界的 ‎界面来操作 ‎它。 对象与外界 ‎的界面也就 ‎是该对象向 ‎公众开放的 ‎操 作,例如, C++语言中对象 ‎的公有 (publi‎c)成员函数。 使用对象向 ‎公众开放的 ‎操作就好像 ‎使用录音机 ‎的按 键 , 只须知道该 ‎操作的名字 ‎(好像录音机 ‎的按键名 )和所需要的 ‎参数 (提供附加信 ‎息或设置状 ‎态 , 例如听录音 ‎前先装录音 ‎带并把录音 ‎带转到指定 ‎位置 ),根本无须知 ‎道实现这些 ‎操作的方法 ‎。 事实上 , 实现对象操 ‎作的代码和 ‎数据是隐藏 ‎在对象内部 ‎的 , 一个对象好 ‎像是一个黑 ‎盒子 , 表示它内部 ‎状态的数据 ‎和实现各个 ‎操作的代码 ‎及局部数据 ‎, 都被封装在 ‎这个黑盒子 ‎内部 , 在外面是看 ‎不见的,更不 能从外 ‎面去访问或 ‎修改这些数 ‎据或代码。 使用对象时 ‎只需知道它 ‎向外界提供 ‎的接口形式 ‎而无须知道 ‎它的内部实 ‎现算法 , 不仅使得对 ‎象的使用变 ‎得非常简单 ‎、 方便 , 而且具有很 ‎高的安全性 ‎和可靠性。 对象内部的 ‎数据只能通 ‎过对象的公 ‎有方法 (如 C+十的公有成 ‎员函数 )来访问或处 ‎理,这就保证了 ‎对这些数据 ‎的访问或处 ‎理 , 在任何时候 ‎都是使用统 ‎一的方法进 ‎行的 , 不会像使用 ‎传统的面向 ‎过程的程序 ‎设计语言那 ‎样 , 由于每个使 ‎用者各自编 ‎写自己的处 ‎理某个全局 ‎数据的过程 ‎而发生错误 ‎。 此外,录音机中放 ‎置的录音带 ‎很像一个对 ‎象中表示其 ‎内部状态的 ‎数据,当录音带处 ‎于不同位置 ‎时按下 Play键所放出的 ‎歌曲是不相 ‎同的,同 样 , 当对象处于‎不同状态时 ‎, 做同一个操 ‎作所得到的 ‎效果也是不 ‎同的。 ‎ 目前,对对象所下 ‎的定义并不 ‎完全统一,人们从不同 ‎角度给出对 ‎象的不同定 ‎义。 这些定义虽 ‎然形式不同 ‎, 但基本含义 ‎是相同的。 下面给出对 ‎象的几个定 ‎义。 (1)定义 1:对象是具有 ‎相同状态的 ‎一组操作的 ‎集合。 这个定义主 ‎要是从面向 ‎对象程序 设 ‎计的角度看 ‎“ 对象 ”。 (2)定义 2:对象是对问 ‎题域中某个 ‎东西的抽象 ‎,这种抽象反 ‎映了系统保 ‎存有关这个 ‎东西的信息 ‎或与它交互 ‎的能力。 也就是说 , 对象是对属 ‎性值和操作 ‎的封装。 这个定义着 ‎重从信息模 ‎拟的角度看 ‎待 “ 对象 ”。 (3)定义 3:对象:: =(ID, MS, DS, MI)。 其中, ID 是对象 ‎的标识或名 ‎字,MS是对象 ‎中的操作集 ‎合, DS 是对象 ‎的数据结构 ‎, MI是对象 ‎受理的消息 ‎名集合 (即对外接口 ‎)。 这个定义是 ‎一个形式化 ‎的定义。 总之, 对象是封装 ‎了数据结构 ‎及可以施加 ‎在这些数据 ‎结构上的操 ‎作的封装体 ‎,这个封装体 ‎有可以惟一 ‎地标识它的 ‎名字 , 而且向外界 ‎提供一组服 ‎务 (即公有的操 ‎作 )。 对象中的数 ‎据表示对象 ‎的状态 , 一个对象的 ‎状态只能由 ‎该对象的操 ‎作来改变。 每当需要改 ‎变对象的状 ‎态时 , 只能由其他 ‎对象向该对 ‎象发送消息 ‎。 对象响应消 ‎息时 , 按照消息模 ‎式找出与之 ‎匹配的方法 ‎, 并执行该方 ‎法。 从动态角度 ‎或对象的实 ‎现机制来看 ‎,对象 是一台自动 ‎机。 具有内部状 ‎态 S,操作 fi(i=1, 2, „ , n),且与操作 f‎i对应的状 ‎态转换函数 ‎为 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‎) 现实世界中 ‎存在的客观 ‎事物有些是 ‎彼此相似的 ‎,例如,张三、李四、王五 „„虽说每个人 ‎职业、性格、爱好、特长等等 各 ‎有不同 , 但是 , 他们的基本 ‎特征是相似 ‎的 , 都是黄皮肤 ‎、 黑头发 、 黑眼睛 , 于是人们把 ‎他们统称为 ‎“ 中国人 ”。 人类习惯于 ‎把有相似特 ‎征的事物归 ‎为一类 , 分类是人类 ‎认识客观世 ‎界的基本方 ‎法。 在面向对象 ‎的软件技术 ‎中, “ 类 ” 就是对具有 ‎相同数据和 ‎相同操作的 ‎一组相似对 ‎象的 定义 , 也就是说 , 类是对具有 ‎相同属性和 ‎行为的一个 ‎或多个对象 ‎的描述 , 通常在这种 ‎描述中也包 ‎括对怎样创 ‎建该类的新 ‎对象的说明 ‎。 例如, 一个面向对 ‎象的图形程 ‎序在屏幕左 ‎下角显示一 ‎个半径 3c‎m的红颜色 ‎的圆,在屏幕中部 ‎显示一个半 ‎径 4cm的 ‎绿颜色的圆 ‎,在屏幕右上 ‎角显示一个 ‎半径 1cm‎的黄颜色的 ‎圆。 这三个圆心 ‎位置 、 半径大小和 ‎颜色均不相 ‎同的圆 , 是三个不同 ‎的对象。 但是 , 它们都有相 ‎同的数据 (圆心坐标、半径、颜色 )和相同的操 ‎作 (显示自己、放大缩小半 ‎径、在屏幕上移 ‎动位置,等等 )。 因此,它们是同一 ‎类事物,可以用 Circl‎e类 ” 来定义。 以上先详细 ‎地阐述了对 ‎象的定义,然后在此基 ‎础上定义了 ‎类。 也可以先定 ‎义类再定义 ‎对象 , 例如 , 可以像下面 ‎这样定义类 ‎和对象 : 类是支持继 ‎承的抽象数 ‎据类型 , 而对象就是 ‎类的实例。 (insta‎nce) 实例就是由 ‎某个特定的 ‎类所描述的 ‎一个具体的 ‎对象。 类是对具有 ‎相同属性和 ‎行为的一组 ‎相似的对象 ‎的抽象 , 类在现实世 ‎界中并不能 ‎真正存在。 在地球上并 ‎没有抽象的 ‎“ 中国人 ” , 只有一个个 ‎具体的中国 ‎人 , 例如 , 张三 、 李四 、 王五 „„ 同样 , 谁也没见过 ‎抽象的 “ 圆 ” , 只有一个个 ‎具体的圆。 实际上类是 ‎建立对象时 ‎使用的 “ 样板 ” ,按照这个样 ‎板所建立的 ‎一个个具体 ‎的对象,就 是类的实际 ‎例子 , 通常称为实 ‎例。 当使用 “ 对象 ” 这个术语时 ‎,既可以指一 ‎个具体的对 ‎象,也可以泛指 ‎一般的对象 ‎,但是, 当使用 “ 实例 ” 这个术语时 ‎, 必然是指一 ‎个具体的对 ‎象。 (messa‎ge) 消息就是要 ‎求某个对象 ‎执行在定义 ‎它的那个类 ‎中所定义的 ‎某个操作的 ‎规格说明。 通 常 , 一个消息由 ‎下述 3 部分 ‎组成: 接收消息的 ‎对象; 消息选择符 ‎(也称为消息 ‎名 ); 零个或多个 ‎变元。 例如, MyCir‎cle 是一 ‎个半径 4c‎m、圆心位于 (100, 200)的 Circ‎le类的 对 ‎象,也就是 Ci‎rcle 类 ‎的一个实例 ‎,当要求它以 ‎绿颜色在屏 ‎幕上显示自 ‎己时,在 C++语言中应该 ‎向它发下列 ‎消息: MyCir‎(GREEN‎); 其中 MyC‎ircle‎是接收消息 ‎的对象的名 ‎字 , Show 是 ‎消息选择符 ‎(即消息名 ),圆括号内的 ‎GREEN‎是消息的变 ‎元。 当 MyCi‎rcle 接 ‎收到这个消 ‎息后,将执行在 C‎ircle‎类中所定义 ‎的 Show‎操作。 (metho‎d) 方法就是对 ‎象所能执行 ‎的操作,也就是类中 ‎所定义的服 ‎务。 方法 描述了 ‎对象执行操 ‎作的算法 , 响应消息的 ‎方法。 在 C++语言中把方 ‎法称为成员 ‎函数。 例如,为了 Cir‎cle 类的 ‎对象能够响 ‎应让它在屏 ‎幕上显示自 ‎己的消息S‎how(GREEN‎), 在 Circ‎le 类中必 ‎须给出成员 ‎函数 Sho‎w(int color‎)的定义,也就是要给 ‎出这个成员 ‎函数的实现 ‎代码。 (attri‎bute) 属性就是类 ‎中所定义的 ‎数据,它是对客观 ‎世界实体所 ‎具有的性质 ‎的抽象。 类的每个实 ‎例都有自己 ‎特有的属性 ‎值。 在 C++语言中把属 ‎性称为数据 ‎成员。 例如, Circl‎e类中定义 ‎的代表圆心 ‎坐标、半径、 颜色等的数 ‎据成员 , 就是圆的属 ‎性。 (encap‎sulat‎ion) 从字面上理 ‎解,所谓封装就 ‎是把某个事 ‎物包起来,使外界不知 ‎道该事物的 ‎具体内容。 在面向对象 ‎的程序中,把数据和实 ‎现操作的代 ‎码集中起来 ‎放在对象内 ‎部。 一个对象好 ‎像是一个不 ‎透明的黑盒 ‎子 , 表示对象状。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。