购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4.1 考点精讲

1.面向对象的基本概念

面向对象的基本概念有对象、类、抽象、封装、继承、多态、接口、消息、构件、模式和复用等。

(1)对象

对象是由数据及其操作所构成的封装体,是系统中用来描述客观事物的一个封装,是构成系统的基本单位。采用计算机语言描述,对象是由一组属性和对这组属性进行操作的一组服务构成的。

对象包含三个基本要素,分别是对象标识、对象状态和对象行为。

每一个对象必须有一个名字以区别于其他对象,这就是对象标识;状态用来描述对象的某些特征;对象行为用来封装对象所拥有的业务操作。例如,对于教师王老师而言,包含其性别、年龄、职称等个人状态信息,同时还具有授课的行为特征,那么王老师就是封装后的一个典型对象。

(2)类

类是现实世界中实体的形式化描述,类将该实体的数据和函数封装在一起。类的数据也叫属性、状态或特征,它表现类静态的一面。类的函数也叫功能、操作或服务,它表现类动态的一面。

王老师是一名教师,也就拥有了教师的特征,这个特征就是教师这个类所特有的,具体而言,共同的状态通过属性表现出来,共同的行为通过操作表现出来。

(3)类和对象的关系

对象是类的实际例子。如果将对象比作房子,那么类就是房子的设计图纸。例如,银行里所有储户的账户,可以抽象为账户类。用自然语言描述账户类如下:

类账户

{

属性:

存款人姓名;

身份证号;

开户日期;

账号;

密码;

账上余额;

行为:

存款();

取款();

}

用计算机语言表示账户类,命名账户类为ACCOUNT:

Class ACCOUNT

{

Attribute:

name;

ID Number;

Date;

Account_Number;

pasSword;

total;

Function:

Save();

Withdraw();

}

账户类的对象,可以是一个个具体的储户,如张三工行的账户、张三建行的账户、李四工行的账户、李四建行的账户。对类进行实例化时可用计算机语言描述如下:

ACCOUNT ZhangSan_ICBCAccount = new ACCOUNT();

ACCOUNT ZhangSan_CBCAccount = new ACCOUNT();

ACCOUNT LiSi_ICBCAccount = new ACCOUNT();

ACCOUNT LiSi _CBCAccount = new ACCOUNT();

类和对象的关系可以总结为:

(4)抽象

抽象是通过特定的实例抽取共同特征以后形成概念的过程。它强调主要特征,忽略次要特征。一个对象是现实世界中一个实体的抽象,一个类是一组对象的抽象,抽象是一种单一化的描述,它强调给出与应用相关的特性,抛弃不相关的特性。

(5)封装

封装是将相关的概念组成一个单元,然后通过一个名称来引用它。面向对象封装是将数据和基于数据的操作封装成一个整体对象,对数据的访问或修改只能通过对象对外提供的接口进行。

对于银行账户类而言,有取款和存款的行为特征,但实现细节对于客户而言并不可见,所以在进行ATM提款交易的过程中,我们并不知道交易如何进行,对应账户是如何保存状态的,这就体现了对象的封装。

(6)继承

继承表示类之间的层次关系,这种关系使得某类对象可以继承另外一类对象的特征和能力,继承又可分为单继承和多继承,单继承是子类只从一个父类继承,而多继承中的子类可以从多于一个的父类继承,Java是单继承的语言,而C++允许多继承。

假设类B继承类A,即类B中的对象具有类A的一切特征(包括属性和操作)。类A称为基类或父类或超类,类B称为类A的派生类或子类,类B在类A的基础上还可以有一些扩展,即可以加入新的属性与操作。

例如Dog(狗类)继承自父类Mammal(哺乳动物类),Dog具有一般的Mammal都具有的特征和能力,但Dog的叫声与喜欢啃骨头是比较独特的,对主人非常忠诚的品质也是比较独特的。

(7)多态

