从业务到软件架构——软件建模

news2024/11/24 22:38:45

一、问题

1.架构到底是什么?架构和业务之间到底什么关系?
2.好的架构的设计出发点是什么?好的架构应该是什么样的?

作为一个计算机领域的词汇,架构的定义是:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

然而业务在不断变化,我们的软件架构也在快速腐化,所以必须要不断的迭代更新,不断适应新的业务需求。一个软件架构的设计主要有三点:

功能需求 + 约束条件 + 性能

约束条件指在什么环境下运行,Linux还是windows,嵌入式还是PC,性能就是安全,并发,响应速度,吞吐量等。

二、软件建模

软件建模就是对一个系统的抽象化,在需求和实现之间架起一座桥梁,通过模型指导一个软件系统的具体实现

三、软件建模方法

在不同的领域和场景下有不同的软件建模方法,其各自的建模思想和采用的建模工具也不尽相同,如:

    结构化方法(Structured Method)
    面向对象方法(Object Oriented Method)
    基于构件方法(Component Based Method)
    面向服务方法(Service Oriented Method)
    面向切面方法(Aspect Oriented Method)
    模型驱动方法(Model Driven Method)
    形式化方法(Formal Method)
 

四、架构分类

逻辑视图:用于描述系统软件功能拆解后的组件关系,组件约束和边界,反映系统整体组成与系统如何构建的过程。关注功能和逻辑层。

开发视图:描述系统的模块划分和组成,以及细化到内部包的组成设计,服务于开发人员,反映系统开发实施过程。

物理视图:描述软件如何映射到硬件,反映系统在分布方面的设计,系统的组件是如何部署到一组可计算机器节点上,用于指导软件系统的部署实施过程。

处理视图:用于描述系统软件组件之间的通信时序,数据的输入输出,反映系统的功能流程与数据流程,通常由时序图和流程图表示。关注进程、线程、对象等运行时概念以及相关的并发、同步、通信等问题。

五、 软件建模工具

随着面向对象技术的不断发展和应用,形成了面向对象的建模标准,即UML统一建模语言。UML是面向对象开发中一种通用的图形化建模语言,具有如下特点:

    面向对象:支持面向对象的主要概念,提供了一批基本的模型元素的表示图形和方法,能简洁明了地表达面向对象的各种概念
    可视化、表示能力强:通过UML的模型图能够清晰地表示系统的逻辑模型和实现模型,可用于各种复杂系统的建模
    独立于过程:是系统建模语言,独立于开发过程
    独立于程序语言:用UML建立的软件系统模型可以用Java、C++、Smalltalk等任何一种面向对象的程序设计来实现
    易于掌握使用:UML图形结构清晰,建模简洁明了,容易掌握使用

(1)UML的组成:由事物、关系、图三部分组成。

       1)事物:结构事物(用例、类、接口、协作、活动类、组件、节点);行为事物(交互、状态机);组织事物(包);辅助事物(注释)

       2)关系:关联、依赖、泛化、组合、聚合

       3)图:动态图(状态图,顺序图,合作图,活动图);静态图(用例图,类图,对象图,组件图,部署图)

(2)UML的五种视图(对上面九种模型图的实际应用)

    【白盒视图】逻辑视图,使用类图和对象图实现

    【白盒视图】实现视图,使用组件图实现

    【白盒视图】运行视图,使用状态图,顺序图,合作图,活动图实现

    【黑盒视图】部署视图,使用部署图实现

    【黑盒视图】用例视图,使用用例图实现

(3) UML模型图的五种关系

类的五种关系:泛化=实现>组合>聚合>关联>依赖(耦合度依次减弱,一个类的改变对另一个类影响越大则耦合度越强)

1)泛化: 指的是类之间的继承或者实现关系,继承使用空心三角箭头+实线表示[<|--],实现使用空心三角箭头+虚线表示[<|..],生命周期:在定义类关系时就必须确定,一开始有效

2)组合:表示个体与组成部分之间的关联关系,组成部分是个体不合分割的一部分[*--],使用实心菱形+实线表示,生命周期:在类实例化时有效

3)聚合:表示集体与个体的关联关系,个体独立于集体,使用空心菱形+实线[o--],生命周期:在调用方法调用时有效

4)关联:表示一个类需要依赖另一个类做成员属性的关联关系,使用箭头+实线表示[-->],生命周期:在类的成员变量内有效

