前言
面向对象已经听说过很多次了,今天就来总结一些简单的面向对象方法的知识。
面向对象的软件开发是一种新的软件工程方法,其基本思想是尽可能按照人类认识世界的方法和思维方式来分析和解决问题。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。20世纪80年代末以来,面向对象技术成为研究的热点,由于该方法能够提供更加清晰的需求和设计,已逐渐成为软件开发的主流方法。
概述
随着软件形式化方法及新型软件的开发,传统的软件工程方法的局限性逐渐暴露出来,才在的主要问题如下。
- 传统软件开发方法无法实现从问题空间到解空间的直接映射
传统的软件开发方法求解过程是先对应用领域进行分析,建立起问题空间的逻辑模型,在通过一系列复杂的转换和算法,构造计算机系统,获得解空间。由于问题空间与解空间的模型、描述方式的不同,他们之间存在着复杂的转换过程,尤其对于复杂系统及普遍存在的需求变化,就更难以适应。 - 传统软件开发方法无法实现高效的软件复用
- 传统软件开发方法难以实现从分析到设计的直接过程
向对象的方法则是将软件系统看做一系列离散的解空间对象的集合,并使问题空间的对象与解空间对象尽量一致。
那么究竟什么是面向对象的系统呢?根据Coad和Yourdon的定义,如果是按照以下概念设计和实现的系统,称为是面向对象的。
面向对象=对象+类+继承+通信
基本概念
面向对象技术主要包括对象、类、消息、继承、多态性、等核心概念。这几个面向对象的基本概念对理解面向对象的思想、学习和掌握面向对象的开发方法是十分重要的。
对象
对象是对客观事物或概念的抽象表述,对象不仅能表示具体的实体,也能表示抽象的概念、规则、设计或事件。通常有以下一些对象类型:
①有形的实行:在现实世界中,每个实体都是对象,如飞机、车辆、计算机、桌子、房子等,都属于有形的实体,这是容易识别的对象。
②作用:指人或组织,如教师、学生、医生、政府机关、公司、部门等所起的作用。
③事件:只在某个特定时间内所发生的事,如学习、演出、开会、办公、事故等。
④性能说明:如对产品的性能指标的说明,如计算机主板的速度、型号、性能说明等。
对象由属性和方法组成。属性反映了对象的信息特征,即对象本身的本质,如特点、值、状态等,而方法则用来定义改变属性状态的各种操作。
每个对象都存在一定的状态和内部标识,对象将它自身的属性集操作“包装”起来,成为封装。类
又称对象类,是指一组具有相同属性和运算的对象的抽象,即一组具有相同数据结构和相同操作的对象的集合,类是对象的模板。在一个类中,每个对象都是类的实例,它们都可以使用类中提供的函数。例如,小轿车是一个类,红旗牌小轿车、东风牌小轿车都是它的一个对象。继承
继承是以现存的定义为基础建立新定义的技术,是父类和子类之间共享数据和方法的机制,这是类之间的一种关系。子类的公共属性和操作归属于父类,并为每个子类共享,子类继承了父类的特性。继承性分为单重继承和多重继承。
多态性
多态性是指相同的操作、函数、过程作用于不同的对象上并获得不同的结果,即相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中所定义的操作去执行,从而产生不同的结果。例如,在父类“几何图形”中,定义了一个“绘图”操作,他的子类“椭圆”和“矩形”都继承了几何图形的“绘图”操作。同是“绘图”操作,分别作用在“椭圆”和“矩形”上,却画出了不同的图形。消息
消息是指对象在交互中所传送的通信信息。
主要特点
面向对象的方法具有以下主要特点。
- 按照人类习惯的思维方法,对软件开发过程所有阶段进行综合考虑
- 软件生存周期各阶段所使用的方法、技术具有高度的连续性
- 软件开发各阶段有机集成,有利于系统的稳定性
- 具有良好的重用性
面向对象的分析
面向对象分析(OOA)是运用面向对象的方法进行需求分析,它是面向对象方法从编程领域向分析领域延伸的产物,充分体现了面向对象的概念与原则。
- 需求分析中的问题
①明确问题域和系统责任的困难
问题域是指被开发系统的应用领域,即拟建立系统进行处理的业务范围。系统责任即所开发系统应该具备的职能。
②需求的不断变化
需求的变化是需求分析过程中遇到的一个严峻问题,应变能力的强弱是衡量一种分析方法优劣的重要标准。
③充分交流问题
④考虑复用要求 OOA的特点
一个好的分析方法,应该能够有效地解决上述软件需求分析中的问题,OOA在解决这些问题上具有较强的能力。
①有利于对问题域及系统责任的理解
②对需求变化有较强的适应性
③有利于人员之间的交流
④支持软件复用基本任务
OOA是软件开发过程中的问题定义阶段,目标是完成对所求解问题的分析,确定系统是“做什么”的,并建立系统的需求分析模型。
运用面向对象的方法,对问题域和系统责任进行分析和理解,找出描述它们的类和对象,定义其属性和操作,以及它们的结构,包括静态联系和动态联系,最终获得一个符合用户需求,并能够反映问题域和系统责任的OOA模型。
面向对象的设计
面向对象的设计(OOD)是面向对象方法的核心阶段。OOA建立的是应用领域面向对象的模型,而OOD建立的则是软件系统的模型。与OOA的模型相比较,OOD模型的抽象层次较低,因为他包含了与具体实现有关的细节,但是建模的原则和方法是相同的。
- 设计准则
①抽象
抽象是指强调实体的本质、内在的属性,而忽略了一些无关紧要的属性,
②信息隐蔽
信息隐蔽在面向对象的方法中的具体体现是封装性,封装性是保证软件部件具有优良的模块性的基础。
③弱耦合
按照抽象与封装性,弱耦合是指子系统之间的联系应该尽量地少。子系统应具有良好的接口,子系统通过接口与系统的其他部分联系。
④强内聚
它是指子系统内部由一些关系密切的类构成,除了少数的通信类外,子系统中的类应该具有该子系统中的其他类协作,构成具有强内聚性的子系统。
⑤可重用 - 基本任务
面向对象的设计是面向对象方法在软件设计阶段应用于扩展的结果,是将OOA所创建的分析模型转换为设计模型,解决系统“如何做”的问题。面向对象设计的主要目标是提高生产率,提高软件质量和可维护性。
典型的面向对象方法
随着面向对象开发方法的发展,逐渐形成了几个主要的流派:Coad/Yourdon方法、Booch方法、OMT方法和OOSE方法。它们各有特色,主要体现在描述方式和图例上,考虑的重点有所不同,但在描述方式上都以图形为主。
在这里详细讲解一下Coad/Yourdon方法。
Coad/Yourdon方法由P.Coad和E.Yourdon与1990年推出,该方法严格区分了面向对象分析(OOA)和面向对象设计(OOD),特别强调OOA和OOD采用完全一致的概念和表示法的转换。该方法的特点是:表示简练、易学,对于对象、结构、服务的认定较系统、完整,可操作性强。
OOA
在Coad/Yourdon方法中,OOA的主要任务是建立问题域的分析模型。分析过程和构造OOA概念模型的顺序由5个层次组成:类与对象层、属性层、服务层、结构层和主题层。他们表示分析的不同侧面。
下图给出了每个层次中所涉及主要概念和相应的图形表示。
OOA主要有以下活动:
①类和对象的认定
②结构的认定
指的是描述类及对象之间的结构关系,用来反映问题空间中复杂事物和复杂关系。
③主题的认定
④定义属性
⑤定义服务2.OOD
OOD的设计模型在面向对象的分析模型的5个层次上由4类部件构成,如下图所示,面向对象设计的主要内容包括设计这4类部件的活动。
①设计问题域部件
OOA与具体实现无关,而OOD则在很大程度上受具体实现环境的约束。通过分析得到的精确模型为设计问题域部件奠定了良好的基础。通常只需从实现的角度,对通过分析所建立的问题域模型做一些修改和补充,例如对类、对象、结构、属性及服务进行增加、修改或完善。
②设计人机交互部件
人机交互部件,表示用户与系统的交互命令及系统反馈的信息。在分析的基础上,进一步分析用户,确定交互细节,包括指定窗口、设计窗口集设计报表形式等。人机交互部件在一定程度上依赖于所使用的图形用户接口,接口不同,人机交互部件的类型也不同。
③设计任务管理部件
即要确定各种类型的任务,并把任务分配到硬件或软件上去执行。为了划分任务,首先要分析并发性。通过OOA建立的动态模型,是分析并发性的主要依据。通常把多个任务的并发执行称为多任务。
④设计数据管理部件
数据管理部件是系统存储、管理对象的基本设施,它建立在数据存储管理系统上,并且独立于各种数据管理模式。设计数据管理部件,既需要设计数据格式,有需要设计相应的服务。设计数据格式的方法与所使用的数据存储管理模式密切相关,通常有文件系统和数据管理系统两类数据存储模式。