软件设计模式与体系结构-软件体系-调用-返回风格软件体系结构

news2024/11/16 12:23:21

目录

  • 软件体系结构概述
    • 概述
  • 一、调用-返回风格软件体系结构
    • 概念
    • 代码
    • 主程序-子程序软件体系结构
    • 自顶向下的设计方法的问题
    • 结构化设计的优缺点
    • 面向对象体系结构
    • 面向对象设计的优缺点
    • 主程序-子程序与面向对象体系结构
      • 相似
      • 差异
    • 课程作业

软件体系结构概述

  1. 调用-返回风格软件体系结构
  2. 数据流风格软件体系结构
  3. 基于事件的软件体系结构
  4. 层次软件体系结构
  5. MVC软件体系结构

概述

软件体系结构是指软件系统在高层次上的整体结构和组织方式,它定义了软件系统中各个组件的关系、交互方式以及对外部环境的接口。软件体系结构提供了一个抽象的框架,用于指导系统的设计和开发过程,并确保系统具有所需的功能、性能、可靠性和可维护性。

软件体系结构的设计通常基于系统的需求和功能要求,以及对系统的性能、可扩展性、安全性等方面的考虑。它描述了系统的整体组织结构,包括系统中的模块、组件、层次关系、通信方式、数据流和控制流等。

常见的软件体系结构模式包括:

  1. 分层体系结构(Layered Architecture):将系统划分为若干层次,每个层次负责不同的功能,并通过明确定义的接口进行通信。

  2. 客户端-服务器体系结构(Client-Server Architecture):将系统分为客户端和服务器端,客户端发送请求,服务器端处理请求并提供响应。

  3. 主从体系结构(Master-Slave Architecture):一个主节点负责协调和控制,多个从节点执行任务并向主节点汇报结果。

  4. 发布-订阅体系结构(Publish-Subscribe Architecture):组件可以发布消息,其他组件可以订阅并接收感兴趣的消息。

  5. 数据驱动体系结构(Data-Driven Architecture):基于数据流的驱动,组件根据输入数据的变化进行计算和处理。

  6. 事件驱动体系结构(Event-Driven Architecture):组件通过事件的触发和处理进行通信和协作。

软件体系结构的选择取决于系统的需求和特点,不同的体系结构模式适用于不同的应用场景。一个好的软件体系结构能够提供良好的系统结构和组织,支持系统的可扩展性、可维护性和性能要求,同时能够满足用户的功能需求和用户体验。在设计和实现过程中,需要综合考虑系统的需求、技术限制和开发团队的能力,选择适合的体系结构模式,并进行合理的划分和组织。

一、调用-返回风格软件体系结构

其主要思想是:将一个复杂的大系统分解为一些子系统,以便降低复杂度,并且增加可修改性

概念

  1. 每个软件构件都设计为有一个唯一的程序执行起点和一个唯一的程序执行终点;
  2. 程序从其执行起点开始执行该构件的代码,程序执行结束,将控制返回给程序调用构件,
  3. 其中,程序构件通常叫做子程序,
  4. 从一个构件到另外一个构件的控制传递叫做子程序调用。

在这里插入图片描述
调用-返回风格体系结构可以被组织成任何形式。但层次结构的组织形式更清晰
层次结构的设计被称为共享数据的主程序-子程序软件体系结构

代码

调用-返回风格软件体系结构(Call-Return Architecture)是一种基于消息传递的软件架构,其中系统的各个组件通过相互调用和返回来协同工作。该体系结构适用于分布式系统和并发环境,它提供了一种结构化的方式来处理组件之间的通信和协作。

以下是一个简单的示例,展示了调用-返回风格软件体系结构的代码结构和调用关系:

# 组件A
def component_A():
    # 执行一些操作
    result = component_B()  # 调用组件B并获取返回结果
    # 处理组件B的返回结果
    # 执行其他操作

# 组件B
def component_B():
    # 执行一些操作
    result = component_C()  # 调用组件C并获取返回结果
    # 处理组件C的返回结果
    # 执行其他操作
    return result

# 组件C
def component_C():
    # 执行一些操作
    result = 42  # 返回一个结果
    return result

# 主程序
component_A()  # 调用组件A

在上面的示例中,组件A调用了组件B,并从组件B获取了返回结果。组件B在执行过程中又调用了组件C,并从组件C获取了返回结果。这样,通过不同组件之间的调用和返回,整个系统形成了一个协同工作的链条。

