软件建模与设计 —— 入门

序言

对于软件建模与设计,非科班出身的同学可能和我一样比较陌生,虽然日常开发中也涉及到建模,但是并没有系统的学习过软件建模设计。类似于设计模式,软件建模与设计也有一套三板斧。

设计模式

创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性。
在这里插入图片描述
结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。

在这里插入图片描述
行为模式负责对象间的高效沟通和职责委派。
在这里插入图片描述
详情见:常见设计模式

UML视图4+1

在这里插入图片描述

逻辑视图(Logical View)

逻辑视图主要关注的是业务逻辑,也就是软件系统的功能性。它描述了系统中的功能元素、功能服务、业务域对象,以及他们之间的交互。
逻辑视图主要通过以下几种UML图来表达:

  • 类图(Class Diagram):展示系统中的类、接口以及他们之间的静态关系,如继承、依赖、关联和聚合等。
  • 对象图(Object Diagram):是类图的实例,展示了系统中的对象以及他们之间的关系。
  • 包图(Package Diagram):展示系统的模块结构,描述类和包的依赖关系。
  • 组件图(Component Diagram):展示系统的组件以及它们之间的关系。
  • 部署图(Deployment Diagram):展示系统的物理架构和部署情况。

过程视图(Process View)

过程视图描述了系统的动态行为,包括系统的并发性和同步性,关注的是系统的运行时行为。
过程视图通常包含一系列的进程以及它们之间的交互。这些进程可能是并发执行的,也可能需要进行同步。过程视图展现了系统的动态行为,如进程的创建、销毁、调度,以及进程之间的同步和通信等。
通常使用以下几种UML图来表达:

  • 活动图(Activity Diagram):展示系统中各个活动的执行流程和它们之间的关系,通常用于表示并发和同步。
  • 顺序图(Sequence diagram):展示对象之间的交互顺序,可用于表示进程或线程之间的通信。
  • 状态图(Statechart Diagram):展示系统或系统中某个部分在其生命周期内可能处于的状态,以及由一个状态转换到另一个状态的事件或条件。
  • 协作图(Communication Diagram):展示对象间的交互关系,可以用于表示进程或线程之间的通信。

实现视图(Implementation View)

实现视图主要关注程序或系统的实际组织,提供了程序员需要的详细信息,用以理解,构建和测试系统的软件。

实现试图主要包括:

  • 源码管理:详细说明如何管理和组织源码。
  • 软件架构:描述了软件的组织架构,包括软件组件和它们之间的关系。
  • 数据库架构:描述了数据存储的方式,包括数据库模式和其他相关信息。
  • 测试:描述了如何测试软件,包括测试策略和测试计划。
  • 构建:描述如何构建和部署软件,包括构建工具和部署过程。

实现视图可以帮助开发人员理解和实现设计,并为后期的维护和迭代提供指导。

通常由以下几种UML来表达:

  • 包图(Package Diagram):用于展示系统的模块组织和依赖关系。
  • 组件图(Component Diagram):用于描述系统的物理组成部分,包- 括软件组件、硬件组件、接口和它们之间的关系。
  • 类图(Class Diagram):用于描述系统中的类及其相互之间的关系,包括继承、聚合和关联等。
  • 对象图(Object Diagram):用于描述系统中的对象及其相互之间的关系,这对于理解和验证系统的静态结构非常有用。

部署视图(Deployment View)

部署视图主要关注系统的物理部署及其在硬件上的分布。它描述了系统的硬件组成,网络拓扑,通信和数据传输等信息。部署视图主要包括:

  • 硬件架构:描述了系统所运行的硬件设备,包括服务器,工作站,网络设备等。
  • 网络架构:描述了网络的拓扑结构,以及各节点之间的通信方式。
  • 部署方案:描述了软件在硬件设备上的部署方式,包括分布式部署,集群部署等。
  • 安全性:描述了系统的安全策略,包括数据加密,防火墙设置,访问控制等。
  • 性能:描述了系统的性能需求,包括处理能力,存储能力,网络带宽等。

部署视图可以帮助系统管理员和运维人员理解系统的运行环境,进行有效的部署和管理。部署视图主要由UML中的部署视图来表达,它用于描述物理硬件的配置和软件组件在硬件上的部署情况。包括节点、设备、连接等元素。

用例视图(Use-Case View)

用例视图主要描述的是系统与外部交互的过程,也就是系统的功能需求。用例视图通常由一些列的用例或场景组成,每个用例或场景代表了一个特定的功能或业务流程。通过这种视图,可以清晰的展现出系统的主要功能和系统与用户或其他系统的交互过程。

