UML建模与架构文档化

2021/6/11 10:33:24

本文主要是介绍UML建模与架构文档化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 一、UML建模与架构文档化
    • 1、UML应用与未来
    • 2、UML基础
      • a.用例和用例图
      • b.交互图
      • c.类图与对象图
    • 3、基 于 UML 的软件开发过程
    • 4、系统架构文档化
  • 二、设计模式类之间的关系及原则
    • 一、类之间的关系(我拿Visio作图举例)
      • 1.继承关系
      • 2、实现关系
      • 3、依赖关系
      • 4、关联关系
      • 5、聚合关系
      • 6、组合关系
    • 二、设计模式的原则(简单列出)
    • 三、设计模式
      • 1.创建型模式
      • 2、结构型模式
      • 3、行为型模式
  • 下面简单做一个UML模型和C++类实例来实现一下

一、UML建模与架构文档化

1、UML应用与未来

从UML的早期版本开始, 便受到了计算机产业界的重视, OMG 的采纳和大公司的支持把 它推上了实际上的工业标准的地位, 使它拥有越来越多的用户。 它被广泛地用于应用领域和多 种类型的系统建模, ,如管理信息系统、 通信与控制系统、 嵌入式实时系统、分布式系统和系 统软件等。 近几年还被运用于软件再工程、 质量管理、 过程管理和配置管理等方面。 而且它 的应用不仅仅限于计算机软件, 还可用于非软件系统, 例如硬件设计、 业务处理流程、 企业 或事业单位的结构与行为建模。

2、UML基础

a.用例和用例图

用例(usecase) 图内也翻译为用况、 用案等, 在 UML 中, 用例用一个椭圆表示,用例名往往用动 宾结构或主谓结构命名。

b.交互图

交互图 (interaction diagram) 是用来描述对象之间以及对象与参与者(actor) 之间的动态协作关系 以及协作过程中行为次序的图形文档。 它通常用来描述一个用例的行为,显示该用例中所涉及的对象和这 些对象之间的消息传递。交互图包括顺序图(sequence diagram) 和 协作图(collaboration diagram) 两种形式。 顺序图着重描述对象按照时间顺序的消息交换, 协作图着重描述系统成分如何协同工作。 顺 序图和协作图从不同的角度表达了系统中的交互和系统的行为, 它们之间可以相互转化。 一个用例需要多 个顺序图或协作图, 除非特别简单的用例。

c.类图与对象图

类是具有相似结构、 行为和关系的一组对象的抽象。 在定义类的时候, 类的命名应尽量用应用领域中的术语, 应明确、 无歧义, 以利于开发人员与用户之间的相互理 解和交流。 一般而言, 类的名字是合关系。 d.状态图和活动图

3、基 于 UML 的软件开发过程

UML是独立于软件开发过程的, 即 UML 能够在几乎任何一种软件开发过程中使用。迭代的渐进式软 件开发过程包含 4 个阶段, 即初启、 细化、 构建和部署。

4、系统架构文档化

软件架构用来处理软件高层次结构的设计和实施。 它以精心选择的形式将若干结构元素进行装配, 从 而满足系统主要功能和性能需求, 并满足其他非功能性需求, 如可靠性、 可伸缩性、 可移植性和可魚性。 Peny 和 Wolfe 使用一个精确的公式来表达, 该公式由 Boehm 做了进一步修改。 软件架构={元素, 形式, 关系/约束} 软件架构涉及到抽象、 分解和组合、 风格和美学。 我们用由多个视图或视角组成的模型来描述它。

二、设计模式类之间的关系及原则

一、类之间的关系(我拿Visio作图举例)

1.继承关系

是一个类(子接口,或子类)继承另-一个类(父接口,或父类)的功能,并可以增加它自己的新功能的能力。通过UML类图设计,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。
在这里插入图片描述

2、实现关系

实现指的是一个class类实现interface接口 (可以是多个)的功能,实现是类与接口之间最常见的关系。在C++中并没有接口的关键字,这种关系一般是通过声明纯虚函数来实现。
通过UML类图设计,实现是用一条带空心三角箭头的虚线表示,从类指向实现的接口。
在这里插入图片描述

3、依赖关系

就是一个类A使用到另一个类B, 而这种使用关系是具有偶然性、临时性、非常弱的,但是B类的变化会影响到类A。
在UML图类设计中,依赖关系用由类A指向类B的带前头虚线表示。
在这里插入图片描述