调用-返回风格软件体系结构的特点包括:

  • 消息传递:组件之间通过调用和返回消息进行通信。
  • 分离关注点:不同组件专注于自己的功能,通过调用其他组件来完成更复杂的任务。
  • 结构化设计:系统的各个组件形成了一个有序的调用链,便于理解和维护。
  • 并发执行:不同组件可以并发执行,提高系统的性能和响应能力。

调用-返回风格软件体系结构在分布式系统和并发环境中具有广泛应用,特别适用于需要协调多个组件之间的任务和数据流的场景。它提供了一种结构化的方式来管理组件之间的调用关系,使系统更具可扩展性和可维护性。

主程序-子程序软件体系结构

主程序-子程序软件体系结构在设计上使用层次化的划分方法,该体系结构中使用由编程语言直接支持的单一的控制线程。
子程序的结构是明确的,子程序通常组成程序模块。子程序的调用呈现层次状,其正确与否往往取决于其调用的子程序的正确与否。
相比于非结构化编程,主程序-子程序软件体系结构能够较好地支持系统的可改变性和可伸缩性等性能,其采用分而治之的策略

在这里插入图片描述

自顶向下的设计方法的问题

功能演化困难

现实中的系统功能不容易描述

功能化设计丢掉了数据与数据结构

由功能设计得到的软件产品的可复用的代码较少

结构化设计的优缺点

优点

  1. 逻辑设计与物理设计分离
  2. 开发过程中形成一套规范化的文档,便于将来修改和维护

缺点

  1. 开发周期长,开发过程复杂
  2. 系统难于适应环境变化
  3. 经验表明,较小的程序(小于10万行)适合于结构化开发

面向对象体系结构

封装性
继承性
多态

面向对象设计的优缺点

优点

  1. 容易维护
  2. 可复用性好
  3. 映射现实世界
  4. 容易对一个系统进行剖分

缺点

  1. 面向对象程序占用内存较大
  2. 一个对象要和另外一个对象交互,该对象必须知道另外一个对象的身份,包括对象名、方法名和参数类型等。

主程序-子程序与面向对象体系结构

在这里插入图片描述
在这里插入图片描述

相似

在这里插入图片描述

差异

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

课程作业

在这里插入图片描述
结构化设计、面向对象设计
结构图、
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

为什么现在原生家庭的问题这么严重?

匿名用户 191 人赞同了该回答 换一个玄学的角度来看这个问题,之前看b站,有一个up主说,中国有历史记载的人口数一直都很稳定,7-8千万到1亿左右,明朝2亿,清朝到民国算是增长比较多的,有4亿&#x…

内网隧道代理技术(十一)之公网资产扫描-代理池配置

公网资产扫描-代理池配置 代理池介绍 代理池的意思就是拥有多个代理可以随意切换IP的东西,每次用户的请求通过代理池,每个请求包的IP地址是不同的,那么代理池一般有几种用法呢? 购买代理池,购买的东西会自动切换IP,简单又方便(大力推荐)有些工具可以支持文本代理的方…

SpringMVC跨域写入Cookie

