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

目录

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

软件体系结构概述

  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.hqwc.cn/news/17846.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文 | 一分钟快速找到自己研究领域的核心期刊

进入知网官网 https://www.cnki.net/ 点击搜索框右边的:出版物检索 鼠标放到顶部的 出版来源导航 旁边的倒三角上 选择期刊导航: 点击核心期刊导航 找到自己感兴趣的领域 点进去就可以看到该期刊中发表的论文:

ChatGPT训练流程

图源:State of GPT - Microsoft Build 笔者翻译上图如下: 阶段子阶段目标备注Pre-Training--------语言建模Instruction Finetuning---------让模型能够理解自然语言指令RLHFReward Modeling奖励建模,用来代替人工打分,降低标注…

8-1、Deployment运行应用的机制

Kubernetes 通过各种 Controller 来管理 Pod 的生命周期。为了满足不同业务场景,Kubernetes 开发了 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 、 CronJob 等多种 Controller。 用户通过 kubectl 创建 Depl…

数据结构【考研笔记】

数据结构【考研笔记】 第一章 绪论一、数据结构的基本概念1、基本概念1)数据2)数据元素、数据项3)数据对象、数据结构4)数据类型、抽象数据类型(ADT) 2、三要素1)逻辑结构2)存储结构…

【react】插件react-tsparticles和tsparticles实现粒子特效:

文章目录 一、效果图:二、实现思路:三、实现代码:【1】安装依赖【2】 一、效果图: 二、实现思路: particles(npm i react-particles-js)目前已被弃用;取代它的是tsparticles(npm i react-tsparticles 和npm install tsparticles&a…

AI大数据智能视频融合平台EasyCVR新增Ehome黑白名单配置

EasyCVR视频融合平台基于云边端智能协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvi…

Springboot启用HTTP响应压缩

官方文档:https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/htmlsingle/#how-to-enable-http-response-compression

【云原生】k8s之存储卷

容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次&a…

VMware 17虚拟Ubuntu 22.04设置共享目录

之前使用VM 17之前的版本虚拟CentOS,设置共享目录非常方便,在CentOS中安装VMware Tools即可。随着CentOS变成上游版本后,转向使用Ubuntu,VM也升级到了17,Ubuntu也升级到了最新的22.04,但是发现共享目录不能…

缓存 - Caffeine 不完全指北

文章目录 官网概述设计CodePOMPopulationEviction PolicyRefreshStatistics 官网 https://github.com/ben-manes/caffeine wiki: https://github.com/ben-manes/caffeine/wiki 概述 Caffeine是一个用于Java应用程序的高性能缓存框架。它提供了一个强大且易于使用的缓存库&a…

Dynamsoft Barcode Reader crack

Dynamsoft Barcode Reader crack SDK经过重构,与DynamsoftCaptureVision(DCV)体系结构集成,该体系结构包括: ImageSourceAdapter(ISA)-标准输入接口,用于将来自不同来源的图像数据转换为标准输入图像数据。此外,ISA结合…

css,less,scss中的深度选择器,结合elementUi使用

css中深度选择器用到的是 >>>加类名 可以很方便的找到自己想要修改的样式 lees中用到 /deep/ 加类名 scss中用到::v-deep 加类名