多态性是一种方法,这种方法使得在多个类中可以定义同一个操作或属性名,并在每个类中可以有不同的实现。多态性使得一个属性或变量在不同的时期可以表示不同类的对象。例如:Rectangle(矩形类)和Circle(圆形类)都继承于Shape(形状类),对于Shape而言,会有getArea( )(求面积)的方法,Rectangle和Circle也都继承了这一方法,但显而易见,Rectangle和Circle的getArea( )方法的实现是完全不一样的(即二者求面积的公式相去甚远),这就体现了多态的特征。

(8)接口

所谓接口就是对操作规范的说明。接口只是说明操作应该做什么(What),但没有定义操作如何做(How)。接口可以理解成为类的一个特例,它只规定实现此接口的类的操作方法,而把真正的实现细节交由实现该接口的类去完成。

接口在面向对象分析和设计过程中起到了至关重要的桥梁作用,系统分析员通常先把有待实现的功能封装并定义成接口,而后期程序员依据此接口进行编码实现。

(9)消息

消息(Message)是对象间的交互手段,其形式如下:

Message:[dest,op,para]

其中dest指目标对象Destination Object,op指操作Operation,para指操作需要的参数Parameters。

(10)构件

构件又名组件,是软件系统可替换的、物理的组成部分,它封装了实现体(实现某个职能),并提供了一组接口的实现方法。可以认为构件是一个封装的代码模块或大粒度的运行时的模块,也可将构件理解为具有一定功能、能够独立工作或同其他构件组合起来协调工作的对象。

对于构件,应当按可复用的要求进行设计、实现、打包、编写文档。构件应当是内聚的,并具有相当稳定的公开的接口。为了使构件更切合实际、更有效地被复用,构件应当具备“可变性”,以提高其通用性。构件一方面应向复用者提供一些公共“特性”,另一方面还要提供可变的“特性”。针对不同的应用系统,只需对其可变部分进行适当的调节。复用者要根据复用的具体需要,改造构件的可变“特性”,即“客户化”。

(11)模式

模式是一条由三部分组成的规则,它表示了一个特定环境、一个问题和一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题的解决方案。这样就能一次又一次地使用该方案而不必做重复劳动。

将设计模式引入软件设计和开发过程的目的在于充分利用已有的软件开发经验,这是因为设计模式通常是对于某一类软件设计问题的可重用的解决方案。设计模式使得人们可以更加简单和方便地去复用成功的软件设计和体系结构,从而能够帮助设计者更快更好地完成系统设计。

(12)复用

软件复用是指将已有的软件及其有效成分用于构造新的软件或系统。构件技术是软件复用实现的关键。

2.统一建模语言与可视化建模

(1)统一建模语言概述

统一建模语言(Unified Modeling Language,UML。)是一个通用的可视化建模语言,它是面向对象分析和设计的一种标准化表示,用于对软件进行描述、可视化处理、构造和建立软件系统的文档。它记录了对所构造的系统的决定和理解,可用于对系统的理解、设计、浏览、配置、维护和信息控制。UML适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具,是一种总结了以往建模技术的经验并吸收当今优秀成果的标准建模方法。UML标准包括相关概念的语义,表示法和说明,提供了静态、动态、系统环境及组织结构的模型。它可被可视化建模工具所支持,这些工具提供了代码生成器和报表生成器等。UML标准并没有定义一种标准的开发过程,但它比较适用于迭代式的开发过程,是为支持大部分现存的面向对象开发过程而设计的。

UML描述了系统的静态结构和动态行为,它将系统描述为一些独立的相互作用的对象,构成为外界提供一定功能的模型结构,静态结构定义了系统中重要对象的属性和服务,以及这些对象之间的相互关系,动态行为定义了对象的时间特性和对象为完成目标而相互进行通信的机制。

UML具有如下的语言特征。

(2)UML的发展历史

面向对象技术和UML的发展过程经历了长期的过程。在美国,截至1996年10月,UML获得了工业界、科技界和应用界的广泛支持,已有700多个公司表示支持采用UML作为建模语言。1996年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。1997年11月17日.OMG采纳UML l.1作为基于面向对象技术的标准建模语言。至今,UML已发展至2.X版本。UML代表了面向对象方法的软件开发技术的发展方向,具有巨大的市场前景,也具有重大的经济价值和国防价值。

