面向对象技术

目录

一、面向对象的基本概念

1、对象的概念

2、类的概念

3、继承

4、类的定义

5、多态性

二、统一建模语言

三、用例图

用例之间的关系

(1)包含(include)关系

(2)扩展(extend)关系

三、类图——静态视图

1、类的分类

(1)实体类

(2)控制类

(3) 边界类

2、类图中的关系

(1)依赖(Dependency)

(2)泛化(Generalization)

(3)实现关系(Implementation)

(4)关联(Association)/ 聚合(Aggregation)/ 组合(Composition)

四、对象图(ObjectDiagram)——静态视图

五、交互图——动态建模

1、序列图

2、通信图(协作图)

序列图和通信图的区别

3、交互概览图

4、计时图

六、状态图——动态建模

七、活动图

八、构件图(组件图)

九、部署图

十、包图


一、面向对象的基本概念

面向对象=对象+分类+继承+通过消息的通信

1、对象的概念

在计算机系统中,对象是指一组属性以及这组属性上的专用操作的封装体。属性可以是一些数据,也可以是另一个对象。

每个对象都有它自己的属性值,表示该对象的状态,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。

封装目的是使对象的使用者和生产者分离,使对象的定义和实现分开。

一个对象通常可由3部分组成,分别是对象名属性操作(方法)

2、类的概念

类是一组具有相同属性和相同操作的对象的集合。

一个类中的每个对象都是这个类的一个实例(instance)。在分析和设计时,我们通常把注意力集中在类上,而不是具体的对象上。

通常把一个类和这个类的所有对象称为类及对象或对象类。

一个类通常可由3部分组成,分别是类名属性操作(方法)

每个类一般都有实例,没有实例的类是抽象类

抽象类不能被实例化,也就是不能用new关键字去产生对象,抽象方法只需声明,而不需实现。抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。

在Java语言中使用abstract class来定义抽象类。

3、继承

继承关系表示了对象间"is-a"的关系,即子类(派生类)是父类(超类、基类)的一种。

继承是在某个类的层次关联中不同的类共享属性和操作的一种机制。一个父类可以有多个子类,这些子类都是父类的特例。

父类描述了这些子类的公共属性和操作,子类还可以定义它自己的属性和操作。

  • 一个子类只有唯一的父类,这种继承称为单一继承
  • 一个子类有多个父类,可以从多个父类中继承特性,这种继承称为多重继承

对于两个类AB,如果A类是B类的子类,则说B类是A类的泛化。

继承是面向对象方法区别于其他方法的一个核心思想。

继承机制实现的是父类和子类之间的关系,子类又能够作为其他类的父类,因此组织而成一个层次结构。在程序中,凡是引用父类对象的地方都可以使用子类对象来代替。

4、类的定义

类实际上就是由一组描述对象属性或状态的数据项和作用在这些数据项上的操作(或称为方法、成员函数等)构成的封装体。

类的定义由关键字class打头,后跟类名,类名之后的括号内是类体,最后以分号";"结束。

类与C语言中的结构体大致相似,其不同之处在于类中规定了哪些成员可以访问,哪些成员不可以访问。这些都通过访问指明符予以说明。

访问指明符有三种,分别是privateprotectedpublic.

  1. private 成员私有化,除了该类的成员函数以外,谁也不能访问它们。
  2. public 成员公有化,程序中的所有函数(不管是类内定义的还是类外定义的),都可以访问这些成员。
  3. protected 成员受限保护,只有该类及该类的子类的成员函数才能够访问。在类的成员定义中,如果没有指明符,则系统默认为protected .

要注意的是在C++语言中,一个类的成员是可以访问该类的所有成员的。

继承的限定也有三种,分别是private(私有继承)protected(保护继承)public(公有继承)

  1. 在public继承时,派生类(子类)的publicprivate、protected型的成员函数可以访问基类中的public成员和 protected成员,派生类的对象仅可访问基类中的public成员。
  2. private继承时,派生类的publicprivateprotected型 的成员函数可以访问基类中的public成员和protected成员,但派生类的对象不可访问基类中的任何成员。
  3. protected继承时,派生类的publicprivateprotected 型的成员函数可以访问基类中的public成员和protected成员,但派生类的对象不可访问基类中的任何成员。

使用class关键字定义类时,默认的继承方式是private,也就是说,当继承方式为private继承时,可以省略private.

另外,类的成员有动态和静态之分,默认情况下,为动态成员

如果在成员说明前加上static,则说明是静态成员。静态成员与对象的实例无关,只与类本身有关。它们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据。

静态成员包括静态方法静态属性。 静态属性包含在类中要封装的数据,可以由所有类的实例共享。

实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量

5、多态性

多态性是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。与多态性密切相关的一个概念就是动态绑定

  • 传统的程序设计语言把过程调用与目标代码的连接放在程序运行前进行,称为静态绑定
  • 动态绑定则把这种连接推迟到运行时才进行。在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法连接,即动态绑定。

