开发者社区> 流楚丶格念> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

UML建模与架构文档化

简介: UML建模与架构文档化
+关注继续查看

一、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类图设计,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。


image


2、实现关系


实现指的是一个class类实现interface接口 (可以是多个)的功能,实现是类与接口之间最常见的关系。在C++中并没有接口的关键字,这种关系一般是通过声明纯虚函数来实现。


通过UML类图设计,实现是用一条带空心三角箭头的虚线表示,从类指向实现的接口。


image


3、依赖关系


就是一个类A使用到另一个类B, 而这种使用关系是具有偶然性、临时性、非常弱的,但是B类的变化会影响到类A。


在UML图类设计中,依赖关系用由类A指向类B的带前头虚线表示。


image


4、关联关系


体现的是两个类之间语义级别的一种强依赖关系,一般是长期性, 而且双方的关系是平等。关系可以是单向,双向的。


使用UML类图设计,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注双方的角色和多重性标记。


image


上方可标注


5、聚合关系


是关联关系的一一种特例,它体现的是整体与部分的关系,即Has A关系。此时整体与部分之间是可分离的,它们可以具有各大自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。


在UML类图设计中,聚合关系以空心菱形加实线箭头表示。


image


6、组合关系


也是关联关系的一种特例,它体现的是一种contains- -a的关系,这种关系比聚合关系更强,也成为强聚合。


在UML.类图中,组合关系以实心萎形加实线箭头表示。


image


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


单一职責原则


开放-封闭原则


依赖倒转原则


里氏代换原则


接口隔离原则


迪米特法则


三、设计模式


1.创建型模式


类模式(工厂方法模式)


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


2、结构型模式


类模型(类,适配器模式)


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


3、行为型模式


类模式(解释器模式、模板方法械)


对象模式(命令模式、职责链模式、迭代器模式、状态模式、中介模式、观察者模式。策略模式、访问者模式、备忘录模式。


例如:简单工厂模式


主要用于创建对象,新添加类时,不会影响以前的系统代码。核心思想是用一具工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。


优点:适用于不同情况创建不同的类时。


缺点:客户端必须要知道基类和工厂类,耦合性井。需要根据不同需求创建不同的类,添加类的时候需要爱护工厂类。


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


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


image


代码实现:


头文件:


// 设计操作基类
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;
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
yaml文档读取
yml文件操作
2169 0
前端入门教程(三)HTML标签与文档结构
一 HTML标签 HTML作为一门标记语言,是通过各种各样的标签来标记网页内容的。我们学习HTML主要就是学习的HTML标签。 那什么是标签呢? #1、在HTML中规定标签使用英文的的尖括号即``包起来,如``、``、``都是标签, #2. HTML中标签通常情况下是成对出现的,分为开始标签和结束标签,结束标签比开始标签多了一个`/`,开始标签和结束标签之间的就是标签的内容。
1143 0
06Vue.js快速入门-Vue组件化开发
组件其实就是一个拥有样式、动画、js逻辑、HTML结构的综合块。前端组件化确实让大的前端团队更高效的开发前端项目。而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色。尤其是她单文件组件开发的方式更是非常方便,而且第三方工具支持也非常丰富,社区也非常活跃,第三方组件也呈井喷之势。
1406 0
操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)
原文:操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP) 不管是用 PHP 还是 C#, 在操作 XML 的时候我们除了一个节点一个节点去取值之外, 还有一个非常方便的表达式, 就是 XPATH    而昨晚在使用 XPATH 的时候, 遇到一个问题, 改了一个晚上才搞定, 差点没吐血.
880 0
UML面向对象分析与建模-【3】用例图
一、用例图的描述 用例(Use Case)是指系统的外部事物(活动者、设备或外部系统)与系统交互,它表达了系统的功能,即系统所提供的服务。 用例图是一种描述用例的可视化工具,用简单的图形元素表示出系统的活动者、用例及它们之间的关系,准确地表达了活动者与系统的交互情况和系统所能提供的服务。
1059 0
+关注
流楚丶格念
csdn平台优质创作者,51cto TOP博主,360图书馆科技博主,燕山大学目前大三在读,日拱一卒,功不唐捐,加油!!!
1010
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载