(3)UML的设计目标

首先,最重要的目标是使UML成为一个通用的建模语言,可供所有建模者使用。它并非某人专有,而是建立在计算机界普遍认同的基础上,即它包括了各种主要的方法并可作为它们的建模语言。其次,UML应能够很好地支持设计工作,像封装、划分等记录模型构造思路。此外,UML应该能够准确表达当前软件开发中的热点问题,比如软件规模、分布、并发、方式和团队开发等。

UML并不试图成为一个完整的开发方法,它不包括一步一步的开发过程。UML和使用UML的软件开发过程是两回事。UML可以支持很多的,至少是目前现有的大部分软件开发过程。UML包含了完整的概念,这些概念对于支持基于一个健壮的架构来解决用例驱动的选代式开发过程是必要的。

UML的最终目标是在尽可能简单的同时能够对应用系统的各个方面建模。UML需要有足够的表达能力以便可以处理现代软件系统中出现的所有概念,如并发和分布,以及软件工程中使用的技巧,如封装和构件。它必须是一个通用语言,像任何一种通用程序设计语言一样,这就意味着UML必将十分庞大,它比先前的建模语言更复杂、更全面。

(4)UML图

UML中的各种构件和概念之间没有明显的划分界限,但为方便起见,往往把UML的14种图分为两大类:静态图(或结构图)与动态图(或行为图)。

静态图主要包括7种:类图、对象图、包图、组合结构图、构件图、部署图和制品图;动态图也包括7种:用例图、顺序图、通信图、定时图、状态图、活动图和交互概览图,一共14种图。

①类图(Class diagram)

类图用来表示系统中的类以及类与类之间的关系,描述系统的静态结构,用于逻辑视图中。类是对象的抽象描述。所谓对象就是可以控制和操作的实体,类是具有共同的结构、行为、关系、语义的一组对象的抽象。类的行为和结构特征分别通过操作和属性表示。

②对象图(Object diagram)

对象图是类图的示例,类图表示类以及类与类之间的关系,对象图则表示在某一时刻这些类的具体实例以及这些实例之间的具体连接关系,可以帮助人们理解比较复杂的类图。对象图也可以用于显示类图中的对象在某一点的连接关系。对象图常用于用例视图和逻辑视图中。

③包图(Package diagram)

展现了由模型本身分解而成的组织单元以及它们的依赖关系。(将相关的类组合在一起,并描述这些类之间的关系。)包与类的关系就像目录与文件夹的关系,包里面可以有类,包里面也可以有包。

④组合结构图(Composite structure diagram)

用来描述系统中某一部分(即“组合结构”,可以就是一个类)的内部结构,包括该部分与系统其他部分的交互点;它能够展示该部分内容“内部”参与者的配置情况。

⑤组件图(Component diagram)

又叫构件图,其描述代码构件的物理结构以及各种构件之间的依赖关系。用来建模软件的构件及其相互之间的关系,这些图由构件标记符和构件之间的关系构成。在构件图中,构件是软件中的单个组成部分,它可以是一个文件,产品、可执行文件和脚本等。构件图常用于实现视图中。

⑥部署图(Deployment diagram)

又叫配置图,其用来建模系统的物理部署,即显示系统中软件和硬件的物理架构。图中通常显示实际的计算机和设备及它们之间的关系(通过什么协议联系)、各DLL如何分布等。部署图常用于部署视图中。

⑦制品图(Artifact diagram)

展现了计算机中一个系统的物理结构。制品包括文件、数据库和类似的物理比特集合。制品常与部署图一起使用(通常部署图中的一个节点包括了一个或多个制品)。

⑧用例图(Use case diagram)

