软件建模与设计 —— 入门

news2025/6/22 3:17:03

序言

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

设计模式

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

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

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】《软件建模与设计》学习笔记

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZYNQ7000 PL与PS交互总结

这里写目录标题 一、ZYNQ7000整体框架二、AXI总线与接口2.1 AXI总线协议分类2.1.1 AXI_Lite协议2.1.2 AXI_Full协议2.1.3 AXI_Stream协议 2.2 AXI接口分类 三、PS与PL交互方式总结3.1 PL中断3.2 AXI_Lite协议配合AXI GP接口进行寄存器访问3.3 AXI_Full协议配合AXI HP接口进行内…

解决苹果iMac的M1芯片Node Sass does not yet support your current environment的问题

问题背景 如图所示,这是我的电脑,M1芯片 启动前端项目老是报错,说node Sass不支持我当前的环境,同事的macBook是intel芯片的,就能跑起项目来 很烦 但是不慌!!! 咱有解决方法啦&a…

添加okHttp依赖报错

compile "com.squareup.okhttp:okhttp:2.4.0" compile com.squareup.okio:okio:1.5.0 compile "com.google.code.gson:gson:2.8.0" 升级了,改为 implementation "com.squareup.okhttp:okhttp:2.4.0"implementation com.squareup.o…

零基础入行IT行业:AI助力实现梦想

目录 一、前言 二、学习路径:构建你的“AI学习阶梯” 1.基础知识启蒙(预期时间:1-2个月) 2.技能逐层提升(预期时间:3-6个月) 3.深化专业方向(预期时间:6-12个月&…

浏览器的重排重绘

相关问题 如何提升页面渲染性能如何减少页面重排重绘哪些行为会引起重排/重绘 关键点 渲染性能 Layout Paint 浏览器渲染大致分为四个阶段,其中在解析 HTML 后,会依次进入 Layout 和 Paint 阶段。样式或节点的更改,以及对布局信息的访问等…

Node.js 的 5 个常见服务器漏洞

Node.js 是一个强大且广泛使用的 JavaScript 运行时环境,用于构建服务器端应用程序。然而,与任何其他软件一样,Node.js 也有自己的一些漏洞,如果处理不当,可能会导致安全问题。请注意,这些漏洞并不是 Node.…

【漏洞复现】OpenMetadata 命令执行漏洞复现(CVE-2024-28255)

声明:亲爱的读者,我们诚挚地提醒您,Aniya网络安全的技术文章仅供个人研究学习参考。任何因传播或利用本实验室提供的信息而造成的直接或间接后果及损失,均由使用者自行承担责任。Aniya网络安全及作者对此概不负责。如有侵权&#…

【MySQL数据库 | 第二十六篇】InnoDB基本数据存储单元以及存在问题

前言: InnoDB作为MySQL中最常用的存储引擎之一,承载着许多数据库系统的关键任务,如事务管理、并发控制和数据完整性保障。 然而,就像任何技术一样,InnoDB也并非完美无缺。在深入了解其工作原理和特性的同时&#xff…

宏集PLC如何为楼宇自动化行业提供空调、供暖与通风的解决方案?

一、应用背景 楼宇自动化行业是通过将先进的技术和系统应用于建筑物中,以提高其运营效率、舒适度和能源利用效率的行业,其目标是使建筑物能够自动监控、调节和控制各种设备和系统,包括照明系统、空调系统、安全系统、通风系统、电力供应系统…

头歌-机器学习 第13次实验 特征工程——共享单车之租赁需求预估

第1关:数据探索与可视化 任务描述 本关任务:编写python代码,完成一天中不同时间段的平均租赁数量的可视化功能。 相关知识 为了完成本关任务,你需要掌握: 读取数据数据探索与可视化 读取数据 数据保存在./step1/…

JUC:实现一个简易的数据库连接池(享元模式)

主要是学习享元模式。 享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享尽可能多的对象来最小化内存使用和提高性能。在该模式中,对象被分为两种状态:内部状态和外部状态。 内部状态(Intr…

[SystemVerilog]常见设计模式/实践

常见设计模式/实践 RTL 设计(尤其是 ASIC)的最终目标是制作出最小、最快的电路。为此,我们需要了解综合工具如何分析和优化设计。此外,我们还关注仿真速度,因为等待测试运行实际上是在浪费工程精力。虽然综合和仿真工…

智造未来,引领潮流:中科美菱新品发布展现制造新力量

2024年3月30日,中科美菱在第十六届中国整合生物样本学大会上瞩目亮相,发布了其全新力作—云智安菱睿系列全自动超低温样本存储设备SU-80。同时,公司还携云智安自动化样本库解决方案闪耀昆明。这一新品的华丽登场,不仅向世界展示了…

本地域名解析DNS

本地域名解析: - 需要修改本地hosts,增加映射 - windows hosts文件目录 c:\windows\system32\drivers\etc\hosts - 增加映射 22.100.10.122 gitlab.xxx.cn

爬取豆瓣(线程、Session)优化版本

爬取豆瓣(线程、Session)优化版本 该文章只是为了精进基础,对Session、threading、网站请求解析的理解。 此版本没有爬取详情页。还在学习阶段的读者可以尝试一下。 适用于基础刚开始学习爬虫的! 1.改进点: 将普通的r…

JDK版本升级后连不上MySQL数据库的问题

1. 问题描述 用户在将 JDK 版本从 8 升级到 11 后,发现应用无法连接到 MySQL 数据库,出现连接超时或连接被拒绝的错误。 例如出现如下报错信息: 可能原因: JDBC驱动版本不兼容: 新的 JDK 11 可能需要使用更高版本的 My…

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测 目录 时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索…

数据的未来:人工智能引领下的大数据革命

大数据是指在一定时间范围内,无法通过常规软件工具进行捕捉、管理和处理的数据集合,这种数据具有海量、高增长率和多样化的特点,需要采用新的处理模式才能发挥其更强的决策力、洞察发现力和流程优化能力。大数据将数据视为核心资源&#xff0…

Vue 项目如何在VSCode中进行断点调试

概要: 简单介绍一下,在VSCode中如何对Vue项目进行断点调试。具体内容包括但不限于:如何配置调试环境、如何在代码中设置断点、如何启动调试以及如何解决在调试过程中可能遇到的问题。 实际开发中,我们的前端项目一般都是在浏览器…

11 flink-sql 中基于 mysql-cdc 连接 mysql-pxc 集群无法获取增量数据问题

前言 问题是来自于 群友, 2024.03.29, 也是花了一些时间 来排查这个问题 大致的问题是用 mysql-cdc 连接了一个 mysql-pxc 集群, 然后创建了一个 test_user 表 使用 "select * from test_user" 获取数据表的数据, 可以拿到 查询时的快照, 但是 无法获取到后续对…