前后端分离的项目,SpringMVCTomcat(SpringBoot),前端Vueaxios。 不建议后端去写入Cookie,一般都是在前端写入Cookie,如果后端使用:CrossOrigin(origins "http://localhost", allowCredentials "true…

unity物理系统

物理引擎即描述真实世界中物理现象的算法,如刚体物理,软体物理和流体物理,unity本身支持的主要为刚体物理,我们也可以自己编写一些其它的模拟效果。 unity内置Nvidia开发的Physx引擎(3D)和一个开源引擎Box…

【运维知识进阶篇】Zabbix5.0稳定版详解10(Zabbix自动注册+Ansible自动部署,实现一条命令监控任意主机)

当我们的Zabbix自动注册Ansible自动部署在一起时,会碰出什么样的火花,答案就是可以实现执行ansible的一条命令,监控任意一台或多台主机。 目录 一、配置好自动注册规则 二、编写Ansible playbook 三、运行Ansible,查看监控效果…

从零开始 Spring Boot 64:Hibernate 标识符

从零开始 Spring Boot 64:Hibernate 标识符 图源:简书 (jianshu.com) Hibernate 中的实体,由标识符(Identitifier)确定了其实体实例的唯一性,这对应于表中的主键。 Id 对于单一属性作为标识符的情况&…

Web3与AI:数字时代安全隐私交易的未来

AI+web3=下一个热门赛道? 在数字时代的浪潮中,Web3和人工智能(AI)成为了两个备受关注的前沿技术。Web3代表着下一代互联网,强调去中心化、透明和用户控制的特点。而人工智能作为一种智能化的技…

【LeetCode】503. 下一个更大元素 II

503. 下一个更大元素 II(中等) 方法:单调栈 「 对于找最近一个比当前值大/小」的问题,都可以使用单调栈来解决。栈可以很好的保存原始位置,最近影射栈顶。题目要求更大,因此更大即解–出栈,更小…

【leetcode】15.三数之和(python+转为两数之和+去重)

class Solution(object):def threeSum(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""# 思路:转为两数之和# for循环遍历先固定一个数字a,寻找另外两个数字之和-a(双指针)# 难点…

【高并发内存池】

🎉项目:高并发内存池 博主主页:桑榆非晚ᴷ 博主能力有限,如果有出错的地方希望大家不吝赐教 给自己打气:成功没有快车道,幸福没有高速路。所有的成功,都来自不倦地努力和奔跑,所有…

自动化测试工具——Fitnesse

1 介绍 是一个完全集成的独立wiki和验收测试框架。 1.1、协作工具 由于FitNesse是一个wiki web服务器,它的入门和学习曲线非常低,这使得它成为一个优秀的工具,可以与业务涉众进行协作。 1.2、测试工具 FitNesse中创建的wiki页面作为测试…

地球万物皆可计算!星图地球智脑引擎重磅发布

人类文明的每一次阶跃,都起源于计算。 1800多年前,在清脆的珠算声中,算盘拨出人类最古老的计算程序,带来农耕文明的繁盛;200多年前,在齿轮的转动间,机械计算机勾勒出第一次工业革命的袅袅蒸汽&…

Leetcode:167. 两数之和 II - 输入有序数组(2023.7.8 每日一题C++)

目录 167. 两数之和 II - 输入有序数组 题目描述: 实现代码与解析: 暴力(超时) 双指针 原理思路: 二分 原理思路: 167. 两数之和 II - 输入有序数组 题目描述: 给你一个下标从 1 开始的…

【Python编程系列】2、Python解释器

Python解释器 自带IDLE 当我们使用"Install Now"的默认安装方式时,会自动安装一个纯Python下使用Tkinter编写的相当基本的IDE。 什么是IDE?Integrated Development Environment,集成开发环境。 有多基础呢?可以打开看看它的界面就知道了! 编写代码后,点击回车…

Python——— 分支结构循环结构

(一)语句底层逻辑思维 控制语句:把语句组合成能完成一定功能的小逻辑模块。 分为三类:顺序、选择和循环。 其中: “ 顺序结构 ” 代表 “先执行a,再执行b” 的逻辑。比如,先找个女朋友&…

实验室信息化LIMS如何采集实验室仪器设备数据?

1. 简述 数据采集功能,数据采集工具将以客户端的形式运行在与设备连接的工作站电脑上,主要负责将设备产生的完整的可输出的原始结果提取到LIMS系统,供实验室人员进行报告生成,汇总等操作。 2. 实现方式 仪器数据采集采用LIMS系统…

单摆模型仿真(SMART PLC梯形图实现)

单摆模型详细介绍这里不再赘述,大家可以参看下面文章链接,单摆模型的仿真有助于大家理解分析力学的有关知识,同时模型的实现可以帮助大家更好的理解和运用微分和积分这2个强有力的工具。 单摆模型(博途PLC和Simulink仿真对比)_RXXW_Dor的博客-CSDN博客单摆模型的详细推导公…

深入分析Spring的IoC容器:从底层源码探索

前言: 博主在最近的几次面试中,大中小厂都问到了Spring的ioc容器相关问题,这块知识确实是面试中的重点内容,因此结合所看的书籍,在这篇文章中总结下。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读&#xff0…

Graalvm编译spring boot 3 + jpa 的原生镜像

编译spring boot 3 native jpa的原生镜像 其中涉及版本: maven: 3.5.4 jdk: 17 graalvm: 22.3 springboot jpa: 3.0.8 一、Windows 1、graalvm安装 GraalVM22.3.0安装地址 解压到任意目录后添加JAVA_HOME环境变量 新增path:%JAVA_HOME%与%JAVA_H…

开发日记-凌鲨中微应用的安全性

凌鲨在框架上使用了特别注重安全性的tauri框架,里面所有的权限都需要明确给出。 微应用本质上是静态web页面加上注入的额外能力。额外能力通过tauri的ipc注入和访问http服务。为了保证主服务的稳定性,一些能力我们是以外挂可执行文件的方式,…