用例图描述系统的功能,由系统、用例和三种元素组成。图中显示若干角色以及这些角色和系统提供的用例之间的连接关系。用例是系统对外提供的功能的描述,是角色和系统在一次交互过程中执行的相关事务的序列。角色是与系统、子系统或类交互的外部人员、进程或事物。用例图常用于用例视图中(用例图中通常用椭圆表示用例,用人形图案表示参与者)。

⑨顺序图(Sequence diagram)

又叫序列图,面向对象系统中对象之间的交互表现为消息的发送和接收。序列图反映若干个对象之间的动态协作关系,即随着时间的流逝,消息是如何在对象之间发送和接收的。序列图表现为二维的形式,其中的纵坐标轴显示时间,横坐标轴显示对象(每个对象的下方沿时间轴有一根生命线)。序列图中重点反映对象之间发送消息的先后次序,常用在逻辑视图中。

⑩通信图(Collaboration diagram)

又叫协作图,其主要描述协作对象之间的交互和链接。协作图和序列图同样反映对象间的动态协作,也可以表达消息序列,但重点描述交换消息的对象之间的关系,强调的是空间关系而非时间顺序。

定时图(Timing diagram)

定时图是一种交互图,它展现了消息跨越不同对象或角色的实际时间,而不仅仅是关心消息的相对顺序。

状态图(State diagram)

状态图主要用来描述对象、子系统、系统的生命周期。通过状态图可以了解一个对象可能具有的所有状态、导致对象状态改变的事件,以及状态转移引发的动作。状态是对象操作的前一次活动的结果,通常由对象的属性值来决定。事件指的是发生的且引起某些动作执行的事情。状态的变化称做转移,与转移相连的动作指明状态转移时应该做的事情。状态图是对类描述的事物的补充说明,用在逻辑视图中描述类的行为。

活动图(Activity diagram)

活动图显示动作及其结果,着重描述操作实现中所完成的工作以及用例实例或对象中的活动。活动图反映了一个连续的活动流,常用于描述一个操作执行过程中所完成的工作。活动图也有其他的用途,如显示如何执行一组相关的动作,以及这些动作如何影响它们周围的对象,说明一次商务活动中的工人、工作流、组织和对象是如何工作的等。

交互概览图是活动图和顺序图的混合物。顺序图、通信图、定时图、交互概览图统称交互图。

以上14种图中考得较多的是类图、构件图、部署图、用例图、顺序图、通信图、状态图、活动图等,考生朋友需重点关注之(既要理解这些图的作用与意义,也要能面对试卷上的一个图形,看懂是哪一种图)。

(5)UML视图

单一的图形不可能包含系统所需的所有信息,更不可能描述系统的整体结构功能。一般来说,系统通常是从多个不同的方面来描述的。

为方便起见,用视图来划分系统各方面,每一种视图描述系统某一方面的特性。这样,一个完整的系统模型就由许多视图来共同描述。

UML中的视图大致分为如下5种:用例视图、逻辑视图、并发视图、构件视图、配置视图。

上述5种视图分别描述系统的一个方面,5种视图组合构成UML完整模型,它们各自的特点如下。

①用例视图强调从系统的外部参与者(主要是用户)的角度看到的或需要的系统功能。

②用例视图描述系统应该具备的功能,也就是外部参与者所需要的功能。

③用例是系统中的一个功能模块,一个用例对应着一个功能模块,系统要提供的功能都是在用例视图中描述的。

④参与者可以是一个用户或者是另一个系统,一个参与者可以参与多个用例的执行,用例视图列出了哪个参与者参与了哪些用例的执行。

⑤用例视图是UML视图的核心,它的内容直接驱动其他视图的开发。

⑥用例视图主要由用例图组成。

①逻辑视图强调从系统的静态结构和动态行为的角度显示如何实现系统的功能。

②用例视图描述了系统要提供什么样的功能,而逻辑视图用来描述如何实现用例视图中提出的功能。

③与用例视图不同,逻辑视图主要关注系统内部,它既描述系统的静态结构,也描述系统的内部活动。

④系统的静态结构在类图和对象图中进行描述,主要描述类、对象以及它们之间的关系。