用例视图通常是系统分析和设计的起点,它能够帮助我们理解用户的需求,定义系统的功能。主要使用UML中的用例图来表达,它展示了系统的参与者、用例(系统的功能)以及参与者与用例之间的交互关系。用例图是用来捕获系统需求、描绘用户与系统交互的工具。

UML的6种关系

泛化、实现、组合、聚合、关联、依赖。

UML的9种模型

用例图(Use-Case Diagram)

用于描述角色以及角色与用例之间的联系关系(如:泛化、关联和依赖)。是一种静态模型。

类图(Class Diagram)

用于描述系统中的类,以及各个类之间的关系(如:泛化、实现、依赖、关联、聚合、组合)。是一种静态模型。

对象图(Object Diagram)

与类图极为相似,它是类图的实例,对象图显示类的多个对象实例,而不是实际的类。它描述的不是类之间的关系,而是对象之间的关系。是一种静态模型。

状态图(State Diagram)

用于描述类的对象所有可能的状态,以及事件发生时状态的转移条件,是对类图行为上的补充。是一种动态模型。

活动图(Activity Diagram)

用于描述用例要求所要进行的活动,以及活动间的约束关系,有利于识别并行活动。是一种动态模型。

顺序图(Sequence Diagram)

也叫序列图或时序图,用于描述参与者与系统对象之间有序的交互过程,强调消息是如何在对象之间有序的交互过程,强调消息是如何在对象之间被发送和接收的。是一种动态模型。

合作图(Communication Diagram)

和顺序图相似,用于描述对象间的动态合作关系。可以看成是类图和顺序图的交集,重点描述对象之间的相互通信关系。如果强调时间和顺序。则使用序列图;如果强调上下级关系,则是选择合作图。是一种动态模型。

组件图(Component Diagram)

用于描述代码构建的物理结构以及各种构建之间的依赖关系。是一种静态模型。

部署图(Deployment Diagram)

用于描述系统的物理部署,例如计算机和设备,以及它们之间是如何连接的。是一种静态模型。

COMET

Comllaborative Object Modeling and Design Method,协作的对象建模与设计方法是一种基于UML(Unified Modeling Language,统一建模语言)的面相对象的软件开发方法。

  • 在需求模型中:系统的功能性需求被定义为参加者和用例。

  • 在分析模型中:用例被具化为参与用例的对象及其交互关系。

  • 在设计模型中:设计软件体系结构,考虑分布、并发和信息隐藏等问题。

  • 用例建模:系统的功能性需求按照用例和参与者进行定义。

  • 静态建模:提供系统的结构化视图,定义类的属性和类之间的关系。

  • 动态建模:提供系统的行为视图,用例是通过对象之间的交互实现。

参考链接

1、refactoringguru.cn
2、uml-diagrams.org
3、【Columboom】《软件建模与设计》学习笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/533867.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于GAN的多变量时间序列污染训练集异常检测

论文地址:https://ieeexplore.ieee.org/document/9618824 论文源码:https://github.com/sxxmason/FGANomaly 期刊:IEEE Transactions on Knowledge and Data Engineering 多元时间序列异常检测在结构健康监测、智能运维、量化交易等诸多实际…

【C++】模版

目录 一、泛型编程二、函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三、类模板3.1 类模板的定义格式3.2 类模板的实例化 四、非类型模板参数五、模板的特化5.1 概念5.2 函数模板特化5.3 类模板特化5.3.1 全特化5.3…

google map POI获取

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除 作者:zhu6201976 一、需求背景 因业务发展,需获取全美(或任意国家)所有POI(标记点)信息,包括mark_id、mark_name、address、numb…

JavaThread线程

目录 程序--进程--线程 程序: 进程: 线程: 进程和线程的关系 创建线程 单线程模式 代码 图解 运行 代码 运行 创建线程 方式一 代码 运行 方式二 代码 运行 总结: Thread类中常用的方法 1、 代码 运行…

python统计分析——一般线性回归模型

参考资料:python统计分析【托马斯】 当我想用一个或多个其他的变量预测一个变量的时候,我们可以用线性回归的方法。 例如,当我们寻找给定数据集的最佳拟合线的时候,我们是在寻找让下式的残差平方和最小的参数(k,d): 其…

YooAsset快速入门

文章目录 YooAsset快速入门指南:YooAsset学习核心要掌握的要点主要包括以下几个方面:基于YooAsset进行游戏资源管理的应用实例 YooAsset快速入门指南: YooAsset是一款专为游戏开发设计的资产管理和分发系统,它能够帮助开发者高效…