在使用多态技术时,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定,这样同一消息就可以调用不同的方法。

多态有多种不同的形式,其中参数多态和包含多态称为通用多态,过载多态和强制多态成为特定多态。

  1. 参数多态应用比较广泛,被称为最纯的多态。这是因为同一对象、函数或过程能以一致的形式用于不同的类型。
  2. 包含多态最常见的例子就是子类型化,即一个类型是另一类型的子类型。
  3. 过载多态是同一变量被用来表示不同的功能,通过上下文以决定一个类所代表的功能。即通过语法对不同语义的对象使用相同的名,编译能够消除这一模糊。
  4. 强制多态是通过语义操作把一个变元的类型加以变换, 以符合一个函数的要求,如果不做这一强制性变换将出现类型错误。

类型的变换可在编译时完成,通常是隐式地进行,当然也可以在动态运行时来做。

二、统一建模语言

Unified Modeling Language (UML)又称统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

 UML分类

(1)静态模型(系统结构)

用例图、类图、对象图、构件图、部署图

(2)动态模型(系统行为)

状态图、活动图、顺序图、协作图 

UML中有4种事务:

1)结构事务:名词、静态部分、物理元素。

2)行为事务:动词、动态部分、行为。

3)分组事务:包。

4)注释事务:注解。

三、用例图

用例图是指由参与者(Actor)用例(Use Case)边界以及它们之间的关系构成的用于描述系统功能的视图

用例图(User Case)是外部用户(被称为参与者)所能观察到的系统功能的模型图。

用例图是系统的蓝图,用于需求分析阶段。用例图呈现了一些参与者,一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模

用例之间的关系

1)包含(include)关系

两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。

因为子用例被抽出,基用例并非一个完整的用例,所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行

include关系在用例图中使用带箭头的虚线表示(在线上标注<<include>>)箭头从基用例指向子用例。

(2)扩展(extend)关系

是对基用例的扩展基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。

extend关系在用例图中使用带箭头的虚线表示(在线上标注<<extend>>),箭头从子用例指向基用例

三、类图——静态视图

类图(Class diagram)展现了一组对象、接口、协作和它们之间的关系。类图是静态视图

类图中包括:

  1. 接口
  2. 协作
  3. 依赖、泛化和关联关系

使用类图的情况:

  1. 对系统的静态设计建模
  2. 对简单的协作建模
  3. 对逻辑数据库模式建模

1、类的分类

(1)实体类

实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,一般使用数据库表或文件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。

实体类来源于需求说明中的名词,如学生、商品等。

(2)控制类

控制类用于体现应用程序的执行逻辑,提供相应的业务操作,将控制类抽象出来可以降低界面和数据库之间的耦合度。

控制类用于对一个或几个用例所特有的控制行为进行建模。

控制对象(控制类的实例)通常控制其他对象,因此它们的行为具有协调性质。控制类将用例的特有行为进行封装。

(3) 边界类

边界类用于对外部用户与系统之间的交互对象进行抽象,主要包括界面类,如对话框、窗口、菜单等。

2、类图中的关系

(1)依赖(Dependency)

是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖。

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。

在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

(2)泛化(Generalization)

也就是继承关系的反关系,用于描述父类与子类之间的关系父类又称作基类或超类,子类又称作派生类

UML中,泛化关系用带空心三角形的直线来表示

子类继承自父类,父类是子类的泛化。