⑤系统的动态行为在状态图、时序图、协作图和活动图中进行描述。

⑥逻辑视图的使用者主要是设计人员和开发人员。

①并发视图强调显示系统的并发性。

②并发视图主要考虑资源的有效利用,代码的并行执行以及系统环境中的异步事件的处理。

③并发视图要处理线程之间的通信和同步。

④并发视图由状态图、协作图以及活动图组成。

⑤并发视图的使用者主要是开发人员和系统集成人员。

①构件视图强调显示构件的组织结构。

②构件视图描述系统的实现模块以及它们之间的依赖关系。

③构件视图主要由构件图构成。

④构件视图的使用者主要是开发人员。

①构件视图强调显示系统的具体部署。

②配置视图显示系统的物理部署,它描述位于节点上的运行实例的部署情况。例如一个程序在哪台计算机上执行,执行程序的各节点设备之间是如何连接的。

③配置视图主要由配置图构成。

④配置视图的使用者主要是开发人员、系统集成人员和测试人员。

3.面向对象分析与设计

面向对象的系统分析阶段将运用面向对象的方法分析问题域,建立基于对象、消息的业务模型,形成对客观世界和业务本身的正确认识。

(1)面向对象的分析模型

面向对象的分析模型由用例模型、类-对象模型、对象-关系模型和对象-行为模型组成。

一个用例模型可由若干幅用例图组成。用例描述了用户和系统之间的交互,其重点是系统为用户做什么。用例模型描述全部的系统功能行为。

类-对象模型,描述系统所涉及的全部类以及对象。每个类和对象都通过属性、操作和调研者来进行进一步描述。

对象-关系模型,描述对象之间的静态关系,同时定义了系统中所有重要的消息路径,它也可以具体化到对象的属性、操作和协作者。对象-关系模型包括类图和对象图。

对象-行为模型,描述了系统的动态行为。对象-行为模型包括状态图、顺序图、协作图和活动图。

(2)面向对象的分析方法

面向对象分析的主要目标如下。

面向对象分析的步骤如下。

(3)面向对象系统设计

面向对象的系统设计阶段对分析阶段给出的问题域模型,用面向对象方法设计出软件基础架构(概要设计)和完整的类结构(详细设计),以实现业务功能。设计阶段主要包括用例设计、类设计和子系统设计等。

用例设计的主要目的有:利用交互改进用例实现、调整对设计类的操作需求、调整对于系统和(或)它们的接口的操作需求、调整对封装体的操作需求。

一个系统的行为可以用许多方法来说明,包括协作或者交互的方法。用例设计通常使用交互图(特别是序列图)来说明系统的行为。当系统或者子系统的行为主要通过同步消息传递来说明时,序列图非常有用。由于消息序列通常没有严格的定义,因此,尤其是在事件驱动系统中,异步消息传递更容易利用状态图和协作图来进行说明。

类是设计工作的核心,系统的实际工作其实也是由类执行的。子系统、包、封装体以及协作关系等其他设计元素只是说明了类的组合方式或协同操作方式。

类设计的主要目的有:确保类可为用例实现提供必需的行为、确保提供充足的信息来明确无误地实施类、处理和类有关的非功能性需求、包含用于类的设计机制。

子系统是一种模型元素,它具有包(可包含其他模型元素)和类(具有行为)的语义。子系统的行为由它所包含的类或其他子系统提供。子系统实现一个或多个接口,这些接口定义子系统可以执行的行为。

子系统设计的主要目的是:用所包含类的协作来定义在系统接口中指定的行为、记录系统的内部结构、定义子系统接口和包含类之间的实现关系、确定对其他子系统的依赖关系。

子系统的外部行为是通过它所实现的接口定义的。子系统实现了某个接口时,就意味着它支持该接口定义的每一个操作。 oxiCs0HlwetpvTPY7fbhVj8aLHvCVZ2V705dqZBppbp3bB9E6TfIUxQg6v6lYSzE

点击中间区域
呼出菜单
上一章
目录
下一章
×