面向对象的方法2012

上传人:tian****1990 文档编号:75667766 上传时间:2019-01-31 格式:PPT 页数:80 大小:2.05MB
返回 下载 相关 举报
面向对象的方法2012_第1页
第1页 / 共80页
面向对象的方法2012_第2页
第2页 / 共80页
面向对象的方法2012_第3页
第3页 / 共80页
面向对象的方法2012_第4页
第4页 / 共80页
面向对象的方法2012_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《面向对象的方法2012》由会员分享,可在线阅读,更多相关《面向对象的方法2012(80页珍藏版)》请在金锄头文库上搜索。

1、第七章 面向对象的方法,高 毅 ,主要内容,结构化的开发方法按功能分解问题、按模块构建系统。这种方法是在传统的编程语言环境下诞生的,用这种方法构建的系统结构使得开发人员在面对用户需求频繁变更的开发环境时,吃尽了苦头。 相比之下,面向对象的语言和方法,使开发人员如释重负,他们看到了摆脱困境的一线曙光。 首先,面向对象编程方法带来了高效、可靠、易维护、易扩充的效果。 其次,运用面向对象的思维模式来认识和理解系统的构成,更接近于人们对客观世界的认知习惯。 最重要的是,运用面向对象的方法构建的设计方案能够灵活自如地应对用户的需求变更,而这种变更对使用结构化方法构建的系统往往是一种致命的挑战。 因此,面

2、向对象的方法逐渐发展成为主流的管理信息系统开发方法。,主要内容,本章重点理解结构化方法面临的挑战、面向对象的思想和面向对象方法的优势,以及面向对象的基本概念和范型。,7.1 从结构化到面向对象 7.2 回顾面向对象的范型 7.3 面向对象的重要方法 7.4 面向对象的术语及其关系,7.1.1 结构化方法面临的挑战,与结构化方法相比,面向对象的方法具有先天的优势,也正是具备了这种先天的优势,面向对象的方法才逐步发展为管理信息管理系统开发的一种主流方法。充分认识和了解结构化设计方法遇到的诸多挑战才能看到面向对象设计方法的优点,从而更好地理解面向对象的思想、机制和范型。 开发管理信息系统首先要对现实

3、系统进行调查和分析,被调查和分析的项目范围常被称为问题域。无论有没有运用计算机等现代化的设备进行信息处理,现实中的信息系统总是客观存在的,它也许是一个手工的管理信息系统,也有可能是一个早期的比较落后的管理信息系统。管理信息系统的现代化程度要跟企业的基础管理水平相适应,当手工的或早期的管理信息系统不能满足企业管理的需要时,企业就会提出开发新的管理信息系统的需求。,7.1 从结构化到面向对象,现实系统是一个复杂的系统,我们开发计算机化的管理信息系统,本质上讲是对现有的管理信息系统的改造,是在原有管理信息系统的基础上,引入了现代化的信息处理工具和现代化的科学管理方法。这一过程能否成功,取决于对现实系

4、统的认识和构建新系统的思维模式上。然而,结构化的方法和面向对象的方法在认识现实系统并构造新的管理信息系统的过程中,采取了两种截然不同的认知与构建的思维模式。,软件是管理信息系统的重要组成部分,结构化方法是按功能分解的规律组织软件系统结构的,即为完成一个任务需要构造一个软件系统,这个系统是具有能完成这个任务的功能的。为了实现这个功能,可能需要将其进一步分解为多个更具体的子功能,最后每个子功能又可能再被分解为若干个功能模块。然后,编程实现每个功能模块就是最终得到的软件系统。 很显然,这种软件结构源于用户提出来的功能需求。根据最初提出的功能需求,经过分解设计,得到的软件结构是依赖于功能需求的。如果事

5、后发现当初的需求定义或描述不正确、需要变更的话,这种变更足以摧毁按当初提出的需求而建立起的软件结构。这就是结构化方法的先天性缺陷。,如图7.1所示,需求的频繁变更会把一个管理信息系统开发项目推向死亡之旅。,图7.1 结构化方法的缺陷,除了上面提到的用结构化方法得到的软件结构在面对需求变更时显得束手无策的缺陷以外,另外一个先天性缺陷就是,按功能分解得到的模块是低内聚的和强耦合的,这恰恰是违背系统设计原则的。现实生活中,实现某个功能是由若干个参与者协作完成的,而结构化方法则相当于把这些参与者“肢解”了,把每个参与者所具备的具有强大生命力的能力分散到一个个模块中,拼成了一个“死”的结构。正因为如此,

