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)


相关推荐

  • SC命令(windows服务开启/禁用)

    SC命令(windows服务开启/禁用)

  • intellijidea激活码【最新永久激活】

    (intellijidea激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • IntelliJ IDEA全局内容搜索和替换

    IntelliJ IDEA全局内容搜索和替换在做项目时,有时会在整个项目里或指定文件夹下进行全局搜索和替换,这是一个很方便功能。使用方法如下:一、全局搜索1、使用快捷键Ctrl+Shift+F打开搜索窗口,或者通过点击Edit–>Find–>Findinpath打开搜索窗口,如下图:2、搜索界面如下,主要分为上中下三部分,上部主要为搜索条件(要搜索的内容、范围、方式等),中间部分为包含搜索内容的文件列表,点击单个文件可以在下面部分

  • 图形数字推理1000题及答案_图形形式数字推理题库

    图形数字推理1000题及答案_图形形式数字推理题库动脑往期回看>>每日推理每日推理|你能找出犯人吗?每日推理|你是哪个班的?每日推理|拿掉2根木棍,使其变成3个正方形每日推理|共同营业日每日推理|千里寻一每日推理|坏掉的8号电话亭每日推理|哪两个才是兄弟?每日推理|白马王子每日推理|神奇海螺脑筋急转弯答案笑死人的脑筋急转弯看了想打人的题目移动火柴游戏复杂的迷宫图形推理5道很难的字谜△点击…

  • C语言基础知识梳理总结[通俗易懂]

    C语言基础知识梳理总结[通俗易懂]C语言是当代人学习及生活中的必备基础知识,应用十分广泛,下面为大家带来C语言基础知识梳理总结,C语言零基础入门绝对不是天方夜谭!

  • SystemUI.apk等特殊APK文件的反编译和编译技巧[通俗易懂]

    SystemUI.apk等特殊APK文件的反编译和编译技巧[通俗易懂]SystemUI.apk等特殊APK文件的反编译和编译技巧   第一:要在你的PC上建立Java的环境,才能执行编译工作。具体方法我这个就不说了,你百度或者Google下就知道了,很简单的。   第二:下载必要的工具。Apktool工具。   下载后解压(有三个文件aapt.exe,apktool.bat,apktool.jar),为了方便。将解压出

发表回复

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

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