服务器挖矿病毒解决ponscan,定时任务解决

服务器挖矿病毒解决ponscan,定时任务解决 挖矿病毒会隐藏chattr的操作权限,让我们无法删除病毒文件,杀掉病毒进程。所以要去下载chattr.c的文件,编译成a.out。然后再对原来的chattr文件的权限进行修改。然后覆盖掉它。 chattr.c …

Redis Pipelining 底层原理分析及实践

作者:vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。在遇到批处理命令执行时,Redis提供了Pipelining(管道)来提升批处理性能。本文结合实践分析了Spring Boot框架下Redis的Lettuce客户端和Redisson客户端对P…

openlayers 入门教程(六):controls 篇

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

curl: (60) Peer‘s Certificate issuer is not recognized curl请求报错

此种情况多发生在自签名的证书或者证书和域名不对,报错含义是签发证书机构未经认证,无法识别。解决办法就是替换证书(补充证书机构)文件就好,如果没有可用的证书可以去Gworg申请一个。

从零到部署指南:Ubuntu上安装Boost和Crow库

1.安装boost 在安装Crow之前,需要确保您的系统中已经安装了Boost库。以下是Boost库安装步骤: 首先,从Boost官方网站或通过特定的链接下载Boost的源码,boost源码具体可参看这个链接: https://blog.csdn.net/duan199201…

Mongodb入门--头歌实验MongoDB 数据库基本操作

MongoDB 中聚合( aggregate )主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果,通常由聚合管道操作符和聚合表达式组合,完成数据处理。功能有点类似 Sql 语句中的 sum()、agv() 等。 一、聚合管道操作符将文档定制格式输出&…

如何在 MySQL 中开启日志记录并排查操作记录

在数据库管理中,能够追踪和审查操作记录是至关重要的。这不仅有助于识别和分析正常的数据库活动,还可以在数据泄露或未经授权的更改发生时进行调查和响应。本文将介绍如何在 MySQL 中开启通用日志记录,并如何排查操作记录。 开启 MySQL 通用…

使用 EFCore 和 PostgreSQL 实现向量存储及检索

随着 ChatGPT 的兴起及其背后的 AIGC 产业不断升温,向量数据库已成为备受业界瞩目的领域。FAISS、Milvus、Pinecone、Chroma、Qdrant 等产品层出不穷。市场调研公司 MarketsandMarkets 的数据显示,全球向量数据库市场规模预计将从 2020 年的 3.2 亿美元增长至 2025 年的 10.5…

机器学习—无量纲化和降维(四)

什么是特征预处理? 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 1包含内容 数值型数据的无量纲化: 归一化标准化 2特征预处理API sklearn. preprocessing为什么要进行归一化 or 标准化? 特征的单位或者大小相差较大…

MATLAB | 这些美丽大方的弦图居然都是用MATLAB画的?

什么?这些美丽大方的弦图都是MATLAB画的??? 没错都是由我本人开发的弦图绘制工具包实现的: chord chart 弦图https://www.mathworks.com/matlabcentral/fileexchange/116550-chord-chartDigraph chord chart 有向弦图…

【c语言】自定义类型:结构体详解

目录 自定义类型:结构体 结构体类型的声明 结构体变量的创建和初始化 结构的特殊声明 结构的自引用 结构体内存对齐 对其规则 为什么存在内存对齐? 修改默认对⻬数 结构体传参 结构体实现位段 位段的内存分配 位段的跨平台问题 位段的应用…

vue3新手笔记

setup(){}函数,是启动页面后,自动执行的一个函数。所有数据(常量、变量)、函数等等,都要return 出去。 ref函数(可用于基本数据类型,也可以用于复杂数据类型):让页面上的…

Java Set基础篇

目录 前言一、常用Set1.1 Set1.1.1 特点 1.2 HashSet1.2.1 特点1.2.2 使用 1.3 TreeSet1.3.1 特点1.3.2 使用 1.4 LinkedHashSet1.4.1 特点1.4.2 使用 二、对比总结 目录 前言 一、常用Set 1.1 Set Set是一个继承自Collection的接口&#xff1a; public interface Set<…

位图布隆过滤器的原理及实现

目录 位图的概念&#xff1a; 位图的前置知识&#xff1a;位运算 位图的实现&#xff1a; 位图的基本参数和构造方法&#xff1a; 位图的插入&#xff1a; 位图的查找&#xff1a; 位图的删除&#xff1a; 布隆过滤器概念&#xff1a; 布隆过滤器的实现&#xff1a; …