目录
- 软件体系结构概述
- 概述
- 一、调用-返回风格软件体系结构
- 概念
- 代码
- 主程序-子程序软件体系结构
- 自顶向下的设计方法的问题
- 结构化设计的优缺点
- 面向对象体系结构
- 面向对象设计的优缺点
- 主程序-子程序与面向对象体系结构
- 相似
- 差异
- 课程作业
软件体系结构概述
- 调用-返回风格软件体系结构
- 数据流风格软件体系结构
- 基于事件的软件体系结构
- 层次软件体系结构
- MVC软件体系结构
概述
软件体系结构是指软件系统在高层次上的整体结构和组织方式,它定义了软件系统中各个组件的关系、交互方式以及对外部环境的接口。软件体系结构提供了一个抽象的框架,用于指导系统的设计和开发过程,并确保系统具有所需的功能、性能、可靠性和可维护性。
软件体系结构的设计通常基于系统的需求和功能要求,以及对系统的性能、可扩展性、安全性等方面的考虑。它描述了系统的整体组织结构,包括系统中的模块、组件、层次关系、通信方式、数据流和控制流等。
常见的软件体系结构模式包括:
-
分层体系结构(Layered Architecture):将系统划分为若干层次,每个层次负责不同的功能,并通过明确定义的接口进行通信。
-
客户端-服务器体系结构(Client-Server Architecture):将系统分为客户端和服务器端,客户端发送请求,服务器端处理请求并提供响应。
-
主从体系结构(Master-Slave Architecture):一个主节点负责协调和控制,多个从节点执行任务并向主节点汇报结果。
-
发布-订阅体系结构(Publish-Subscribe Architecture):组件可以发布消息,其他组件可以订阅并接收感兴趣的消息。
-
数据驱动体系结构(Data-Driven Architecture):基于数据流的驱动,组件根据输入数据的变化进行计算和处理。
-
事件驱动体系结构(Event-Driven Architecture):组件通过事件的触发和处理进行通信和协作。
软件体系结构的选择取决于系统的需求和特点,不同的体系结构模式适用于不同的应用场景。一个好的软件体系结构能够提供良好的系统结构和组织,支持系统的可扩展性、可维护性和性能要求,同时能够满足用户的功能需求和用户体验。在设计和实现过程中,需要综合考虑系统的需求、技术限制和开发团队的能力,选择适合的体系结构模式,并进行合理的划分和组织。
一、调用-返回风格软件体系结构
其主要思想是:将一个复杂的大系统分解为一些子系统,以便降低复杂度,并且增加可修改性。
概念
- 每个软件构件都设计为有一个唯一的程序执行起点和一个唯一的程序执行终点;
- 程序从其执行起点开始执行该构件的代码,程序执行结束,将控制返回给程序调用构件,
- 其中,程序构件通常叫做子程序,
- 从一个构件到另外一个构件的控制传递叫做子程序调用。
调用-返回风格体系结构可以被组织成任何形式。但层次结构的组织形式更清晰
层次结构的设计被称为共享数据的主程序-子程序软件体系结构
代码
调用-返回风格软件体系结构(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获取了返回结果。这样,通过不同组件之间的调用和返回,整个系统形成了一个协同工作的链条。
调用-返回风格软件体系结构的特点包括:
- 消息传递:组件之间通过调用和返回消息进行通信。
- 分离关注点:不同组件专注于自己的功能,通过调用其他组件来完成更复杂的任务。
- 结构化设计:系统的各个组件形成了一个有序的调用链,便于理解和维护。
- 并发执行:不同组件可以并发执行,提高系统的性能和响应能力。
调用-返回风格软件体系结构在分布式系统和并发环境中具有广泛应用,特别适用于需要协调多个组件之间的任务和数据流的场景。它提供了一种结构化的方式来管理组件之间的调用关系,使系统更具可扩展性和可维护性。
主程序-子程序软件体系结构
主程序-子程序软件体系结构在设计上使用层次化的划分方法,该体系结构中使用由编程语言直接支持的单一的控制线程。
子程序的结构是明确的,子程序通常组成程序模块。子程序的调用呈现层次状,其正确与否往往取决于其调用的子程序的正确与否。
相比于非结构化编程,主程序-子程序软件体系结构能够较好地支持系统的可改变性和可伸缩性等性能,其采用分而治之的策略
自顶向下的设计方法的问题
功能演化困难
现实中的系统功能不容易描述
功能化设计丢掉了数据与数据结构
由功能设计得到的软件产品的可复用的代码较少
结构化设计的优缺点
优点
- 逻辑设计与物理设计分离
- 开发过程中形成一套规范化的文档,便于将来修改和维护
缺点
- 开发周期长,开发过程复杂
- 系统难于适应环境变化
- 经验表明,较小的程序(小于10万行)适合于结构化开发
面向对象体系结构
封装性
继承性
多态
面向对象设计的优缺点
优点
- 容易维护
- 可复用性好
- 映射现实世界
- 容易对一个系统进行剖分
缺点
- 面向对象程序占用内存较大
- 一个对象要和另外一个对象交互,该对象必须知道另外一个对象的身份,包括对象名、方法名和参数类型等。
主程序-子程序与面向对象体系结构
相似
差异
课程作业
结构化设计、面向对象设计
结构图、