面向对象方法学概述.ppt_第1页
面向对象方法学概述.ppt_第2页
面向对象方法学概述.ppt_第3页
面向对象方法学概述.ppt_第4页
面向对象方法学概述.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第2 2章章 面向对象方法面向对象方法 及及UMLUML概述概述 什么是什么是软软软软件开件开发发发发 软软件开发发的过过程就是人们们使用各种计计算机语语言 将人们们关心的现实现实 世界映射到计计算机世界的过过程 。 包含两项主要活动: v人们对们对 所要解决的问题问题 及其相关事物的认识认识 v基于这这种认识认识 所进进行的描述 客观感知世界-计算机编程语言-计算机世界 软件的实质是人们以计算机编程语言为桥梁,将客 观感知世界映射于计算机世界中去,以解决人们在 客观感知世界中要解决的问题。 高级语言的发展历史 真正得到推广使用,至今仍在流行的第一个高级语言 是美国的计算机科学家巴科斯设计,并于1956年首先在 IBM公司的计算机上实现的FORTRAN语言。 早期的高级语言主要是应用于科学和工程计算,其代 表作有FORTRAN和ALGOL60。 计算机进入商业和行政管理领域以后,出现了COBOL 和RPG等便于商界使用的语言。 近年来,这类语言和数据库技术,图形界面技术(可 视化编程),面向对象的思想及RAD(Rapid Application Devolopment)的概念相结合,形成了一批更方便使用的 所谓第四代语言(4GL),如Powerbuilder,Delphi,VB 等。 自70年代以来,模块特征更明显,简单易用,可靠性强 的PASCAL异军突起,在世界范围内广泛流行。但进入80年 代以后,它的地位又逐渐为更实用的C语言替代。到现在 ,C语言的地位已相当于一种“高级汇编语言”了。 80年代后期,面向对象的语言开始浮出水面,C+借助 使用C语言的庞大程序员队伍,一举建立了面向对象语言 的老大地位。从而OO的思想正式统治了整个软件开发界 。C+的流行甚至使得美国军方从80年开始大力扶植的 Ada语言还未及推广便胎死腹中了。 90年代以后,计算机世界更是发生了天翻地覆的变化,原 先的单机平台让位于WEB,“网络就是计算机”,新的语言不 仅要是OO的,Visual的,更要是基于WEB的。Java语言借 INTERNET的东风,横空出世,一夜红遍天下,变化之快令人 瞠目结舌。 上述这这些变变化,表面是不同的编编程工具在城头变头变 幻大王旗 ,但其背后反映的却是一种更为为深刻的认识论认识论 的改变变,即 你是用何种观观点来认识这认识这 个世界的? 计算机语言 汇编语言 PO语言 OO语言 人对问题域的认识客观事物(问题域)自然语言 语言鸿沟 计算机世界(线形存储、顺序执行)编程语言计算机执行 语言的鸿沟 自然语言与编程语言之间存在着很大的差距,这种差距 称为“语言的鸿沟”。 OO方法学的基本思想 从现实世界的客观存在的事物(即对象)出发, 来构造软件系统,并在系统的构造中尽可能运用 人类的自然思维方式。 (人类认知过程的计算机模拟) 2.1.2 面向对象方法 问题的结构空间和软件的解空间是一致的。 问题的结构空间:指问题涉及的业务范围。 软件的解空间:计算机解决问题域问题的解法。 OO方法学的主要优点 系统的稳定性好 传统方法建立的软件结构依赖于要完成的功能,当 功能需求发生变化时将引起软件结构的整体修改。 用户需求基本是针对功能的,系统不稳定。 Coad-Yourdon分析了当需求发生变化时: 功能: 最易变 外部接口:很易变 属性: 较易变 对象: 较稳定 例:商场管理系统,当增加投资要求系统功能更完善。 功能(服务): 现金收款现金、各种信用卡(最易变) 外部接口:设备或银行接口的变化(很易变) 属性:可能引起某些对象属性的变化(较易变) 对象:收银台、商品、库房、会计室 (基本稳定,可能会增加新对象) 可重用性好 传统的软件重用技术是利用标准函数库。标准函 数库往往只提供最基本、最常用的功能。还缺乏必 要的柔性。 对象固有的封装性和信息隐蔽,使对象具有较 强的独立性。提供了较理想的可重用的软件成分。 重用时提供了很大的灵活性。(派生和继承) 可维护性好 面向对象的软件稳定性好 面向对象的软件容易理解 面向对象的软件容易修改 易于测试和调试 CoadCoad和和YourdonYourdon给出了一个定义:给出了一个定义: 面向对象面向对象= =对象对象+ +类类+ +继承继承+ +通信通信 如果一个软件系统是使用这样如果一个软件系统是使用这样 4 4 个概念设计和个概念设计和 实现的,则我们认为这个软件系统是面向对象实现的,则我们认为这个软件系统是面向对象 的。的。 一个面向对象的程序的每一成份应是一个面向对象的程序的每一成份应是对象对象,计,计 算是通过算是通过新的对象的建立新的对象的建立和和对象之间的通信对象之间的通信来来 执行的执行的。 对象是具有相同状态的一组操作 的集合。 每个对象可用它本身的一组属性 和它可以执行的一组操作来定义 。 属性一般只能通过执行对象的操 作来改变。 操作又称为方法或服务,它描述 了对象执行的功能,若通过消息 传递,还可以为其它对象使用。 对象的特点对象的特点 vv 抽象抽象 对象是描述客观事物的本质、与系统目标有关的特征。 九方皋相马,不分牡、牝、骊、黄,心唯骏马特征; 宋庖丁解牛,只见筋,骨,皮,肉,目无全牛形象。 对象是属性和服务的结合体,二者不可分, 而且对象的属性值只能由这个对象的服务来改变。 vv 封装封装 类是一组具有类是一组具有相同数据结构相同数据结构和和相同操作相同操作的对象的的对象的 集合。集合。 类的定义包括类的定义包括一组数据属性一组数据属性和和在数据上的一组合在数据上的一组合 法操作。法操作。 类定义可以视为一个具有类似特性与共同行为的类定义可以视为一个具有类似特性与共同行为的 对象的对象的模板模板,可用来产生对象。,可用来产生对象。 实例就是由某个类所描述的一个具体的对象。 对象和实例的区别 v对象即可指一个具体的对象, 也可以泛指一般的对象。 v实例必须是一个具体的对象。 消息是一个对象与另一个对象的通信单元,是要求 某个对象执行类中定义的某个操作的规格说明。 是一个对象向另一个对象发出的服务请求。 例如:顾客对售报亭说:“买买一份北京晚报报”。 接受者: 售报亭 要求的服务:报刊零售; 输入信息: 买报 种类,份数,钱数; 输出信息: 买到的报,找回的零钱; 封装性是将一些数据和与这些数据有关的操作集合起 来,放在一起,形成一个能动的实体。 把对象的全部属性和全部服务结合在一起,形成一 个不可分割的独立单位(对象)。 信息隐蔽:尽可能地隐蔽对象的内部细节,只保留 有限的外部接口。 继承继承是子类自动地共享基类中定义的数据和是子类自动地共享基类中定义的数据和 方法的机制。方法的机制。 继承具有传递性。继承具有传递性。 继继承的意义义 简简化了人们对们对 事物的认识认识 和描述。 复用:继承性是OO方法实现 复用的前提, 不仅支持复用而且使系统统可扩扩充。 结构清晰、易编程、易理解。 易修改:共同部分只要在一处修改即可。 易增加新类:只须描述不同部分。 继继承的分类 单继承:子类只允许有一个父类的继承 多继继承:一个子类类可以从多个父类类中继继承其属性和操作 轮船 吨位 时速 吃水线 行驶 停泊 客船 载重量 供餐 在一般类定义的属性或服务被特殊类继承之后,可 以具有不同的数据类型或表现为不同的行为,使得 同一个属性或服务名在一般类及其各个特殊类中具 有不同的意义 。 int abs( int a) long abs(long a) float abs(float a) double abs(double a) int abs( int n) long labs(long n) double fabs(double x) 面面 向向 对对 象象 的的 软软 件件 开开 发发 过过 程程 统一过程模型RUP 面向对象的软件开发方法面向对象的软件开发方法 RumbaughRumbaugh方法方法 通用电气公司著名OO大师James Rumbaugh博士和他的同事提出的对象模型化技术对象模型化技术 (OMT)(OMT),用于分析、系统设计和对象级设计。 建立三个模型 对象模型对象模型(描述对象、类、层次和关系) 动态模型动态模型(描述对象和系统的行为) 功能模型功能模型(类似于高层的DFD) 适用于描述和分析以数据为中心的信息系 统。 CoadCoad和和YourdonYourdon方法方法 Coad和Yourdon方法常常被认为是最容易学习的 OOA方法。建模符号相当简单,而且开发分析模型 的导引直接明了。 BoochBooch方法方法 Rational公司OO大师Grady Booch设计 比较适合于系统的设计与构造。 JacobsonJacobson方法方法 瑞典爱立信公司的Ivar Jacobson博士 最大的特点是面向用例,比较适合于需求分析。 UML的统一 活动图来自James Odell, 状态图来自David Harel 接口来自Microsoft,包的符号来自Apple Macintosh UMLUML发展历程发展历程 2.3 2.3 统统统统一建模一建模语语语语言言简简简简介介 UMLUML的特点的特点 p 统一标准 p 面向对象 p 可视化 p 独立于过程 UML是一种建模语言,不是一种方法,它独立于过程。 p 容易掌握使用 沙发之争(过程与对象的对话)沙发之争(过程与对象的对话) 某天在某一家软件公司里,那令人讨厌的项目 经理要求两名程序员完成同样的一个任务。经理并 且承诺谁先完成任务的发给一张带转轮的真皮沙发 代替原来的木质靠背椅。 杰:习惯过程式编程的程序员 涛:一个面向对象的程序员 他们都知道这是一个不错的机会。 任务是在GUI的程序界面里有一个正方形,一 个圆形和一个正三角形。但用户点击这个图形时, 图形会顺时针旋转360并且播放相应的AIF音效。 杰,坐在自己的办公室里,对自己说:“这个 程序要做什么?我们需要哪些过程?“旋转并且播 放音效。”他又回答了自己。所有他的程序就是去 完成这两个过程。 涛带着他的笔记本坐在休息室里。他也在思 索着:“程序中都有什么东西啊?谁是主要的角 色啊?他最先想到的就是形状。当然他也想到了 其他的一些对象,比如用户,音效和点击事件。 因为已经有现成的库支持其他的对象了。因此因 此他把重点放在创建形状类上。 在杰的办公室 就像曾经写过千百的的程序一样,杰把他的程序认为是 重要的过程,并且没有用什么时间就完成了旋转和播放音 效的过程。他的程序大概是这样的 rotate (shapeNum) / make the shape rotate 360 playSound (shapeNum) / use shapeNum to lookup which AIF sound to play, and play it 杰的程序基本是完成了,他觉得他赢了,他似乎已经感觉 到那张真皮沙发了 涛和他的笔记本在休息室,涛为每个形状写了一个类 class Square rotate () / code to rotate a square playSound() / code to play the AIF file for a square class Circle rotate () / code to rotate a circle playSound() / code to play the AIF file for a circle class Triangle rotate () / code to rotate a triangle playSound() / code to play the AIF file for a triangle 但是请等一下,任务有所变动 “现在你是快一点,杰”,项目经理说着,“但我还要加一点 小小的功能在程序里。这对你们这样 高水平的程序员来说 ,应该是毫无问题的。” “如果只是个小改动,我可以接受。”杰想着,他知道经理所 说的毫无代价的改动是骗人的。“为什么涛会显得如此的平 静呢?”杰不解得想着。杰一直执着认为面向对象只是个花 架子,完全是浪费时间 。 新增的任务: 在GUI界面里多了一个不规则图 形,当用户点击这个图形 时,图形也会旋转360,并且播放一个 .hif的音效。 杰回到办公室 旋转的过程依然时可以用的,因为代码使用的是shapeNum 来对于相应的图形。然而播放音效的过程需要修改。“为什么 非要播放 .hif的音效呢?”,杰愤愤的说着。 playSound (shapeNum) / if the shape is not an amoeba, /use shapeNum to lookup with AIF sound to play, and play it /else /play amoeba .hif sound 这不是一个很大的改动,但是杰依然不得不重新修改他已经 调试成功过的代码。 涛在他的笔记本前 涛微笑着,呷了一口茶。随手写了一个新的类。有时他觉 得他最喜欢面向对象中的这个优点,就是对已经编译调 试过的代码可以不要任何改动。灵活和可扩展性,涛 沉醉在面向对象的优点中了。 class Amoeba rotate () / code to rotate an amoeba playSound() / code to play the new .hif file for an amoba 杰这一次只比涛领先一步 “面向对象都是在胡扯,浪费时间 !”杰正在暗笑着涛。 “不规则图 形不是这样旋转的。”项目经理失望的说。 原来,杰和涛都是这样写的: 用一个矩形围住不规则图 形,然后计算矩形的中心,最后 让图形以中心旋转。 项目经理接着说:“它应该以一个给定的坐标旋转。” 杰的办公室 “我真像是一块砧板上任人宰割的肉。”,杰想着“但我可以 再加上一些ifelse 语句就可以搞定了。”然而天知道经理 会又有什么改动呢? 他思索着旋转的过程。很多的代码受到影响的。杰又要重 新编译调试 。终于有了结果。 rotate ( shapeNum, xPt, yPt) / if the shape is not an amoeba, /calculate the center point base on the rectangle, / the rotate /else /use the xPt and yPt as the rotation point offset /an the rotate 涛在他的笔记本前 为了不把沙发拱手让给杰,涛也在修改他的旋转方法,但仅 仅是在Amoeba的类里。对于其他的测试好的类,是原封不 动的。为了给不规则图 形一个旋转点,他给Amoeba加了两 个属性,然后他测完成后通过无线网络提交了任务。 class Amoeba int xPoint; int yPoint; rotate () / code to rotate an amoeba using amoebas x and y playSound() / code to play the new .hif file for an amoba 那涛得到了沙发对吗 ? 并没有那么快,杰找到涛程序里的一个缺陷。 下面是杰和涛的对话 杰:你的代码大量重复,你的旋转过程在四个图形的东 西里都有。 涛:这是方法,不是过程。还有他们是类,不叫做东西 。 杰:不管叫什么,你的设计简 直是垃圾。你要处理四个不 同旋转“方法”。你怎么处理啊? 涛:我猜你是没看见最后的设计。让我告诉你继承在面 向 对象中书如何工作的。看这四个类是有共同点的。它 们都有rotate()和playSound() 于是我抽象出一个Shape类来 abstract class Shape() rotate(); playSound(); 然后我让这四个类继承这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论