uml结构建模_uml面向对象分析建模与设计

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170900.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Apache Struts2打开重定向/命令执行 CVE-2013-2251「建议收藏」

    Apache Struts2打开重定向/命令执行 CVE-2013-2251「建议收藏」昨日,著名JavaWeb框架Struts官方再发高危安全漏洞补丁升级(最新版本为:2.3.15.1),升级修补了多个安全漏洞,其中包括一个远程任意代码的高危安全漏洞,这些漏洞可以影响到Struts2.0.0-Struts2.3.15的所有版本。攻击者可以利用该漏洞,执行恶意Java代码,最终导致网站数据被窃取、网页被篡改等严重后果。基于Struts2使用广泛,目前很多网站还没有升级,另外

  • phpstorm 激活码2021【最新永久激活】

    (phpstorm 激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSW…

  • JMS activeMQ

    JMS activeMQ

  • Java程序员,你一定需要了解的六款大数据采集平台

    Java程序员,你一定需要了解的六款大数据采集平台随着大数据越来越被重视,数据采集的挑战变的尤为突出。今天为大家介绍几款数据采集平台: ApacheFlume Fluentd Logstash Chukwa Scribe SplunkForwarder 大数据平台与数据采集任何完整的大数据平台,一般包括以下的几个过程: 数据采集 数据存储 数据处理 …

  • 列车调度 堆栈 python

    列车调度 堆栈 python列车调度描述题目分解1.全排列2.判断合法输出序列3.S容量小于A的情况,输出合法出栈序列4.输出操作5.输出操作完整可运行代码描述描述某列车调度站的铁道联接结构如Figure1所示其中,A为入口,B为出口,S为中转盲端。所有铁道均为单轨单向式:列车行驶的方向只能是从A到S,再从S到B;另外,不允许超车。因为车厢可在S中驻留,所以它们从B端驶出的次序,可能与从A端驶入的次序不同。不过S…

  • c语言里的pow函数「建议收藏」

    头文件:#include&lt;math.h&gt;pow()函数用来求x的y次幂(次方),x、y及函数值都是double型,其原型为:  doublepow(doublex,doubley);pow()用来计算以x为底的y次方值,然后将结果返回。设返回值为ret,则 ret=xy。可能导致错误的情况:如果底数x为负数并且指数y不是整数,将会导致do…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号