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



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、行为型模式


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


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


例如:简单工厂模式


主要用于创建对象,新添加类时,不会影响以前的系统代码。核心思想是用一具工厂来根据输入的条件产生不同的类,然后根据不同类的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;
}
相关文章
|
30天前
|
机器学习/深度学习 人工智能 测试技术
【软件设计师备考 专题 】软件工程的未来:面向构件和统一建模语言(UML)
【软件设计师备考 专题 】软件工程的未来:面向构件和统一建模语言(UML)
71 0
|
1月前
|
SQL NoSQL 前端开发
基于BS架构的饰品购物平台设计与实现(程序+文档+数据库)
基于BS架构的饰品购物平台设计与实现(程序+文档+数据库)
|
6月前
|
缓存 运维 NoSQL
GitHub开源大厂缓存架构Redis优化的文档被警告,900页全是干货
掌握Redis对Java程序员来说很有必要了。实际上,很少有人真的掌握了Redis的全部技巧,有些甚至连面试题都很难应付。那么,如何全面系统地学习Redis呢?
|
6月前
|
设计模式 架构师 Java
阿里P8架构师都要学习研究的java加强版23种设计模式神级PDF文档
说在前面的话 Java作为老牌纯正的编程语言,在规范性上有着天然优势。因此本版的设计模式讲解全部用Java语言来描述,并针对Java语言的特性对讲解内容做了相当大的改动。 不知道大家是否听过编程界的一段话:掌握设计模式相当于华山派的"气宗",是程序员的内功修为,虽然在同样的学习时间下,类似Python这种"剑宗"的开发模式见效更快,但是长远来看,"气宗"才是走向软件架构师以上级别的必由之路。 所以,掌握气宗就掌握了编程命脉,然而学习设计模式有四大境界: 接下来给大家分享的就是java溢彩加强版大话设计模式包含的内容知识点。 总目录 主要内容 本文是百万销量的经典畅销书《
124 0
|
6月前
|
Cloud Native 架构师 Java
谷歌架构师分享gRPC与云原生应用开发Go和Java为例文档
随着微服务和云原生相关技术的发展,应用程序的架构模式已从传统的单体架构或分层架构转向了分布式的计算架构。尽管分布式架构本身有一定的开发成本和运维成本,但它所带来的收益是显而易见的。
|
3月前
|
测试技术 uml
UML面向对象建模题库
UML面向对象建模题库
40 0
|
7月前
|
开发框架 架构师 Java
Java程序员不掌握SpringBoot怎么进大厂,阿里架构师推荐实战文档
Spring Boot作为Java编程语言的一个全新开发框架,在国内外才刚刚兴起时,还未得到普及使用。相比于以往的一些开发框架,Spring Boot不但使用更加简单,而且功能更加丰富,性能更加稳定而健壮。使用Spring Boot开发框架,不仅能提高开发速度,增强生产效率,从某种意义上,可以说是解放了程序员的劳动,而且一种新技术的使用,更能增强系统的稳定性和扩展系统的性能指标。本书就是本着提高开发效率,增强.系统性能,促进新技术的普及使用这一目的而写的。
|
8月前
|
XML 架构师 Java
公司刚来的京东架构师:看完我写的spring笔记,甩给了我一份文档
Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层 SpringMVC 和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的 Java EE 企业应⽤开源框架。
|
8月前
|
Java 应用服务中间件 Redis
十年架构师总结:SSM+微服务+Nginx+Redis+MySQL的PDF文档
SSM 第1部分入门和技术基础 第1章认识SSM框架和Redis 第2章Java设计模式 第2部分互联网持久框架- -MyBatis 第3章认识MyBatis核心组件 第4章MyBatis配置 第5章映射器 第6章动态SQL 第7章MyBatis的解析和运行原理 第8章插件 第3部分Spring基础 第9章Spring IoC的概念 第10章装配Spring Bean 第11章面向切面编程 第12章Spring和数据库编程 第13章深入Spring数据库事务管理 第4部分Spring MVC框架 第14章Spring MVC的初始化和流程 第15章深入Spring MVC组件开发 ......
|
4月前
|
开发框架 架构师 Java
Java程序员不掌握SpringBoot怎么进大厂,阿里架构师推荐实战文档
Spring Boot作为Java编程语言的一个全新开发框架,在国内外才刚刚兴起时,还未得到普及使用。