6、这样拼出来的结构是“死”的,这样拼出来的模块是“低内聚”的。,由于具有上述先天性的缺陷,结构化方法为了保证设计与编码工作有效,就要求对管理信息系统的需求分析做到一步到位,完整、准确的需求定义是必须的,而且分析活动结束后,需求就不能再进行变更了。只要需求有变更,就意味着按当初理解的需求而进行的设计和编码都将是徒劳的。越是到开发的后期,这种需求的变更越是致命的。出于同样的原因,系统交付使用以后,对管理信息系统的维护也是困难的。 面向对象的方法则是以对象为核心来构造软件框架的,在框架不需要变化的前提下,通过对象的协作和参与,就能够协作实现更多的系统功能。如果完成某项任务要求有特殊的对象能力,只需要增

7、强对象的能力就可以实现。因此,这样的结构所具备的应对需求变更的能力是与生俱来的。每个对象封装起来的操作具有强内聚性。,7.1.2 面向对象方法的优势,20世纪80年代,面向对象的程序设计语言趋于成熟,作为一种新的程序设计模式,面向对象的程序设计模式逐渐被更多的人所理解和接受。面向对象的程序设计模式导致了软件开发的高效率、高质量和软件复用,这一成果促使研究者把一部分注意力转向更广、更深层次的研究。首先把面向对象的思想用于设计阶段,于是有了面向对象的设计,进一步又把面向对象的思想用于分析阶段,产生了面向对象的分析,因而在面向对象的系统开发方面不断取得进展时,一种新的管理信息系统开发方法面向对象的开

8、发方法产生了,并逐渐成为了主流的开发方法。,与结构化方法对比,面向对象的方法显现出了绝对的优势,并且这种优势同样是先天性的。面向对象的思想尽可能按照人类认识世界的方法和思维方式来分析和解决问题。假设我们把现实系统中参与完成某项任务的多个“人”看做“对象”的话,按照面向对象的思想构造的管理信息系统中的软件结构与现实系统的结构是极其相似的。,现实系统中,少数不变的“人”之间,通过协作可以完成许多功能,即便是需要完成一种新的功能,也许只用原有的“人”相互协作就可以实现。如果不能实现,我们可以通过增强“人”的能力的办法或者再添加“人力”来完成。这种修改只是对原有系统进行扩充,使软件结构演化为能满足新需

9、求的结构,而原来由“人”组成的系统结构并没有受到冲击。,与此类似,如图7.2所示,用面向对象的思想构建的软件,则是由“对象”组成的结构。对象是有“责任”、有“特征”、有“行为能力”的实体,我们通过向对象赋于“行为能力”、通过对象之间的协作就能够实现用户的各种需求。如果需求有了变化,我们只需要改变对象之间的协作关系即可应对。软件设计的任务就是寻找能够担当重任的“对象”,你精心培育的“对象”会不辞辛劳地为你工作。如果用户有了新的功能需求,那你就再赐予你的对象以“新的能力”,再也不会担心自己的设计和编码工作会变得徒劳了。,面向对象的软件结构具有天然的高内聚和低耦合特征。对象本身所具有的代码都是为了实

10、现对象本身“行为能力”的必须,只有具备了这些“方法”或“操作”,对象才能不辱使命,参与到协作之中,担负起你交给它的责任,因此对象是高内聚的。对象封装了它自身应有的数据和增强“行为能力”而实现的算法,对象之间的协作都是通过方法调用和消息传递来实现的,因此对象之间的联系是低耦合的。高内聚与低耦合正是软件设计必须遵循的设计原则。,图7.2 面向对象方法的优势,7.1.3 两种方法解决问题的思维模式比较,下面我们进一步来讨论,从结构化到面向对象的转变过程中解决问题的思想模式发生了什么变化。我们先来考察日常生活中人们是如何做事的。 假设你开了一个讲座,听讲座的人在结束后还要分别去听其他讲座,但他们不知道

11、自己下面要听什么讲座和下一讲座分别在什么地点。领导交给你一项任务,在你的讲座结束后,确保大家知道下一讲座去哪里听。,按照结构化方法的思路,可以这样做: (1)获得听课人的名单。 (2)对于名单上的每个人,都重复做以下工作: 获知他(或她)要听什么讲座; 找到他(或她)要听的下一讲座的地点; 找到从你的讲座地点到他(或她)要听的下一讲座的地点怎么走; 告诉这个人怎样去下一个听讲座地点。,为了完成以上工作,你可能需要实现如下的功能模块: (1)获得听讲人的名单的方法; (2)获得每个人听讲座的安排表; (3)编一个告诉某个人如何从你开讲座的教室到其他教室的程序; (4)编写一个控制程序,它可以为每