5)依赖:表示一个类需要依赖另一个类做方法的返回值、形参、局部变量或者调用另外一个类方法的依赖关系,使用箭头+虚线表示[..>],生命周期:在类的函数调用时有效

(4)应用到具体的软件开发流程

1)需求分析:使用用例视图(用例模型图),去描述外部参与者(角色)对系统功能的建模;分析是否满足客户需求。

2)概要设计:使用逻辑视图(类图、对象图)和行为视图(状态图、活动图、合作图、顺序图),去描述系统的静态结构和动态结构。

3)详细设计:使用逻辑视图(类图、对象图)和行为视图(状态图、活动图、合作图、顺序图),去描述实现系统的静态结构和动态结构方案。

4)编码阶段:将详细设计的静态结构和动态结构方案实现到具体编码中。

5)测试阶段:使用逻辑视图(类图)描述编写单元测试用例,使用实现视图(组件图)和部署视图(部署图)去描述集成测试用例。

参考:

对软件建模的全面认识_huahua.Dr的博客-CSDN博客

【精选】软件建模概述 & UML模型图-CSDN博客

一文了解8种常用的软件架构模式,原理与应用

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

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

相关文章

ubuntu22.04使用VNC链接服务器远程桌面

一、本地VNC客户端 本地主要需要一个VNC客户端&#xff0c;用来远程连接服务器端的VNC&#xff08;在不安装Web版本VNC情况下&#xff09;。VNC客户端下载地址&#xff1a; VNC客户端下载 二、安装Xfce桌面环境 在远程服务器控制台中安装Xfce桌面&#xff08;这个桌面环境比…

redis持久化和Redis事务

一)Redis持久化之RDBredisDataBase: 什么是持久化: 1)持久性:和持久化说的是同一回事&#xff0c;衡量持久性的前提是重启进程或者是重启主机以后数据是否还存在 持久:把数据存储在硬盘上&#xff0c;那么就是持久性 不持久:把数据存储在内存中 2)redis是一个内存级别的数据库&…

关于electron中使用ffi-napi窗口遍历的过程及问题

使用环境&#xff1a;electorn19 、node16、ffi-napi、user32 前言&#xff1a;这里先提一嘴&#xff0c;windows api也是有32位和64位的区别的&#xff0c;因为我是要快速完成项目&#xff0c;就没用C写&#xff08;不熟练&#xff09;&#xff0c;我想着直接用易语言写DLL&am…

注册商标-保护企业利益

注册商标-保护企业利益&#xff01; 在当今竞争激烈的商业环境中&#xff0c;商标对于企业的成功至关重要。商标不仅是企业形象的代表&#xff0c;也是企业产品和服务的标识。通过注册商标&#xff0c;企业可以获得法律保护&#xff0c;确保其商标的独特性和安全性。本文将探讨…

1212. 地宫取宝

题目&#xff1a; 1212. 地宫取宝 - AcWing题库 思路&#xff1a;dp&#xff08;最长上升子序列和摘花生的结合&#xff09; 代码&#xff1a; #include<iostream> using namespace std; const int N 55; const int MOD 1000000007;int n, m, k; int w[N][N];//每个坐…

【Leetcode】【数据结构】【C语言】判断两个链表是否相交并返回交点地址

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode *tailAheadA;struct ListNode *tailBheadB;int count10;int count20;//分别找尾节点&#xff0c;并顺便统计节点数量&#xff1a;while(tailA){tailAtailA->next;c…

变电站自动化系统中的安全措施分析及应用-安科瑞

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;阐述变电运行中的问题&#xff0c;电气自动化系统与安全运行措施&#xff0c;包括自动控制设备的投入&#xff0c;电气自动 化与计算机技术相、设备数据的采集与处理、自动化系统的升级、人工智能技术的应用。 关键…

第三章:人工智能深度学习教程-基础神经网络(第五节-了解多层前馈网络)

让我们了解反向传播网络 (BPN) 中的误差是如何计算的以及权重是如何更新的。 考虑下图中的以下网络。 反向传播网络(BPN) 上图中的网络是一个简单的多层前馈网络或反向传播网络。它包含三层,输入层有两个神经元 x 1和 x 2,隐藏层有两个神经元 z 1和 z 2,输出层有一个神经…

跨平台使用:第三方美颜SDK在多种操作系统上的应用

