软考架构师(14)——面向对象方法

0:基本概念

面向对象方法包括:面向对象分析,面向对象设计,面向对象程序设计html

一:统一建模语言(UML)

1:UML结构

UML结构包括UML的基本构造块,支配这些构造块如何放在一块儿的规则(架构)和一些运用于整个UML的机制算法

(1)构造块:

事物:数据库

UML中的事物也称为建模元素,包括结构事物(structural things)、行为事物(behavioral things,动做事物)、分组事物(grouping things)和注释事物(annotational things,注解事物)。这些事物是UML模型中最基本的面向对象的构造块。编程

关系:安全

UML 用关系把事物结合在一块儿,UML中的关系主要有四种:数据结构

(1)依赖(dependencies):两个事物之间的语义关系,其中一个事物发生变化会影响另外一个事物的语义。架构

(2)关联(association):一种描述一组对象之间链接的结构关系,如聚合关系(描述了总体和部分间的结构关系)。并发

(3)泛化(generalization):一种通常化和特殊化的关系,描述特殊元素的对象可替换通常元素的对象。模块化

(4)实现(realization):类之间的语义关系,其中的一个类指定了由另外一个类保证执行的契约。post

图:

UML 2.0包括14种图,分别列举以下:

(1)类图(class diagram):描述一组类、接口、协做和它们之间的关系。在面向对象系统的建模中,最多见的图就是类图。类图给出了系统的静态设计视图,活动类的类图给出了系统的静态进程视图。

(2)对象图(object diagram):描述一组对象及它们之间的关系。对象图描述了在类图中所创建的事物实例的静态快照。和类图同样,这些图给出了系统的静态设计视图或静态进程视图,但它们是从真实案例或原型案例的角度创建的。 

(3)构件图(component diagram):描述一个封装的类和它的接口、端口以及由内嵌的构件和链接件构成的内部结构。构件图用于表示系统的静态设计实现视图。对于由小的部件构建大的系统来讲,构件图是很重要的。构件图是类图的变体。

(4)组合结构图(composite structure diagram):描述结构化类(例如构件或类)的内部结构,包括结构化类与系统其他部分的交互点。它显示联合执行包含结构化类的行为的构件配置。组合结构图用于画出结构化类的内部内容。

(5)用例图(use case diagram):描述一组用例、参与者(一种特殊的类)及它们之间的关系。用例图给出系统的静态用例视图。这些图在对系统的行为进行组织和建模时是很是重要的。 

(6)顺序图(sequence diagram,序列图):是一种交互图(interaction diagram),交互图展示了一种交互,它由一组对象或角色以及它们之间可能发送的消息构成。交互图专一于系统的动态视图。顺序图是强调消息的时间次序的交互图。

(7)通讯图(communication diagram):也是一种交互图,它强调收发消息的对象或角色的结构组织。顺序图和通讯图表达了相似的基本概念,但每种图所强调的概念不一样,顺序图强调的是时序,通讯图则强调消息流经的数据结构。

(8)定时图(timing diagram,计时图):也是一种交互图,它强调消息跨越不一样对象或角色的实际时间,而不只仅只是关心消息的相对顺序。

(9)状态图(state diagram):描述一个状态机,它由状态、转移、事件和活动组成。状态图给出了对象的动态视图。它对于接口、类或协做的行为建模尤其重要,并且它强调事件致使的对象行为,这很是有助于对反应式系统建模。 

(10)活动图(activity diagram):将进程或其余计算的结构展现为计算内部一步步的控制流和数据流。活动图专一于系统的动态视图。它对系统的功能建模特别重要,并强调对象间的控制流程。

(11)部署图(deployment diagram):描述对运行时的处理节点及在其中生存的构件的配置。部署图给出了架构的静态部署视图,一般一个节点包含一个或多个部署图。

(12)制品图(artifact diagram):描述计算机中一个系统的物理结构。制品包括文件、数据库和相似的物理比特集合。制品图一般与部署图一块儿使用。制品也给出了它们实现的类和构件。 

(13)包图(package diagram):描述由模型自己分解而成的组织单元,以及它们的依赖关系

(14)交互概览图(interaction overview diagram):是活动图和顺序图的混合物。

(2):规则

UML用于描述事物的语义规则分别是为事物、关系和图命名。

给一个名字以特定含义的语境,即范围;

怎样使用或看见名字,便可见性;

事物如何正确、一致地相互联系,即完整性;

运行或模拟动态模型的含义是什么,即执行。

UML对系统架构的定义是系统的组织结构,包括系统分解的组成部分、它们的关联性、交互、机制和指导原则等这些提供系统设计的信息。

而具体来讲,就是指5个系统视图,分别是逻辑视图、进程视图、实现视图、部署视图和用例视图。

(1)逻辑视图:以问题域的语汇组成的类和对象集合。

(2)进程视图:可执行线程和进程做为活动类的建模,它是逻辑视图的一次执行实例,描绘了所设计的并发与同步结构。

(3)实现视图:对组成基于系统的物理代码的文件和构件进行建模。

(4)部署视图:把构件物理地部署到一组物理的、可计算的节点上,表示软件到硬件的映射及分布结构。

(5)用例视图:最基本的需求分析模型。

