编辑
2024-08-19
👨‍🎓 无限进步
00
请注意,本文编写于 304 天前,最后修改于 225 天前,其中某些信息可能已经过时。

目录

概览
1. 面向过程还是面向对象
1.1 面向过程方法
1.2 面向过程的困难
1.3 面向对象方法
1.4 面向对象的困难
2. uml带来了什么?
2.1 什么是UML
2.2 统一语言
2.3 可视化
2.4 从现实世界到业务模型
2.5 从业务模型到概念模型
2.6 从概念模型到设计模型
2.7 面向对象的困难解决了吗?
3. 统一过程简介
3.1 RUP是什么?
3.2 RUP与UML
3.3 RUP与软件工程
3.4 RUP与最佳实践
3.5 RUP与本书

概览

image.png

1. 面向过程还是面向对象

世界的本质是由对象组成的,平时看上去相互无关的独立对象在不同的驱动力和规则下体现出不同的运动过程,然后这些过程便展现了我们找个生动的世界。

在面向过程眼中,世界一切都不是孤立的,他们相互紧密联系在一起,缺一不可,互相影响,互相作用,并形成一个具有严格因果律的小系统;而更多的小系统组成了更大的系统,所有小系统之间的关联也是紧密和不可分割的。

1.1 面向过程方法

面向过程的分析方法是找到过程的起点,然后顺藤摸瓜,分析每一个部分,直至达到过程的终点。如图

DFD图:表达了“(从上一步)输入数据——>(在这一步)功能计算——>(向下一步)输出数据”

image.png

由此发现,数据很重要。为了更好地管理数据,人们通过定义主键、外键等手段将数据之间的关系描绘出来,结构化地组织他们,利用关系理论,即数据库的三大范式来保证他们的完备性和一致性。

对关系型数据库起到了重要的促进作用,分析方法ER模型由此而生。

但随着需求复杂、系统越来越大、功能点越来越多,经常出现一份数据被多个过程分享,经常出现矛盾的数据需求。为了解决这个问题,IBM在20世纪70年代提出了UC矩阵,来求解功能和数据之间的依赖问题。

UC矩阵:将功能点和数据分别作为横纵坐标来组成一个二维矩阵,,在横纵坐标的每个交叉点上标记功能点对数据的需求,即U(use)和C(Create)。

标记完成后,对功能点位置和数据位置在各自坐标系上进行调整,调整的目标是尽量将C放在整个矩阵的对角线上,这时,各个功能点对数据的交叉依赖是最小的。

image.png 最后,再把相邻的一些功能点分组,由此来获得数据交叉依赖性最小,功能最紧密的子系统。

例如,在煤炭企业管理信息系统的子系统划分案例中,通过建立U/C矩阵、进行正确性检验、求解及子系统划分,最终将系统划分为经营决策、煤炭生产、运销、财务和人事等子系统,每个子系统具有高内聚和低耦合的特点,减少了子系统之间的信息依赖,提高了管理效率和经济效益。

UC矩阵尽管是一个有用的方法,但面向过程的困难并没有从根本上解决:

  • 将世界视为过程的前提是:这个过程是稳定的,所有的工作成果依赖于对这个过程的步步分析
  • 并且还导致:面向过程的每一步都是预设好的,有着严谨的因果关系。

如今,SOA已经提上日程,IBM也提出了著名的口号:On-Demand Business(随需应变的商务)

1.2 面向过程的困难

因为构成一个系统的因素太多,要把所有可能的因素都考虑到,把所有因素的因果关系都分析清楚,再把这个过程模拟出来实在是太困难了。

我们的精力有限,计算能力有限,只能放弃对整个过程的了解,重新寻找一个方法,能够将复杂的系统转换为一个我们可以控制的小单元。

1.3 面向对象方法

面向对象(Object Oriented,简称OO)方法将世界看做一个个相互独立的对象,相互之间并无因果关系。只有在某个外部力量的驱动下,对象之间才会根据某种规律相处传递信息。

这些交互构成了这个生动世界的一个“过程”。在没有外力的情况下,对象则保持着静止的状态。

面向对象是多个独立的对象通过某种外力驱动的,这些独立的独享有着一些奇怪的特性:

  • 封装: 对象有着坚硬的外壳,从外部来看,除了与外界交互的消息通道外,对象内部就是一个黑匣子,什么也看不到。
  • 聚合:对象可以结合在一起形成新的对象,结合后的对象具有前两者特性的总和
  • 继承:对象可以繁育,产下的孩子将拥有父辈全部的本领
  • 接口:每个对象有多个外貌,在不同情况下可以展现不同的外貌,但本质只有一个。
  • 多态:多个对象可能长着相同的脸,但同样的脸背后却是不同的对象,有着不同的行为

对象与它有着联系的身边的一小群伙伴,有这几种关系:

  • 依赖:对象只知道与它有着联系的一群小伙伴
  • 耦合:与小伙伴保持着信息交流的关系
  • 类属性:即便在伙伴之间,每个对象也保护着自己的领地
  • 方法:对象只允许其他人通过它打开的小小窗口,进行交流。