12、个人完成所需要服务的步骤。,最后得到的结构化的模块化程序结构可能如图7.3所示。 你会遵循这种方法吗?如果有100个人,你需要重复做100遍;如果是1000个人,你需要重复做1000遍;如果是10000个人呢? 如果是让计算机去做,你可能就这么编程序了。如果是让你亲自去做呢,我很怀疑是否有人真的会按这样的方法去做。,图7.3 面向过程的方法解决问题的思路,相反,你可能会把从这个教室到其他教室的方向路线贴出来,然后告诉听你讲座的所有人:“我已经把你们要听的下一讲座的地点和教室的位置都贴在教室后面了。请根据它找到你们各自要听的下一讲座的教室。”可以预期每个人都知道自己下一讲要听的是什么讲座,而且他

13、们都能从你提供的列表中查到正确的教室,然后按照指示找到它。 如图7.4所示,这样程序结构简单多了,你也轻松多了是不是?,图7.4 面向对象的方法解决问题 的思路,这两种方法之间的区别何在呢? 第一种方法,分别给每个人都提供指示,你必须密切关注大量细节,除你之外没有其他人负责。这样你会疯掉的! 这种方法的思维模式是,只关注要解决的问题是什么,把本该许多人协作完成的事情交织在一起,按照处理问题的逻辑过程来综合部署程序流程、划分模块。所有的事情都由一个超人(软件)来完成。这样一来,其他人都没有事情可做了,也没有责任了。而要把交织在一起的事情,事无巨细、统盘考虑处理得有条不紊,这个程序的结构就会设计得

14、非常复杂。,第二种方法中,你只给出通用的提示,然后期待每个人能自己承担起自己的责任,弄清怎样完成本该自己完成的任务。 其中最大的区别就是这种“责任的转移”。在第一种情况下,你要对一切负责;在第二种情况下,学生对自己的行为负责。两种情况下,要实现的目标相同,但组织方式差异很大。其中的奥妙就在于:责任从你转移到了每个人。 这种方法的思想模式是,关注要解决的问题可以归纳或划分为哪些责任,找到这些负有责任的人(在面向对象的分析中,找到或设置类或对象),研究他们在解决这一问题的过程中各自都应该负有什么责任(通过类和对象的交互场景,归纳每个对象应该负有的责任),然后通过消息传递,让他们各自承担起自己的责任

15、就行了。,第二种方案除了责任明确、解决问题简单以外,还具有能够应对需求变更的先天优势。为了看到这种责任重新安排带来的影响,我们考虑一下在有了新的需求变化时,情况会怎样。 假设,你被告知需要给听讲的学生中的研究生一些特殊指示。他们可能需要在听完你的讲座之后,要给本讲座一个书面评价,并交到教务处。,在上面的第一种情况下,我们将不得不对控制程序进行结构修改,以区别研究生和本科生,然后给研究生特殊指示。而在每个人各司其责的第二种情况下,我们只需要从“学生”中再派生出一个“研究生”这样一个特殊的对象,赋予它相应的责任就行了,而作为一个特殊对象的你,除了需要说“找到你们下一个听讲的教室”外,只需再多说一句

16、话:“请研究生对讲座进行书面评价,并交到教务处”。每个人仍然只需按此指示行事即可,程序的结构无须改动,只是为你添加了责任和新创建了一个研究生对象。,这表示在控制程序的责任发生了明显变化时,在第一种情况下,每次需要增加一类新的学生时,控制程序本身必须做修改,要负责告诉新的一类学生如何去做;而在第二种情况下,新一类的学生不会影响控制程序,由学生自己负责弄清自己如何去做。 显然,面向对象的思维模式接近现实生活,符合人的认识习惯,在就对需求变更方面有着先天的优势。,7.1.4 学会用三个视角看问题,在“听讲座的问题”中,为什么会有这种区别呢?这是因为第二种方法有三方面的特性: (1)人们对自己的行为负责,而不再由一个中央控制程序负责决定他们的行为。 (2)控制程序可以与不同类型的人交流,本例中有研究生和普通学生,也许还有可能会有其他类型的学生。对控制程序来讲,这些学生没什么区别,只是学生自己知道自己是什么类型的学生。 (3)控制程序不需要知道学生从此教室到下一教室可能需要采取的特殊步骤。学生自己有能力

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号