其使用对应时间请参考:《软考架构师(8)——软件架构设计》中的图

 (3)公共机制

公共机制是指达到特定目标的公共UML方法,主要包括规格说明(详细说明)、修饰、公共分类(通用划分)和扩展机制四种。

 二:面向对象分析

用例模型

分析模型

三:面向对象设计

面向对象设计是把分析阶段获得的需求转变成符合成本和质量要求的、抽象的系统实现方案的。

面向对象设计的一些基本准则是:模块化、抽象、信息隐藏、高内聚和低耦合。

下面是具体面向对象设计的原则

(1)单一职责原则:(即尽量一个类对应一个责任)这是模块内聚性在类和类的职责中的体现,若是一个类承担的职责过多,意味着这些职责耦合在一块儿,造成的颇有多是一个“杂凑类”,任一个职责的变化可能会削弱或者抑制该类完成其余职责的能力,并影响到构建、测试和部署等活动。经过业务分离能够对概念进行解耦,从而获得目的单一的类。

(2)开放-封闭原则。(即对于扩展是开放的,对于修改是封闭的)在模块自己不变更的状况下,经过改变模块周围的环境达到修改目的。遵循开放-封闭原则设计出的模块具备一个主要特征,即对于扩展是开放的,对于修改是封闭的。也就是说,模块的行为是可扩展的,当应用的需求改变时,在模块上进行扩展使其具备知足那些改变的新行为。当模块进行扩展时,没必要改动模块的源代码或二进制代码。

(3)李氏(Liskov)替换原则。(即子类型必须可以替换掉它们的基类型)子类具备扩展父类的责任,而不是重写的责任。也就是说,基类的使用者没必要为了使用子类而作任何其余的事情,他们能够在根本不了解子类的特殊性,甚至没必要知道是否存在子类,存在哪些子类的状况下来调用基类的抽象方法。这样多态性才能顺利实现。事实上,正是Livkov替换原则,才使开放-封闭原则得以实现。由于正是子类的可替换性才使得基类的模块在无需修改的状况下就能够扩展。

(4)依赖倒置原则。高层模块不该该依赖于低层模块,两者都应该依赖于抽象;抽象不该该依赖于细节,细节应该依赖于抽象。每一个较高的层次都为它须要的服务声明一个抽象接口,较低的层次实现这个接口,每一个高层类都经过该抽象接口使用下一层;要依赖于抽象,而不是具体实现。也能够这样说,要针对接口编程,不要针对实现编程。

(5)接口隔离原则。应当为客户端提供尽可能小的单独的接口,而不是提供大的接口;使用多个专门的接口比使用单一的总接口要好。也就是说,一个类对另一个类的依赖性应当是创建在最小的接口上的。这里的“接口”每每有两种不一样的含义:一种是指一个类型所具备的方法特征的集合,仅仅是一种逻辑上的抽象;另一种是指某种语言具体的“接口”定义,有严格的定义和结构。在进行OOD的时候,一个重要的工做就是恰当的划分角色和角色对应的接口。将没有关系的接口合并在一块儿,是对角色和接口的“污染”。若是将一些看上去差很少的接口合并,并认为这是一种代码优化,这也是错误的。不一样的角色应该交给不一样的接口,而不能都交给一个接口。

(6)组合重用原则:要尽可能使用组合,而不是继承关系达到重用目的。组合相比于继承的好处:更大的灵活性而不会影响调用代码;更短的编译时间;适用性更广;较好的健壮性和安全性,更少的复杂性和脆弱性,更好的可维护性;可以在运行期建立新的对象。固然,耦合度的下降又会增长设计的难度、系统的复杂性以及实现的成本等,所以,在设计过程当中,必须对这些因素综合考虑。

(7)迪米特(Demeter)原则:又叫最少知识法则(Least Knowledge Principle,LKP),就是说一个对象应当对其余对象有尽量少的了解。遵循类之间的迪米特原则会使一个系统的局部设计简化,由于每个局部都不会和远距离的对象有直接的关联。可是,这也会形成系统的不一样模块之间的通讯效率下降,也会使系统的不一样模块之间不容易协调。迪米特原则在类的设计上主要体如今:优先考虑将类设置成不变类,尽可能下降类的访问权限,谨慎使用Serializable,尽可能下降成员的访问权限。但遵循该原则,会在系统中造出大量的小方法,这些方法仅仅是传递间接的调用,与系统的商务逻辑无关。

四:面向对象测试

 采用面向对象开发相对应的测试技术,它一般包括4个测试层次,从低到高排列分别是算法层、类层、模板层和系统层。

(1)算法层:测试类中定义的每一个方法,基本上至关于传统软件测试中的单元测试。

(2)类层:测试封装在同一个类中的全部方法与属性之间的相互做用。在面向对象软件中类是基本模块,所以能够认为这是面向对象测试中所特有的模块(单元)测试。

(3)模板层:也称为主题层,测试一组协同工做的类或对象之间的相互做用。大致上至关于传统软件测试中的子系统测试,可是也有面向对象软件的特色(例如:对象之间经过发送消息相互做用)。

(4)系统层。把各个子系统组装成完整的面向对象软件系统,在组装过程当中同时进行测试。

相关文章
相关标签/搜索