面向对象的设计.ppt_第1页
面向对象的设计.ppt_第2页
面向对象的设计.ppt_第3页
面向对象的设计.ppt_第4页
面向对象的设计.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

第1章 面向对象的设计 在本章中,笔者将向大家介绍有关面向对象的基本概念, 及其如何和现实之中的问题相关联起来。并给出一个详细 的解决方案供大家学习。本章主要涉及到的知识点如下所 述。 对象和面向对象的概念:让大家明白什么是对象,什么是 类,什么是面向对象,及类和对象的关系。 面向对象与传统设计的比较:了解面向对象的优点,明白 为什么要使用面向对象的设计方法,而不使用传统的设计 方法。 抽象的概念和实现:理解什么是抽象,并知道如何实现抽 象。 面向对象的分析与设计:用实例来讲解面向对象的分析及 其设计。 1.1 接近自然的思维方式面向对象的思想 面向对象技术已经成为当今软件世界的主要程序 设计方法,具有很多优点。了解并掌握其中的基 本概念,对建立起面向对象的程序设计思想有很 重要的作用。 1.1.1 无处不在的对象 既然是面向对象的设计,那么首先要搞明白什么 是对象。其实现实中人们要进行研究的任何事物 都是对象,其组成了整个世界。包括抽象的规则 、计划或者事件。 对象是一个类的实例。其具有自身的状态(一个 对象用数据值来描述它的状态)和操作(用于改 变对象的状态,对象及其操作)。对象实现了状 态和操作的结合,使状态和操作封装于对象的统 一体中。这也是对象的特征。 简单的说,就是一些个体,真实反映于现实世界 中的事物。例如,你、我、他就都是对象,是人 这个类的实例。 1.1.2 对象的组织类 类是具有相同属性和行为的一组对象的集合。其 为属于该类的所有对象提供了统一的抽象描述, 其内部包括属性(是对象的状态的抽象,用数据 结构来描述)和行为(对象操作的抽象,用操作 名和实现该操作的方法来描述)两个主要部分。 对象的抽象就是类。 简单的说,就是物以群分,人以类聚。在一个抽 象的概念层上建立对象的分类。例如,蔬菜就是 一个类,但在现实中,是找不到蔬菜的,因为其 只是对是青菜、白菜、花菜等对象的一种分类, 是把其主要特征进行抽象后得到的。 1.1.3 类与对象的关系 类与对象的关系就如模具和铸件的关系,类的实 例化结果就是对象,而对一类对象的抽象(这个 概念将在后面的章节进行讲解)就是类。类描述 了一组有相同状态(属性)和相同操作(行为) 的对象。 例如,客车和摩托车作为车这个类的对象,都具 有一些共同的属性:重量、体积、牌照和排气量 等,不难想到,还有许多的其他的属性。也有一 些共同的行为:点火、起动、排气和燃烧等。而 车就是汽车和卡车抽象出来的类。如果要设计一 个车的模拟系统,那么在系统中就有可能会包括上 面提到的一些属性和行为。 1.1.4 自然的思维方式面向对象 在讲解面向对象概念之前,需要读者了解面向对象的三大 特征(这三个概念将会在以后的章节中进行讲解,这里提 出来而已):继承、多态性、封闭。 面向对象其实就是基于对象的概念,以对象为中心,以类 和继承为构造机制,开发出能够反映现实世界某个特定片 段的软件系统。 是从现实世界中客观存在的事物(即对象)出发,来构造 软件系统,并在系统构造中尽可能运用人类的自然思维方 式,强调直接以问题域(现实世界)中的事物为中心来思 考问题,认识问题,并根据这些事物的本质特点,把它们 抽象地表示为系统中的对象,作为系统的基本构成单位( 而不是用一些与现实世界中相关比较远的事物,并且没有 对应关系的其他概念来构造系统)。这可以使系统直接地 映射问题域,保持问题域中事物及其相互关系的本来面貌 。 1.1.5 “基于”与“面向”的差别 需要区分一下“基于对象”和“面向对象”的区 别。因为现实之中,有很多的开发语言,其实是 “基于对象”的,而不是“面向对象”的。那么 什么是基于对象呢? 基于对象,通常指的是对数据的封装,以及提供 一组方法对封装过的数据的操作。例如C的IO库中 的FILE*就可以看成是基于对象的。 面向对象,则是在基于对象的基础上增加了继承 和多态。也就是说“面向对象”和“基于对象” 都实现了“封装”的概念,但是面向对象实现了 “继承和多态”,而“基于对象”没有实现这些 。 1.2 传统设计与面向对象设计的比较 采用面向对象的设计方法与传统的设计方法相比 较有很多的优点,这些优点到底是什么?传统设 计方法又有那些不足?下面笔者将向大家逐个讲 解。 1.2.1 从“北京烤鸭”到面向对象 大家先来展开一下想象,如果想请别人吃自己做的“北京烤鸭”话,用传 统的设计方法是先把鸭杀死,拔光毛,去断鸭脚和翅膀,用清水清洗干净 鸭的内脏,并在里面填充上适当的香料。将鸭体用沸水浇烫,并用糖水浇 淋,风干,放炉火中烤熟,估计时间差不多以后,取出刷上一层香油,即 可食用。这种做法是面向过程的模式。 面向过程制作“北京烤鸭”的方法,采用的是按顺序按步骤得到“北京烤 鸭”。将这些步骤抽取出关键词,每个关键词代表一个过程:杀鸭拔毛 清洗填料浇烫浇淋风干烘烤取出上油。怎么样,一目了 然易于理解吧。 但如果能制造出一台新型的全自动化“北京烤鸭”的机器,只要在这机器 指定的入口扔一个鸭子进去,这台机器运作后,就会在另一个出口输送出 一个香喷喷的北京烤鸭。这种做法就是面向对象的。 以面向对象的方式制作“北京烤鸭”:制造一台全自动化机器(一个类) ,往入口扔一只鸭子往出口取一只烤鸭(一个对象)。就这么简单。你 不必理会机器内部怎么杀,怎么清洗以及怎么运作的(封装)。只要知道 这台机器的用途是制作“北京烤鸭”的,操作方法是往入口丢一只鸭子进 去,再从出口拿这只鸭子出来就行。 很明显,如果用户改变需求,想吃烤鸡,那么传统的方法将会全部重新来 过,而面向对象的方法,只需要给原来的机器增加新功能就行了。这也是 面向对象的优势之一,易于维护和改进。 1.2.2 传统设计方法的缺点 经过前一节的说明,总结出来传统的设计方法有如下的几个缺点: (1)传统的设计方法主要是面向过程的,讲究的是自顶向下,逐步求精 的编程理念。强调的是软件工程中的软件的可维护性,文档资料的重要性 ,规定最终的软件产品应该由完整、一致的配置成分组成。把软件的可读 性、可修改性和可测试性作为重要的质量指标。但实践证明,用传统方法 开发出来的软件,维护时其费用和成本仍然很高,其原因是可修改性差、 维护困难,导致可维护性差。 (2)传统的设计方法,其重用性差。重用性是指同一事物不经修改或稍 加修改就可多次重复使用的性质。 (3)传统的设计方法开发出的软件不能满足用户需要。其开发大型软件 系统涉及各种不同领域的知识,在开发需求模糊或需求动态变化的系统时 ,所开发出的软件系统往往不能真正满足用户的需要。 (4)用传统设计方法开发的软件,其稳定性、可修改性和可重用性都比 较差,这是因为传统设计方法的本质是功能分解,从代表目标系统整体功 能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,这样一层 一层地分解下去,直到仅剩下若干个容易实现的子处理功能为止,然后用 相应的工具来描述各个最低层的处理。 1.2.3 面向对象设计方法的优点 面向对象的优点,有如下几点: (1)采用面向对象设计方法设计的结构,可读性高,由于 继承的存在,即使改变需求,那么维护也只是在局部模块 ,所以维护起来是非常方便和成本较低的。 (2)软件质量高,因为在设计软件时,可重用现有的,在 以前的项目的领域中已被测试过多次的类,使系统满足业 务需求。 (3)软件开发效率高,在软件开发时,根据设计的需要对 现实世界的事物进行抽象,产生类。使用这样的方法解决 问题,接近于日常生活和自然的思考方式,势必提高软件 开发的效率和质量。 (4)由于继承、封装、多态的特性,自然设计出高内聚、 低耦合的系统结构,使得系统更灵活、更容易扩展,而且 成本更低。 1.3 面向对象的核心思想抽象 抽象是面向对象的核心思想。要掌握面向对象的 设计方法,就要首先理解抽象概念并学会如何进 行抽象。 1.3.1 核心思想抽象 抽象的意思就是从众多的事物中抽取出共同的、 本质性的特征和操作,抓住对象最核心的东西。 过滤掉一部分对象自有的特性和操作,直到只剩 下最基本的属性和操作。 抽象决定如何实现对象之前的对象的意义和行为 。使用抽象可以使复杂度降低,尽可能避免过早 考虑一些细节。虽然抽象是一个很简单易懂的概 念,但要在设计一个系统的时候,使用抽象却不 是那么简单的。 1.3.2 抽象的方法 下面将用一个例子来说明如何抽象的问题,为简化并容易理解, 只考虑系统中最通用的特性。现在要求把摩托车和客车等对象抽 象成为一个车类,那么首先需要确定摩托车和客车这些对象都有 哪些自己的特征和操作。要抽象,就必须进行比较,没有比较就 无法找到共同的部分。经过分析后,可以得到如图1.1所示的对象 特征及操作分析图。 1.4 面向对象的分析与设计 在了解了抽象的概念及实现之后,现在笔者将向 大家介绍面向对象的分析与实现,让大家对面向 对象有一个全面的了解。 1.4.1 面向对象的分析方法 面向对象的分析方法是面向对象世界观在分析方法中的直 接运用。它强调系统的结构应该直接与现实世界的结构相 对应,应该围绕现实世界中的对象来构造系统,而不是围 绕功能来构造系统。 面向对象分析的目的是对客观世界的系统进行建模。用来 明确问题的需求;为用户和开发人员提供明确的需求;为 用户和开发人员提供一个协商的基础,作为后继的设计和 实现的框架。 为了方便读者进行理解,笔者还是从一个示例开始介绍。 现有一家公司需要设计一个人事管理系统,其中有一个功 能要求是对各种不同类型的员工,计算其当月的工资,不 同类型的员工,拥有不同的薪金计算方法。并可以对以后 新增加类型(清洁工)的员工同样支持。 1.4.2 面向对象的设计 在经过上一节的分析后,现在可以进行相关的设计。不过在讲解相关设计 之前,还需要了解什么是面向对象的设计。 面向对象设计是把分析阶段得到的需求转变成符合要求的、抽象的系统实 现方案的过程。从面向对象分析到面向对象设计,是一个逐渐扩充的过程 。 通过对前一节的需求模型的抽象,可以设计出这样一个员工抽象类,如图 1.4所示。根据员工类型的不同,可以设计5个不同的类,不过这些类都必 须继承于这个员工抽象类。就得到如图1.5所示各类员工类图。 1.4.3 “小试牛刀”的结论 尽管在这里笔者只对复杂的系统中一个功能进行了极其简 单的描述,但这也正是笔者想要阐明的观点,尽可能的将 复杂的问题简单化。在初始设计阶段把精力集中在主要的 特性和需求上,而不要陷入到细节之中,一定要从系统的 最根本处入手。一旦当读者能够运用面向对象的分析方法 处理问题,并把面向对象应用到设计之中,那么建立一个 完整的系统将是一件多么容易的事情。 现在,明白面向对象设计的好处了吧,面向对象的设计方 法能很好地适应软件的变化,能将变化所带来的影响减为 最小。更强调各个类的“责任”,新增员工类型不会影响 原来员工类型的实现代码,这更符合真实的世界,也更能 控制变化所影响的范围。这也是面向对象设计的优点之一 。 1.5 小结 通过本章的学习,读者需要明白的内容: 对象和类的概念及其关系。 面向对象的三大特征。 面向对象设计方法的优点。 面向对象的核心思想抽象。 抽象是如何实现的。 面向对象的分析方法。 面向对象的设计方法。 在下一章节中,读者将了解到: C+开发工具VC的使用方法。 Visual C+的启动与主窗口。 Visual C+的菜单栏。 Visual C+的工具栏。 1.6 小测试 一、选择题 (1)具有自身的状态和操作的类的实例,被称为( )。 A 对象 B 程序 C 类 D 组合 (2)具有相同属性和行为的一组对象的集合,被称为( )。 A 对象 B 程序 C 类 D 组合 (3)面向对象的特征是( )。 A 继承 B 多态性 C 封装 D 以上三者 (4)基于对象和面向对象的区别是少了( )特征。 A 继承和多态 B 封装和多态 C 继承和封

温馨提示

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

评论

0/150

提交评论