第2章 理解面向对象

落花浮王杯 提交于 2020-01-12 04:28:34


面向对象设计方式由OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个部分组成。其中OOA和OOD已经采用UML(统一建模语言)来描述。因此本章主要分为两部分,首先介绍OOP(面向对象编程)面向对象编程,接着介绍UML(统一建模语言)的面向对象编程分析思想。

本章要点:

面向对象编程方法

软件开发领域有两种主流的开发方法:结构化开发方法和面向对象开发方法。

1.结构化程序设计

1) 结构化程序设计简介

​ 结构化程序设计里最小的程序单元是函数,每个函数都负责完成一个功能,用以接收一些输入数据,函数对这些输入数据进行处理,处理结束后输出一些数据。整个软件系统是由一个个函数组成,程序首先调用主函数,主函数再依次调用其他函数,普通函数之间也可以依次调用,这样就完成了软件系统的功能。下图是结构化软件的结构示意图。

在这里插入图片描述

从上图中可以看出,结构化程序设计采用自上而下的设计方式,在这个过程中需要考虑每个模块应该分解成哪些子模块,每个子模块又可以分解成哪些更小的模块,依次下去….,直到模块细化成一个函数为止。

结构化编程的缺点:

  • 设计不够直观
  • 适应性差,可扩展性不强

2) 结构化程序的三种基本结构

程序设计的三种基本结构包括:

顺序结构:源代码排列顺序依次执行

选择结构:双选择结构,单选择结构,多选择结构

循环结构:当型循环,直到型循环

  • 虽然这三种程序设计的基本结构属于结构化函数设计思想,但是在Java类的方法中同样由这三种程序结构组成。即虽然java是面向对象的,但Java的方法里则是一种结构化的程序流。

2.面向对象程序设计

1)面向对象程序设计简介

面向对象的程序的最小单元是类,这些类可以生成系统中的多个对象,这些对象可以映像成客观世界的各种实物,它们的组合就可以构成软件系统。下图是面向对象设计的结构示意图。

在这里插入图片描述

可以看出面向对象的软件系统是由对个类组成,每个类记录一些内部的状态数据。这些类的组合就构成一个软件系统。

  • 类定义 = 成员变量(状态数据)+方法(行为)

2)面向对象的基本特征

面向对象方法具有三个基本特征:

封装:是指将类中的一些实现细节隐藏起来,可以通过一些公用方法来暴露这些隐藏功能。

继承:是一种类复用的手段,当子类继承父类后,可直接获得父类的属性和方法。

多态:指的是子类对象可以直接赋给父类变量,运行时依旧保留子类的行为特征,同一个类型的对象在执行同一个方法时,可能表现出多种行为特征!!

面向对象编程的优点:

  • 面向对象比面向过程的编程粒度要大;面向对象的程序单位是类;而面向过程的程序单位是函数(相当于方法),因此面向对象比面向过程更简单、易用。

UML(统一建模语言)介绍

UML是一种面向对象分析方法的业内规范,下面主要介绍最常用的7种:例图、类图、组件图、部署图、顺序图、活动图和状态机图。

1)用例图

目的:帮助开发团队以一种可视化的方式理解系统的需求功能,但对系统的实现不做说明,仅是系统功能的描述。

符号说明:

用例(以 个椭圆表示 用例的名称放在椭圆的中 或椭圆下面);

角色 (Actor是与系统交互的其他实体 个人形符号表示);

角色和用例之间的关系(以简单的线段来表示) ;

在这里插入图片描述

上图是一个简单的BBS系统的部分用例示意图。可以看出该系统所提供的功能。这个系统允许注册用户登录、发帖、和恢复,其中发帖和回复需要依赖登录;允许管理员删贴,删帖也需要依赖登录。

2)类图(使用最广泛的UML图)

目的:类图表示系统中应该包含哪些实体,各实体之间如何关联。

一个类图:

在这里插入图片描述

(在类图上使用包含三个部分的矩形来描述,最上面的部分显示类的名称,中间部分包含类的属性,最下面的部分包含类的方法)

类图之间的关系有:关联(包括聚合、组合)、泛化(与继承同一个概念)、依赖

a.关联

目的:描述类之间的关系,常包含聚合和组合

  • 聚合:例如,学生既可以是篮球俱乐部的成员,也可以是书法俱乐部的成员。

  • 组合:例如,下图中2个Arm实体组合成一个Student实体。

符号说明:

聚合使用带空心菱形框的实线表示;

组合则使用带实心菱形框的实线表示;

1 : N 的关联关系( 1…* 表示可以是一个到多个);

在这里插入图片描述

上图描述Teacher和Student之间的关联关系:它们是双向关联关系,而且使用了多重性来表示Teacher和Student之间存在1:N的关联关系(1…*表示可以是一个到多个),即 一个Teacher 实体可以有1个或多个关联的 Student 实体;Student BasketBallClub 存在聚合关系,即 1个或多个 Student 实体可以聚合成一个BasketBallClub实体;而 Arm (手臂)和 Student 之间存在组合关系,2个Arm实体组合成一个Student实体。

b.泛化

泛化和继承是同一个概念,都是指子类是一种特殊的父类。

符号说明:

继承关系使用带空心的三角形的实线表示;

在这里插入图片描述

上图显示了Student和Person之间的继承关系。

c.依赖

如果一个类的改动会导致另一个类的改动,则称两个类之间存在依赖。

符号说明:

依赖关系使用带箭头的虚线表示;(箭头指向被依赖的实体)

在这里插入图片描述

上图中 JTable和DefaultTableModel 两个类,当DefaultTableModel类发生改变时,JTable也会相应的做出改变。

3)组合图

目的:提供系统的物理视图,它的用途是显示系统中的软件对其他软件的组件(例如,库函数)的依赖关系。

符号说明:

组件:带🚪符号的矩形来表示组件;

接口:圆圈代表接口;

Port:位于组件边界上的小矩形代表Port;

接口提供的服务:一条带半圆的实现来表示;

在这里插入图片描述

上图可以看出,系统绘制电子购物平台的几个核心组件,其中 Order 组件提供 OrderQuery接口,该接口允许 Dispatch 组件查询系统中的订单及其状态, Order 件又需要依赖于 Customer 组件的CustomerLookup 接口,通过该接口查询系统中的顾客信息; Order 组件也需要依赖于Inventory 组件的ProductQuery 接口,通过该接口查询系统中的 品信息。

4)部署图

目的:显示软件系统不同的组件将在何处物理运行,以及它们将如何彼此通信。

符号说明:

节点:UML 中使用 维立方体来表示节点;

在这里插入图片描述

上图可以看出,整个应用分为5个组件: Student、dministrator 、应用持久层、 Student 数据库和 UI 界面组件,部署图准确 表现了各组件之间的依赖关系。除此之外,部署图的重点在物理节点上。上图反映该应用需要部署在 4个物理节点上,其中普通客户端无须部署任何组件,直接使用客户端浏览器即可;管理者客户机上需要部署 UI 界面;应用服务器上需要部署 Student、Administrator和应用持久层 个组件;而数据库服务器上需要部署Student 数据库。

5)顺序图

目的:顺序图描述了对象之间的交互,重点在于描述消息及其时间顺序。

符号说明:

示例(对象):顶部的框表示,框中的类实例名称和类名称之间用冒号或空格符分隔;

消息发送:实例之间的消息发送,带箭头的连线;

消息返回:带箭头的虚线;

在这里插入图片描述

上图显示的是用户登录顺序图。

6)活动图

目的:活动图主要用于描述过程原理、业务逻辑以及工作流技术。

符号说明:

活动:圆角矩形;

事件:带箭头的实线;

在这里插入图片描述

从上图可以看出,如果活动图的两个分支分开,每支就是一个传统的流程图,每个活动依次向下,遇到条件分支使用菱形框来表示条件。与传统的流程图不同的是,活动图可以使用并行分支分出多条并行活动。

7)状态机图

目的:表示某个对象所处的不同状态和该类的状态转换信息。

符号说明:

初始状态:实心圆表示;

初始状态之间的转换:带箭头的线段;

状态:圆角矩形;

判断点:空心圆;

在这里插入图片描述

上图描绘了 Hibemate 实体具有的三个状态:瞬态、持久化和脱管。当程序通过 new 直接创建一个对象时,该对象处于瞬态;对 个瞬态的对象执行 save()、 saveOrUpdate()方法后该对象将会变成持久化状态;对一个持久化状态的实体执行 delete()方法后该对象将变成瞬态;持久化状态和脱管状态也可相互装换。
总结:

  • UML(统一建模语言)首先,实现对目标系统进行分析,建立分析模型,并将之文档化;其次,用面向对象的思想对上面的结果进行细化,得出设计模型。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!