当下&#xff0c;美颜SDK已经演化为一种跨平台的现象&#xff0c;使用户能够在不同的操作系统上享受到相似的美颜效果。这一现象的背后&#xff0c;有一系列强大的第三方美颜SDK&#xff0c;它们在多种操作系统上广泛应用&#xff0c;为用户提供了卓越的美颜体验。 一、美颜S…

机器人阻抗与导纳控制的区别

机器人自身的非线性动力学&#xff08;由柔软性引起的&#xff09;导致控制精度下降&#xff0c;因此难以描述准确的动力学。 导纳控制和阻抗控制都是基于位置与力关系的模式&#xff0c;被认为具有鲁棒性和安全性。然而&#xff0c;当机器人与刚体接触时&#xff0c;导纳控制常…

Android codec2 视频框架 之输入buffer

文章目录 输入端的内存管理输入数据包buffer结构体的转换 主要的流程如上&#xff0c; 申请内存在CCodecBufferChannel&#xff0c;申请之后回调到MediaCodec。然后应用从MediaCodec获取 将解码数据放到buffer中&#xff0c;CCodecBufferChannel在将这块buffer 送到componet模块…

uniapp:打包ios配置隐私协议框

使用uniapp打包ios 上架商店需要配置隐私协议政策弹窗。当用户点击确定后才能继续操作。 首先manifest.json中配置使用原生隐私政策提示框是不支持ios的。不用勾选。 解决思路&#xff1a; 1、新建页面&#xff1a;iosLogin.vue&#xff0c;pages.json中 这个页面需要放在第一…

20道高频JavaScript面试题快问快答

※其他的快问快答&#xff0c;看这里&#xff01; 10道高频Qiankun微前端面试题快问快答 10道高频webpack面试题快问快答 20道高频CSS面试题快问快答 20道高频JavaScript面试题快问快答 30道高频Vue面试题快问快答 面试中的快问快答 快问快答的情景在面试中非常常见。 在面试过…

[100天算法】-最短无序连续子数组(day 66)

题目描述 给定一个整数数组&#xff0c;你需要寻找一个连续的子数组&#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。你找到的子数组应是最短的&#xff0c;请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要…

LightingChart JS 5.0 Crack

LightingChart JS快如闪电、交互式且响应灵敏的 2D 和 3D JavaScript图表。下一代、世界上最快的 JS 图表 JS交互示例 交互式示例是一种易于使用的探索工具&#xff0c;可帮助您快速开始了解最重要的概念。在这里您可以实时搜索、查看和编辑图表。 高性能 JS 图表 基于 WebGL…

@ControllerAdvice + @ExceptionHandler 定义全局异常

创建Spring Boot项目&#xff1a;使用Spring Initializr创建一个新的Spring Boot项目。依赖配置&#xff1a;在pom.xml 文件中(方便起见使用的是thymeleaf模板引擎)&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId&…

设计模式之观察者(Observer)

事件处理模型 小朋友睡醒了就哭&#xff0c;饿 写程序模拟这个过程&#xff1a; v1:最简单的就是写程序一直观察着&#xff0c;什么时候哭了就进行处理 /*** 披着面向对象外衣的面向过程*/ public class Main1 {public static void main(String[] args) {boolean cry false…

print(torch.cuda.is_available()) False如何解决?GTX3090

首先介绍环境&#xff1a; 保证Cuda与Pytorch的版本对齐就可以了。 nvcc -V 查看原来装的是cuda11.3版本 去Pytorch官网找到相应指令下载即可&#xff1a; CtrlF&#xff1a;cuda11.3 就在诸多版本中找到啦,一定找 torch的版本cuda版本。我之前错误安装的torch&#xff0c;只…

小程序游戏对接广告收益微信小游戏抖音游戏软件

小程序游戏对接广告是一种常见的游戏开发模式&#xff0c;开发者可以通过在游戏中嵌入广告来获取收益。以下是一些与小程序游戏对接广告收益相关的关键信息&#xff1a; 小程序游戏广告平台选择&#xff1a; 选择适合你的小程序游戏的广告平台非常重要。不同的平台提供不同类型…

【Python基础】 模块和包的创建及使用(windows 下制作和发布压缩包超详细)

模块和包的创建及使用 1.模块1.1模块的概念1.2 模块的两种导入方式1.3 模块的搜索顺序[扩展]1.4 原则—— 每一个文件都应该是可以被导入的 2.Package-包2.1制作和发布压缩包2.2包的安装 1.模块 1.1模块的概念 模块是Python 程序架构的一个核心概念 • 每一个以扩展名py 结尾…