(3)实现关系(Implementation

是用来规定接口实现接口的类或者构建结构的关系,接口是操作的集合,而这些操作就用于规定类或者构建的一种服务。

接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系(Realization),在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。

UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。

例如:定义了一个交通工具接口Vehicle,包含一个抽象操作move(),在类Ship和类Car中都实现了该 move()操作,不过具体的实现细节将会不一样,如图所示:

(4)关联(Association)/ 聚合(Aggregation)/ 组合(Composition)

关联(Association)

是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子。

关联是类之间的结构关系,它描述了一组链,链是对象之间的连接。

两个类之间可以有多个由不同角色标识的关联。关联可以是双向的,也可以是单向的。

双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

  • 双向关联。默认情况下,关联是双向的。
  • 单向关联
  • 自关联
  • 多重关联

聚合(Aggregation

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。

在UML中,聚合关系用带空心菱形的直线表示。

例如:汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,因此,汽车和发动机是聚合关系,如图所示:

组合(Composition)

组合也是关联关系的一种特例,他体现的是一种contains-a 的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。

UML中,组合关系用带实心菱形的直线表示。

四、对象图(ObjectDiagram)——静态视图

对象图(ObjectDiagram) 展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照

类图与对象图的区别

五、交互图——动态建模

交互图表现为序列图通信图交互概览图计时图。用于动态建模

  • 序列图强调消息时间顺序的交互
  • 通信图强调接收和发送信息的对象的结构组织的交互
  • 交互概览图强调控制流的交互图
  • 计时图适合嵌入式系统建模的交互图

1、序列图

2、通信图(协作图)

对象:图中的矩形元素即为对象,其中冒号前面部分为对象名,后面为类名,表示类的一个实例。

链接:两个对象之间的单一线条表示,用来在通信图中关联对象,目的是让消息在不同系统对象之间传递。可以理解链接是公路,消息是车。

消息:通信图中对象之间通信的方式

序列图和通信图的区别

3、交互概览图

4、计时图

六、状态图——动态建模

用来描述一个特定的对象所有可能的状态以及由于各种事件的发生而引起的状态之间的转移和变化。用于对系统的动态方面建模

七、活动图

将进程或其他计算的结构展示为计算内部一步步的控制流和数据流,主要用来描述系统的动态视图

活动图在本质上是一种流程图。活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。

活动图主要描述行为的动作状态图主要描述行为的结果

八、构件图(组件图)

使用构件图的思想是复用

就像是我们盖房子,当房子的大体框架建好之后,剩下的门和窗户家具之类的直接拿来安装上即可,不需要再从新制作,直接拿来复用的思想。这些门和窗户就相当于一个个的构件。

构件有一下几种类型:

  • 部署构件:dll文件、exe文件、com+对象、CORBA 对象、EJB、动态Web页和数据库表等。
  • 工作产品构件:源代码文件、数据文件等
  • 执行构件:系统执行后得到的构件。

九、部署图

是用来显示系统中软件和硬件的物理架构

从部署图中,可以了解到软件和硬件组件之间的物理关系以及处理节点的组件分布情况。

使用部署图可以显示运行时系统的结构,同时还传达构成应用程序的硬件和软件元素的配置和部署方式。

十、包图

UML 中用类似于文件夹的符号表示的模型元素的组合。

包图是一种维护和描述系统总体结构的模型的重要建模工具,通过对包中各个包以及包之间关系的描述,展现出系统的模块与模块之间的依赖关系

包图的作用:

  1. 包图可以描述需求,设计的高阶概况;
  2. 包图通过合理规划自身功能反应系统的高层架构,在逻辑上将系统进行模块化分解
  3. 包图最终是组织源码的方式。

一个包图可以由任何一种UML图组成,通常是UML用例图或是 UML类图。

包被描述成文件夹,可以用于UML任何一种的图上。

包图只是把某些类放在一个包中,因此可以看做是类图的一种。

典型真题一

( )多态是指操作(方法)具有相同的名称、且在不同的上下文中所代表的含义不同。

  • A.参数
  • B.包含
  • C.过载
  • D.强制

试题分析

  • 参数多态:应用广泛、最纯的多态。
  • 包含多态:同样的操作可用于一个类型及其子类型。包含多态一般需要进行运行时的类型检查。
  • 强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。
  • 过载多态:同一个名(操作符﹑函数名)在不同的上下文中有不同的类型

本题应该选择C选项过载多态。

试题答案:C 

典型真题二

在某销售系统中,客户采用扫描二维码进行支付。若采用面向对象方法开发该销售系统,则客户类属于( )类, 二维码类属于( )类。

A.接口        B.实体      C.控制      D.状态

A.接口        B.实体      C.控制      D.状态

试题分析

类可以分为三种:实体类、接口类(边界类)和控制类。

  • 实体类的对象表示现实世界中真实的实体,如人、物等。
  • 接口类(边界类)的对象为用户提供一种与系统合作交互的方式,分为人和系统两大类,其中人的接口可以是显示屏、窗口、Web窗体、对话框、菜单、列表框、其他显示控制、条形码、二维码或者用户与系统交互的其他方法。系统接口涉及到把数据发送到其他系统,或者从其他系统接收数据
  • 控制类的对象用来控制活动流,充当协调者。

试题答案:B、A

典型真题三

如下所示的图为UML的( ),用于展示某汽车导航系统中( )。Mapping对象获取汽车当前位置(GPS Location)的消息为( )。

A.类图      B.组件图      C.通信图     D.部署图

  • A.对象之间的消息流及其顺序
  • B.完成任务所进行的活动流
  • C.对象的状态转换及其时间顺序
  • D.对象之间消息的时间顺序

A.1: getGraphic()     B. 2: getCarPos()     C. 1.1: CurrentArea()     D.2. 1: getCarLocation()

试题分析

通信图(communication diagram)。

  • 通信图是一种交互图,它强调收发消息的对象或参与者的结构组织。
  • 顺序图和通信图表达了类似的基本概念,但它们所强调的概念不同,顺序图强调的是时序,通信图强调的是对象之间的组织结构(关系);

获取汽车当前位置的消息为2.1:getCarLocation()。

试题答案:C、A、D

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值