版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年6月卫生资格考试呼吸内科尘肺预防专项试题及答案
- 黔南州惠水县城区学校考调中小学教师笔试真题2025
- 2026 年多科室轮转护士带教规划与管控
- 2026 年初中秋季开学第一课洪涝灾害家庭应急包准备科普
- 2026 年初中秋季开学第一课校园用电隐患自查安全教育课件
- 2026 年高中秋季开学第一课山洪来临转移避险要点科普课件
- 护理实习生临床接触患者信息的合规操作要点
- 机械加工精度细则
- 机械厂采购管理办法
- 2024统编版八年级语文下册期末复习:字音字形成语 高频考点+练习题(含答案)
- 2026-2030中国戊烷80和和20行业市场发展趋势与前景展望战略分析研究报告
- 2026时尚产业现状报告
- GB 47834-2026晶体硅光伏组件和逆变器能效限定值及能效等级
- 泳池灯光安装调试施工方案及技术措施
- 2026年部编版二年级上册语文教材分析
- 2026年养老管理师考试试题及答案详解
- T-CECS 《多段多级AO除磷脱氮技术规程》
- 弗思特FORCITIS白皮书4.0-超高性能混凝土UHPC材料在建筑幕墙中的应用
- 涟源市六亩塘镇招聘社区网格员备考题库附答案详解
- 2026年电商平台主播合作协议内容范本
- 20S515 钢筋混凝土及砖砌排水检查井
评论
0/150
提交评论