4、关联关系

体现的是两个类之间语义级别的一种强依赖关系,一般是长期性, 而且双方的关系是平等。关系可以是单向,双向的。
使用UML类图设计,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注双方的角色和多重性标记。
在这里插入图片描述
上方可标注

5、聚合关系

是关联关系的一一种特例,它体现的是整体与部分的关系,即Has A关系。此时整体与部分之间是可分离的,它们
可以具有各大自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。
在UML类图设计中,聚合关系以空心菱形加实线箭头表示。
在这里插入图片描述

6、组合关系

也是关联关系的一种特例,它体现的是一种contains- -a的关系,这种关系比聚合关系更强,也成为强聚合。
在UML.类图中,组合关系以实心萎形加实线箭头表示。
在这里插入图片描述

二、设计模式的原则(简单列出)

  1. 单一职責原则
  2. 开放-封闭原则
  3. 依赖倒转原则
  4. 里氏代换原则
  5. 接口隔离原则
  6. 迪米特法则

三、设计模式

1.创建型模式

类模式(工厂方法模式)
对象模式(抽象工厂模式、建造者模式、原型模式、单例模式)

2、结构型模式

类模型(类,适配器模式)
对象模式(适配器模式、桥接模式、组合模式,外观模式、装饰模式,享元模式、代理模式)

3、行为型模式

类模式(解释器模式、模板方法械)
对象模式(命令模式、职责链模式、迭代器模式、状态模式、中介模式、观察者模式。策略模式、访问者
模式、备忘录模式。
例如:简单工厂模式
主要用于创建对象,新添加类时,不会影响以前的系统代码。核心思想是用一具工厂来根据输入的条件产
生不同的类,然后根据不同类的virtual函数得到不同的结果。
优点:适用于不同情况创建不同的类时。
缺点:客户端必须要知道基类和工厂类,耦合性井。需要根据不同需求创建不同的类,添加类的时候需要
爱护工厂类。

小学生的四则运算法则为例,对应UML.类如下:

下面简单做一个UML模型和C++类实例来实现一下

在这里插入图片描述
代码实现:
头文件:

// 设计操作基类
template <typename T>
class COperator
{
public:
	virtual T getResult() = 0;
	virtual void setArgs(T lpa, T rpa);
	
protected:
	T lah, rah;
};

template <typename T>
void COperator<T>::setArgs(T lpa,T rpa)
{
	lah = lpa;
	rah = rpa;
}


// 加法模板类
template<typename T>
class CAddOperator :public COperator<T>
{
public:
	virtual T getResult()
	{
		return COperator<T>::lah + COperator<T>::rah;
	}
};

// 减法模板类
template<typename T>
class CSubOperator :public COperator<T>
{
public:
	virtual T getResult()
	{
		return COperator<T>::lah - COperator<T>::rah;
	}
};

// 乘法模板类
template<typename T>
class CMulOperator :public COperator<T>
{
public:
	virtual T getResult()
	{		
		return COperator<T>::lah * COperator<T>::rah;
	}
};

// 除法模板类
template<typename T>
class CDivOperator :public COperator<T>
{
public:
	virtual T getResult()
	{
		if (0 == COperator<T>::rah)
		{
			std::cout << "除数不能为0" << std::endl;
			return 0;
		}
		return COperator<T>::lah / COperator<T>::rah;
	}
};

// 工厂类
template<typename T>
class CCalculatorFactory
{
public:
	static COperator<T>*createOjbect(char c);
};


template<typename T>
COperator<T> *CCalculatorFactory<T>::createOjbect(char c)
{
	COperator<T> *oper;
	switch (c)
	{
	case '+':
		oper = new CAddOperator<T>();
		break;
	case '-':
		oper = new CSubOperator<T>();
		break;
	case '*':
		oper = new CAddOperator<T>();
		break;
	case '/':
		oper = new CAddOperator<T>();
		break;

	default:
		oper = new CAddOperator<T>();
		break;
	}

	return oper;
}

源文件:

#include <iostream>
#include "SFMHeader.h"
using namespace std;

int main()
{
	// 创建对象
	COperator<double> *p = CCalculatorFactory<double>::createOjbect('+');
	p->setArgs(23884.89989, 4324.234234);
	cout <<"两数相加结果为:"<<p->getResult() << endl;

	delete p;

	return 0;
}


这篇关于UML建模与架构文档化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程