其他概念:

  • 抽象:对象寻找相似性质并组成部落的过程,称为抽象
  • 类:组成的部落
  • 实例化:部落里每个成员既有共同的性质也有自己的个性,只有把个性赋给部落成员才能区分它们并使它们活动起来
  • 复用:对象可以用于其他地方

1.4 面向对象的困难

  • 对象是怎么被抽象出来的?为什么要这么抽象而不是那么抽象?
  • 什么样的组合是最好的?什么组合是最坏的?
  • 如果只给我一个对象组合,我怎么才能理解它表达了怎么样的含义呢?

image.png

想要解决困难,需要:

  • 一种把现实世界映射到对象世界的方法
  • 一种从对象世界描述现实世界的方法
  • 一种验证对象世界行为是否正确反映了现实世界的方法

UML就是来解决这些困难的

你今天OO了吗?

image.png

2. uml带来了什么?

2.1 什么是UML

UML是一种建模语言,UML定义了一些建立模型所需要的、表达某种特定含义的基本元素,这些元素称为:元模型,例如用例、类等。

还定义了元模型互相之间关系的规则,以及如何用这些元素和规则绘制图形以建立模型来映射现实世界,这些规则和图形称为表示法和视图(view)

2.2 统一语言

统一语言的意义:

  • 试图用统一的语言来覆盖整个软件过程,让不同的团队操着同一个口音顺畅地沟通
  • 要让人和机器都能懂

2.3 可视化

解决可读性的问题

2.4 从现实世界到业务模型

建立模型:

  • 知道如何抽象现实世界。本质是人、事、物和规则组成,人为核心。uml称之为参与者,参与者是模型信息来源的提供者,也是第一驱动者。
  • uml称之为:用例。用来表示驱动者的业务目标,也就是参与者想要做什么并且获得什么。而这件事怎么做的,依据什么规则,通过称之为业务场景和用例场景的UML视图来描绘的。

image.png

2.5 从业务模型到概念模型

通过称之为概念化的过程 来建立适合计算机理解和实现的模型,这个模型称为:分析模型。

分析模型介于原始需求和计算机实现之间,是一种过渡模型。

绘制分析模型最主要的元模型:

  1. 边界类

image.png

狭义上说:边界就是界面,所有对计算机的操作都要通过计界面进行

广义上说:任何实物都分为里面和外面,他们之间的交互都需要一个边界。只有两个不同职责的簇之间的交互都需要一个边界,换句话说,边界决定了外面能对里面做什么事儿? 2. 实体类

image.png

原始需求中领域模型中的业务实体映射了现实世界中参与者完成业务目标时所涉及的事物。

这些实体类可以看做是业务实体的实例化结果 3. 控制类

image.png

采用控制类表述原始需求中的动态信息,即业务或用例场景中的步骤和活动。

image.png

2.6 从概念模型到设计模型

设计模型的工作就是建造零件,组装汽车的过程。

实现类可以简单地从分析类映射而来

  • 概念模型的边界类可以转换为操作界面或者系统接口
  • 控制类可以被转换为计算程序或控制程序,例如工作流、算法体等
  • 实体类可以转换为数据表、XML文档或者其他带有持久化特征的类。

一般来说,可以遵循的规则有:

  • 软件架构和框架:规定了实现类必须实现的接口、必须继承的超类、必须遵守的编程规则等。例如采用J2ee架构时,Home和Remote接口就是必需的
  • 编程语言:各类编程语言有不同的特点
  • 规范或中间件: 需要遵循规范或中间件规定的那必须特性

image.png

2.7 面向对象的困难解决了吗?

image.png

UML作为标准的面向对象建模语言,它需要再某个建模方法的知道下进行建模工作。

统一过程是这其中最为著名的额建模方法

3. 统一过程简介

3.1 RUP是什么?

RUP(Rational Unified Process)译为统一过程。

是一个采用了面向对象思想,使用UML作为软件分析设计语言,并且结合了项目管理、质量保证等许多软件工程知识综合而成的一个非常完整和庞大的软件方法。

  • 定义了软件开发过程中最重要的阶段和工作(四个阶段和九个核心工作流)
  • 定义了参与软件开发过程的各种角色和他们的职责
  • 定义了软件生产过程中产生的工件,并提供了模板
  • 最后采用了演进式软件生命周期(迭代)将工作、角色和工件串在一起,形成了统一过程。

image.png

image.png

3.2 RUP与UML

统一过程和UML是不同的两个领域:

  • UML是一种语言,用来描述生产过程中要产生的文档
  • 统一过程则是指导如何产生这些文档以及这些文档要讲述什么的方法。

3.3 RUP与软件工程

3.4 RUP与最佳实践

image.png

3.5 RUP与本书

本文作者:Eric

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!