当前位置: 首页 > news >正文

软件架构风格之调用返回风格:主程序、面向对象、分层,到底怎么区分?

软件架构风格之调用返回风格:主程序、面向对象、分层,到底怎么区分?

备考软考架构师的时候,调用返回风格(Call-Return Style)这块总是搞混。主程序/子程序、面向对象、分层架构,它们都算调用返回风格,但考试问你"这段描述属于哪种子风格"——瞬间就懵了。

这篇文章用最直白的方式,把它们的区别讲清楚。

一句话说清楚

调用返回风格的核心思想:一个模块调用另一个模块,被调用的模块执行完把结果返回给调用者。就这么简单。

但同样是"调用-返回",组织方式不同,就分出了不同的子风格。

主程序/子程序风格

这是最原始的一种。结构就是:

主程序 ├── 子程序A ├── 子程序B │ └── 子程序C └── 子程序D

特点

  • 一个主程序控制全局,调用各个子程序
  • 子程序之间也可以互相调用
  • 数据主要通过参数传递
  • 全局变量是"共享数据区"

典型场景:早期的 C 语言程序、Shell 脚本、批处理流程。

识别关键词:主程序、子程序/子函数、全局数据区、单线程控制。

面向对象风格

这是现在最主流的一种。把数据和操作封装成对象:

对象A(数据 + 方法) │ 调用 对象B(数据 + 方法) │ 调用 对象C(数据 + 方法)

特点

  • 数据和对数据的操作封装在一起(封装)
  • 通过继承复用代码
  • 通过多态实现灵活调用
  • 对象之间通过"消息"(方法调用)通信

典型场景:Java、C++、Python 写的绝大多数业务系统。

识别关键词:对象、类、封装、继承、多态、消息。

敲黑板:面向对象也是调用返回风格!只不过调用的是"对象的方法"。

分层架构风格

把系统按职责分成若干层,每层只调下一层:

表示层(UI) │ 调用 业务逻辑层(Service) │ 调用 数据访问层(DAO) │ 调用 数据库

特点

  • 严格分层:第 N 层只能调第 N-1 层
  • 每层只负责一类事情,职责清晰
  • 层与层之间通过接口通信
  • 修改某一层的实现,不影响其他层

典型场景:Web 应用(Controller → Service → Repository)、OSI 网络七层模型。

识别关键词:分层、N层架构、层间接口、逐层调用。

一张表搞定区别

维度主程序/子程序面向对象分层
组织核心功能分解对象/类抽象层次
耦合方式参数+全局变量方法调用层间接口
数据共享全局数据区对象内部私有层内共享
扩展方式加子程序继承/组合插入新层
典型例子C程序Java项目Web三层架构

考试怎么答

软考经常这么出题:

“某系统采用分层结构,将业务逻辑、数据访问和界面展示分离” —— 这是分层架构风格。

“系统由多个对象组成,对象之间通过消息传递进行通信” —— 这是面向对象风格。

“系统有一个主控模块,通过调用子函数完成计算” —— 这是主程序/子程序风格。

记住口诀:看组织方式——是功能拆解(主程序)、对象封装(面向对象)、还是层次抽象(分层)

写在最后

说实话,这三种风格在实际项目中经常混着用。比如一个 Spring Boot 项目:整体是分层架构(Controller→Service→DAO),但每一层内部用的是面向对象风格,某个工具类可能又是主程序/子程序风格。

考试归考试,实际干活不用死抠定义。但考试要过,这些概念还是得门儿清。

有问题评论区聊。

http://www.cnnetsun.cn/news/2579234.html

相关文章:

  • 应届生只有社团和课程作业,如何用AI简历工具把“校园经历”写得更专业?
  • 如何将SVG图标转换为TTF字体文件?svg2ttf工具完整指南
  • 终极指南:如何用YOLOv8 AI自瞄系统提升FPS游戏水平
  • 基于扩散模型的6G天地一体化网络信道预测:Uni-DiffSG框架解析
  • 模糊线性方程组高效求解:基于清晰系数矩阵的分解算法与实践
  • Unity SRP镜头光晕原理与实战:从光学建模到性能优化
  • NSudo系统权限管理工具深度解析与高级应用指南
  • 移动脑成像实战:从实验室P300到图书馆找书,如何用模板匹配捕捉真实认知信号
  • 如何让旧款Mac运行最新macOS:OCLP-Mod终极指南
  • 短视频素材太多怎么挑重点?随身鹿与 3 款工具实测对比
  • 谷歌I/O大会后Pichai接受专访,畅谈大模型、搜索转型、智能体及AGI前景
  • 10m+100m 8 类核心风速数据分享
  • 基于涡激压力与关联维数的气液两相流型智能识别方法
  • 基于图像插值与自适应策略的加密域可逆数据隐藏算法详解
  • 具脑磐石获亿元融资,以类脑智能路线打造具身智能2.0,抢占全球自主智能产业先机
  • 是不是已经受够了写接口?一个开发者的系统集成血泪史
  • 基于双元字符编码与身份基签名的文本水印技术:提升社交媒体安全与防篡改能力
  • 基于Transformer与BERT的可解释网络入侵检测:从数据包语义理解到自然语言描述
  • 基于自编码器的工业设备无监督异常检测:从特征工程到STM32嵌入式部署
  • 我的Arduino麦克纳姆轮小车‘活’了:从代码调试、传感器校准到解决‘幽灵转动’的全记录
  • 【ML】EM算法:从三硬币到高斯混合模型的参数估计之旅
  • Android Studio中文语言包:3分钟打造母语开发环境的完整指南
  • 双腔光纤激光器同步混沌实验:原理、搭建与LLE定量分析
  • 重仓股被深度套牢?一招摆脱深套僵局!
  • 张量环分解与自适应流形学习:高光谱图像降维与噪声标签鲁棒性解析
  • 北京办理宽带哪家服务商好?
  • SpringBoot+Vue学校学报出版发行管理系统源码+论文
  • 物理约束驱动的本构模型设计:多智能体协作架构深度分析
  • 解决CAD建模自动化难题的DeepCAD深度生成网络完全指南
  • 终极指南:如何用PyMe快速构建Python桌面应用?