第六章 经典软件体系结构教学文案
- 格式:doc
- 大小:124.00 KB
- 文档页数:12
软件体系结构引言软件体系结构是指在软件系统中,对系统整体结构进行组织和设计的过程。
一个合理的软件体系结构能够帮助开发者降低系统的复杂度,提高系统的可维护性和可扩展性。
本文将介绍软件体系结构的基本概念和常用的体系结构模式,以及如何进行软件体系结构设计。
软件体系结构的基本概念软件体系结构是一个抽象的概念,用于描述软件系统中各个组件之间的关系和交互方式。
它主要由以下几个基本概念组成:1.组件(Component):组件是软件系统中的一个独立的功能单元,可以由一个或多个模块(Module)组成,实现特定的功能。
2.接口(Interface):接口定义了组件之间的通信方式和消息传递方式。
一个组件可以提供多个接口供其他组件使用。
3.关系(Relationship):组件之间的关系可以是依赖关系(Dependency)、关联关系(Association)、聚合关系(Aggregation)和组合关系(Composition)等。
这些关系将多个组件链接起来,形成一个组织结构。
4.架构风格(Architectural Style):架构风格定义了软件系统的整体结构的模式和约束。
常见的架构风格包括层次结构(Layered)、客户端-服务器(Client-Server)、发布-订阅(Publish-Subscribe)等。
常用的软件体系结构模式在进行软件体系结构设计时,可以借鉴一些常用的体系结构模式。
下面介绍几种常见的模式:1.层次结构(Layered):层次结构将软件系统划分为若干层,每一层负责特定的功能。
上层的组件可以调用下层的组件,反之则不行。
这种模式可以降低系统的复杂度和耦合度,提高系统的可维护性。
2.客户端-服务器(Client-Server):客户端-服务器模式将软件系统划分为客户端和服务器两个部分。
客户端负责与用户进行交互,而服务器负责处理客户端的请求并返回结果。
这种模式可以实现系统的分布式部署,提高系统的可伸缩性。
课程标准软件体系结构程细柱一、课程概述《软件体系结构》是根植于软件工程进展起来的一门新兴学科,目前差不多成为软件工程研究和实践的要紧领域。
体系结构在软件开发中为不同的人员提供了共同交流的语言,表达并尝试了系统早期的设计决策,并作为相同设计的抽象,为实现框架和构件的重用、基于体系结构的软件开发提供了有力的支持。
作为运算机科学与技术专业软件工程方向的重要专业课程,本课程要紧系统地介绍软件体系结构的差不多原理、方法和实践,全面反映软件体系结构研究和应用的最新进展。
既讨论软件体系结构的差不多理论知识,又介绍软件体系结构的设计和工业界应用实例,强调理论与实践相结合。
本课程的先修课程为“软件工程”。
二、课程目标1.明白《软件体系结构》这门学科的性质、地位、研究范畴、学科进展和以后方向等。
2.明白得该门学科的要紧概念、差不多原理和策略等。
3.把握软件体系结构的建模方法、描述方法,通过对不同软件体系结构风格的把握,能够采纳正确的基于体系结构的软件开发。
4.能够把所学的原理应用到具体的实践中去,培养学生发觉、分析和解决问题的能力等。
三、课程内容与教学要求这门学科的知识与技能要求分为明白、明白得、把握、学会四个层次。
这四个层次的一样涵义表述如下:明白———是指对这门学科和教学现象的认知。
明白得———是指对这门学科涉及到的概念、原理、策略与技术的说明和说明,能提示所涉及到的教学现象演变过程的特点、形成缘故以及教学要素之间的相互关系。
把握———是指运用已明白得的教学概念和原理说明、说明、类推同类教学事件和现象。
学会———是指能仿照或在教师指导下独立地完成某些教学知识和技能的操作任务,或能识别操作中的一样差错。
教学内容和要求表中的“√”号表示教学知识和技能的教学要求层次。
本标准中打“*”号的内容可作为自学,教师可依照实际情形确定要求或不布置要求。
教学内容及教学要求表四、课程实施《软件体系结构》是运算机软件专业类必选课。
一样情形下周课时为3课时,共54课时。
软件体系结构教学设计前言软件体系结构作为软件开发的重要组成部分,它不仅涉及到软件的设计和开发,还与软件的实现和维护密切相关。
因此,软件体系结构的教学对于培养软件开发人才至关重要。
本文将介绍软件体系结构教学的设计方法和内容。
设计目标软件体系结构教学的设计目标应该是让学生掌握软件体系结构的基本概念、原理和设计方法,具备软件体系结构设计的能力。
具体来说,设计目标包括以下几点:1.理解软件体系结构的基本概念和原理;2.掌握软件体系结构的设计方法和技巧;3.能够应用软件体系结构设计理论,进行软件体系结构的设计;4.能够评估和优化软件体系结构的质量。
教学内容软件体系结构的教学内容应该包括以下几个方面:1. 软件体系结构基础软件体系结构的基础包括软件体系结构的基本概念、原则和关键特性。
具体来说,包括软件体系结构定义、软件体系结构的抽象、软件体系结构的层次化、软件体系结构的模式和风格等。
2. 软件体系结构设计方法软件体系结构设计方法主要包括两个方面:•软件体系结构的描述方法,如用面向对象的UML语言描述软件体系结构;•软件体系结构的设计方法,如数据流图、状态转换图、组合实例图等。
3. 软件体系结构设计实践软件体系结构的设计实践是软件体系结构教学设计的重要组成部分,它能够将理论应用到实际工程中。
学生在实践中需要完成实际项目的软件体系结构设计。
4. 软件体系结构质量评估和优化软件体系结构的质量评估和优化是在软件体系结构设计的基础上进行的,它包括软件体系结构的可用性、可扩展性、可重用性、可维护性等方面的评估和优化。
教学方法针对上述教学内容,应该采用灵活多样的教学方法,包括课堂讲授、案例分析、实验操作、小组讨论等。
同时,应该从实际工程出发,注重理论和实践相结合,让学生在实践和实验中掌握知识和技能。
教学评价软件体系结构教学评价应该包括以下几个方面:•考试成绩评估,包括课堂测试、期末考试等;•实践评估,要求学生完成实际项目软件体系结构设计;•课堂表现评估,包括听课态度、回答问题、参与讨论等。
软件体系结构软件体系结构是指软件系统中各个组件之间的关系和结构的抽象描述。
它是构建软件系统的基础,对软件系统的设计和开发起着重要的指导作用。
本文将从软件体系结构的定义、目标和应用领域等方面对其进行详细的介绍。
一、软件体系结构的定义软件体系结构是指软件系统中各个组件之间的关系和结构的抽象描述,它包括软件系统的静态结构和动态行为。
静态结构是指软件系统中组件的组织方式和相互之间的关系,动态行为是指软件系统中组件的交互方式和相互之间的通信方式。
二、软件体系结构的目标软件体系结构的目标是实现软件系统的可重用性、可维护性、可扩展性和可伸缩性。
可重用性是指软件系统中的组件能够被多次使用,可维护性是指软件系统中的组件能够被轻松地修改和维护,可扩展性是指软件系统能够根据需求进行功能的扩展,可伸缩性是指软件系统能够根据需求进行性能的扩展。
三、软件体系结构的应用领域软件体系结构广泛应用于各个领域的软件系统开发,特别是大型跨平台和分布式系统的开发。
在金融领域,软件体系结构被应用于交易系统和风险管理系统的开发;在电子商务领域,软件体系结构被应用于在线购物系统和支付系统的开发;在物流领域,软件体系结构被应用于供应链管理系统和运输管理系统的开发。
四、软件体系结构的基本原则软件体系结构的设计应遵循以下基本原则:1. 模块化:将软件系统分为独立的模块,每个模块只负责特定的功能,通过接口进行通信和交互。
2. 松耦合:各个模块之间的依赖应尽量降低,避免模块之间的紧密耦合,以提高系统的灵活性和可维护性。
3. 高内聚:模块内部的各个元素之间应紧密关联,功能相关的元素应放在同一个模块中,以提高系统的内聚性。
4. 分层:将软件系统分为多个层次,每个层次负责不同的功能,上层层次通过接口调用下层层次的功能。
5. 可伸缩性:系统的设计应考虑未来的扩展需求,能够根据需求进行功能和性能的扩展。
六、软件体系结构的设计方法软件体系结构的设计方法有很多种,常用的有面向对象的体系结构设计方法、服务导向的体系结构设计方法和领域驱动设计方法。
软件体系结构范文1.分层结构:将软件系统分成多个层次,每个层次都有自己的功能和责任。
每一层都建立在下一层的基础上,并提供给上一层一种简单的接口。
这种分层结构使软件系统的各个模块之间的依赖关系变得清晰明了,易于管理和维护。
2.模块化设计:将软件系统划分为多个独立的模块,每个模块有明确的功能和职责。
每个模块可以独立开发和测试,可以通过定义清晰的接口实现模块之间的通信和协作。
3.数据流控制:确定数据在软件系统中的流向和控制方式。
通过合理地组织数据流,可以提高系统的效率和响应速度。
4.容错处理:考虑系统可能出现的各种错误和异常情况,设计相应的容错机制。
例如,通过添加冗余系统来提高系统的可靠性和可用性。
5.并发控制:考虑软件系统中可能存在的并发操作,设计相应的并发控制机制。
例如,通过加锁和事务处理来保证数据的一致性和正确性。
6.性能优化:通过合理地组织软件系统的组件和模块,优化系统的性能和资源利用率。
例如,通过缓存、异步处理和并行计算来提高系统的运行速度和吞吐量。
7.可扩展性设计:考虑软件系统在未来可能的扩展需求,设计具有良好的扩展性。
例如,通过使用插件式架构和松耦合设计来支持系统的功能扩展和组件替换。
8.可重用性设计:将软件系统的一些组件设计成可重用的模块,方便在其他系统中进行复用。
例如,通过使用设计模式和软件工程方法来提高组件的可重用性。
软件体系结构设计的目标是提供一个模块化、可维护、可扩展、高性能和可重用的软件系统。
它在软件系统的开发过程中起着重要的作用,决定了软件系统的质量和成功与否。
一个好的软件体系结构可以使软件系统更加容易理解、开发、测试和维护,提高软件开发的效率和质量。
软件设计与体系结构教案-范文模板及概述示例1:软件设计与体系结构教案引言:软件设计与体系结构是计算机科学和软件工程领域的重要学科,它涉及到软件系统的设计和开发过程中如何构建有效的软件结构和体系架构。
本文将介绍一份软件设计与体系结构的教案,旨在帮助教师教授相关的知识和技能。
一、教学目标:1. 了解软件设计和体系结构的概念和基本原理。
2. 掌握软件设计和体系结构的常用方法和技术。
3. 能够应用所学知识设计和实现一个简单的软件系统。
4. 培养学生的团队协作和项目管理能力。
二、教学内容:1. 软件设计基础:- 软件设计概述- 软件开发生命周期- 需求分析与规格说明- 软件设计原则和准则2. 软件体系结构:- 概述和定义- 模块化和分层设计- 客户端-服务器架构- 分布式系统设计- 微服务架构- 云计算和大数据处理3. 软件设计模式:- 设计模式概述- 创建型模式:工厂模式、单例模式等- 结构型模式:适配器模式、装饰者模式等- 行为型模式:观察者模式、策略模式等4. 软件设计工具和环境:- UML建模工具- 代码编辑器和集成开发环境- 版本控制工具三、教学方法:1. 授课讲解:教师通过授课讲解软件设计和体系结构的基本概念和原理,引导学生理解和掌握相关知识。
2. 实例分析:教师提供一些实际的软件系统案例,帮助学生分析和理解不同的软件设计和体系结构方法。
3. 小组讨论:学生分组进行讨论和合作,在教师的引导下,通过讨论和交流来完成一些案例分析和设计任务。
4. 实践项目:要求学生团队合作,根据所学知识设计和实现一个简单的软件系统,并撰写相关的设计文档和报告。
四、教学评估:1. 课堂参与和问题解答:评估学生对教学内容的理解和掌握程度。
2. 小组讨论和案例分析报告:评估学生在小组讨论和实例分析中的合作和表现。
3. 软件系统设计和实现:评估学生团队合作和项目管理能力,以及对软件设计和体系结构的应用能力。
五、教学资源:1. 教科书:提供相关的软件设计和体系结构教材。
软件工程6 软件体系结构在当今数字化的时代,软件已经成为我们生活和工作中不可或缺的一部分。
从智能手机上的各种应用程序,到企业内部复杂的业务系统,软件的质量和性能直接影响着用户的体验和业务的效率。
而软件体系结构作为软件工程中的一个重要领域,对于软件的成功开发和维护起着至关重要的作用。
那么,什么是软件体系结构呢?简单来说,软件体系结构就是软件系统的高层结构和组织方式。
它描述了软件系统中的组件、组件之间的关系以及它们如何协同工作来实现系统的功能。
就好比盖房子,软件体系结构就是房子的设计蓝图,决定了房子的布局、结构和各个部分的连接方式。
一个好的软件体系结构具有许多重要的特性。
首先,它应该具有可扩展性。
随着业务的发展和用户需求的变化,软件系统需要能够方便地进行功能的增加和修改。
如果体系结构设计得不合理,可能会导致在添加新功能时牵一发而动全身,需要对整个系统进行大规模的重构,这不仅费时费力,还可能引入新的错误。
其次,软件体系结构应该具有高可靠性和容错性。
软件系统在运行过程中难免会遇到各种故障和错误,一个良好的体系结构能够确保系统在出现部分故障时仍能继续运行,或者能够快速地从错误中恢复,从而保证系统的稳定性和可用性。
再者,性能也是软件体系结构需要考虑的重要因素。
这包括系统的响应时间、吞吐量、资源利用率等方面。
通过合理的体系结构设计,可以优化系统的性能,提高系统的运行效率,满足用户对于系统速度和效率的要求。
软件体系结构的设计过程并不是一蹴而就的,它需要综合考虑多种因素。
首先,要对系统的需求进行深入的分析和理解。
这包括了解系统的功能需求、性能需求、安全需求等。
只有清楚地知道系统需要做什么,才能设计出合适的体系结构。
在需求分析的基础上,选择合适的体系结构风格也是非常关键的一步。
常见的体系结构风格有分层架构、客户端服务器架构、微服务架构等。
每种风格都有其特点和适用场景,例如分层架构将系统分为不同的层次,每层完成特定的功能,具有结构清晰、易于维护的优点;客户端服务器架构则适用于分布式环境下的系统,能够有效地实现资源共享和负载均衡;微服务架构则将系统拆分成多个独立的服务,每个服务可以独立开发、部署和扩展,提高了系统的灵活性和可扩展性。
软件体系结构
软件体系结构(Software architecture,软件架构)为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。
软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。
对于软件项目的开发来说,一个清晰的软件体系结构是首要的。
传统的软件开发过程可以划分为从概念直到实现的若干个阶段,包括问题定义、需求分析、软件设计、软件实现及软件测试等。
软件体系结构的建立应位于需求分析之后,软件设计之前。
但在传统的软件工程方法中,需求和设计之间存在一条很难逾越的鸿沟,从而很难有效地将需求转换为相应的设计。
而软件体系结构就是试图在软件需求与软件设计之间架起一座桥梁,着重解决软件系统的结构和需求向实现平坦地过渡的问题。
软件体系结构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性。
软件体系结构使推理和控制更改更简单,有助于循序渐进的原型设计,可以作为培训的基础。
软件体系结构是可传递和可复用的模型,通过研究软件体系结构可能预测软件的质量。
软件工程中的软件体系结构软件体系结构是软件工程中的一个重要概念,用于描述和组织软件系统的架构和结构。
在软件工程领域,软件体系结构是实现软件功能和满足软件质量要求的基础。
本文将介绍软件体系结构的定义、重要性和常见的体系结构模式。
一、软件体系结构的定义软件体系结构是软件系统的总体结构和组织方式,用于描述系统各个组成部分之间的关系、交互和功能。
它包括系统中的各个模块(或组件)以及它们之间的接口和依赖关系。
软件体系结构还定义了系统的整体框架、分层结构、数据流和控制流。
软件体系结构的目标是将复杂的软件系统分解成可管理的模块,提高系统的可维护性、可扩展性和可重用性。
它是软件开发过程中的一个关键决策,能够影响到系统的性能、安全性和可靠性。
二、软件体系结构的重要性1. 提高软件开发效率:软件体系结构将系统分解成各个模块,使开发团队能够并行开发、测试和集成各个模块,从而提高开发效率。
2. 促进软件重用:通过定义模块和接口,软件体系结构能够促进软件的重用,减少开发时间和成本。
3. 支持系统演化:软件系统需要不断演化,软件体系结构能够提供系统框架和接口,使系统能够方便地进行修改和扩展。
4. 提高系统的可维护性:良好的软件体系结构能够降低系统维护的难度,使开发人员能够快速定位和修复问题。
三、常见的软件体系结构模式1. 分层体系结构:将系统分成若干层层叠加的模块,每一层只和相邻的层进行交互。
这种模式可以提高系统的灵活性和可维护性,但同时也增加了系统的复杂度。
2. 客户-服务器体系结构:将系统分成客户端和服务器端,客户端发送请求给服务器端,服务器端提供相应的服务并返回结果。
这种模式适用于分布式系统和网络应用开发。
3. 主从体系结构:将系统分成一个主节点和多个从节点,主节点负责协调和管理从节点的工作。
这种模式适用于负载均衡和并行计算等场景。
4. 流水线体系结构:将系统分成多个阶段,每个阶段负责完成一部分工作并将结果传递给下一个阶段。
软件工程软件体系结构1. 引言软件体系结构是软件工程领域中一个重要的概念,它描述了一个软件系统的整体结构和组成部分之间的关系。
软件体系结构的设计和实现对于软件系统的可维护性、可扩展性和可重用性等方面具有重要影响。
本文将介绍软件体系结构的基本概念、常见的体系结构类型以及设计和评估软件体系结构的方法。
2. 软件体系结构的基本概念软件体系结构是一个软件系统的抽象表示,它描述了系统的组成部分和它们之间的关系。
一个软件体系结构可以包含多个子系统或模块,每个子系统或模块负责系统的某个特定功能。
软件体系结构可以采用不同的视角进行描述,例如逻辑视图、物理视图和过程视图。
在软件体系结构中,常见的概念和术语包括模块、接口、组件、连接器和配置。
模块是软件系统的基本构建单元,它封装了特定的功能和实现细节。
接口定义了模块之间的通信方式和协议。
组件是一个可重用的软件单元,它可以被多个模块使用。
连接器用于连接不同的组件和模块,实现模块之间的通信。
配置描述了系统中各个组件和模块的布局和拓扑结构。
3. 常见的软件体系结构类型在软件工程中,有多种常见的软件体系结构类型,每种类型都具有不同的特点和适用场景。
下面介绍几种常见的软件体系结构类型。
3.1 分层体系结构分层体系结构是一种将系统分成多个层次的结构,每个层次负责系统中的不同功能。
不同层次之间通过接口进行通信。
分层体系结构的优点是简化了系统的设计和维护,提高了系统的可扩展性和可重用性。
3.2 客户端-服务器体系结构客户端-服务器体系结构是一种将系统分成客户端和服务器的结构,客户端负责用户界面和用户交互,服务器负责数据处理和业务逻辑。
客户端通过网络与服务器进行通信。
客户端-服务器体系结构的优点是可以实现分布式计算和集中管理,缺点是系统的性能受限于网络的带宽和延迟。
3.3 事件驱动体系结构事件驱动体系结构是一种通过事件和消息进行通信的结构,不同组件之间通过发布和订阅事件来实现解耦和异步处理。
软件工程软件体系结构软件体系结构是软件系统的基础和框架,通过定义系统的组织方式、模块的划分和组件之间的关系,来指导软件的开发和维护。
一个好的软件体系结构有助于降低系统的复杂性,提高系统的灵活性和可维护性。
软件体系结构的设计是软件工程中最重要的环节之一、一个好的软件体系结构应该满足以下几个方面的要求:1.清晰的组织结构:软件体系结构应该能够清晰地划分系统的各个部分和模块,使得开发人员能够理解和掌握整个系统的结构和功能。
2.低耦合高内聚:软件体系结构应该尽量减少模块之间的相互依赖,使得系统的各个部分可以独立开发和测试,并且方便后续的维护和修改。
3.可重用性:软件体系结构应该鼓励组件的复用,使得软件开发过程中能够更加高效和快速地引入已有的组件和功能。
4.易于扩展和修改:软件体系结构应该具有良好的可扩展性和可修改性,方便后续的需求变更和功能扩展。
在具体的软件体系结构设计中,可以采用不同的方法和模式来实现上述要求。
1.分层结构:将整个软件系统划分为多个层次,每个层次负责实现一部分功能。
各个层次之间通过接口进行通信,实现模块之间的解耦。
常见的分层结构有MVC模式、三层架构等。
2.模块化结构:将软件系统划分为多个模块,每个模块负责实现一个相对独立的功能。
各个模块之间通过接口进行通信,实现模块之间的解耦。
常见的模块化结构有面向对象的设计、微服务架构等。
3.客户端-服务器结构:将软件系统划分为客户端和服务器两部分,客户端负责用户接口和展示逻辑,服务器负责业务逻辑和数据处理。
通过网络进行通信,实现前后端的分离和解耦。
4.中间件结构:采用中间件来实现软件系统的组织和管理,通过中间件层来进行系统的整合和协调。
常见的中间件结构有消息队列、分布式缓存等。
在软件体系结构设计的过程中,需要综合考虑系统的需求、业务逻辑和技术限制等因素,选择最适合的结构模式。
此外,还需要进行不断的迭代和优化,以适应系统的演化和发展。
总之,软件工程软件体系结构是软件系统开发中的基础和框架,能够帮助开发人员更好地组织、管理和维护软件系统。
第六章经典软件体系结构第六章经典软件体系结构本章介绍经典的软件体系结构,主要包括Mary Shaw等人所总结的一些软件体系结构分格。
众所周知,计算机学科历史较短,因此,软件架构的研究历史更短。
本章所谓的经典软件体系结构也仅仅是指在20世纪80年代至21世纪初期间提出的成功的软件体系结构。
本章将介绍调用-返回分格软件体系结构、数据流风格软件体系结构、基于事件的软件体系结构、层次软件体系架构与MVC 软件体系结构。
6.1 调用-返回风格软件体系结构相对于一些基础学科,计算机学科的发展历史较短。
20世纪50年代才出现了适合商业应用的软件开发语言。
软件设计与开发也经历了从初级到高级的历程。
回顾历史,从20世纪50年代到60年代末,属于非结构化简单程序开发阶段,软件设计方面采用简单程序模型,典型的开发语言Algol(1958)、COBOL(1959)和Basic(1964);从20世纪70年代初到80年代初,属于结构化设计编程阶段,典型的开发语言有Pascal(1968)、C(1972)、FORTRAN和Perl。
虽然从20世纪60年代开始就有了面向对象概念的讨论,但是直到20世纪80年代初正式开始才面向对象设计编程阶段,就有了代表性的面向对象软件开发语言包括SmallTalk、Ada、C++(1983)和Java(1995)。
本节首先简要回顾非结构化编程,然后介绍对软件设计有重要的影响的调用-返回风格软件体系结构,重点介绍其中的主程序 - 子程序软件体系结构与面向对象软件体系结构,并对它们进行讨论。
6.1.1 非结构化编程简介非结构化编程技术是历史上最早的编程范型。
紧随其后的是结构化设计/编程技术与面向对象设计/编程技术。
一个由非结构化语言编写的程序通常包含一系列有序的命令,或者称为语句,通常是每个语句占一行,每行都有标记一个行号或者可能是标签。
这样做的目的事允许程序执行流可以依据行号从一行跳到程序的其他指定的行。
支持非结构化编程的语言包括早期的BASIC与COBOL。
非结构化编程引入基本的循环、分支与跳跃等控制流的概念。
在非结构化编程中,虽然出现了较为原始的子程序的概念,但其与结构化编程中过程(Procedure)的概念有本质的区别。
非结构化编程中的子程序允许有多个入口和多个出口,理论上允许程序在任何地方转入子程序或退出子程序,而在这结构化编程中是不允许的。
虽然非结构化编程所编写的程序很难理解,并且经常遭到批评,但是早期的银行与金融机构软件代码都是由非结构化编程语言(例如COBOL)写的。
目前,非结构化编程已成为历史,现在很少使用(除了有些银行与金融业企业仍然使用COBOL进行开发,但和早期的版本相比有了很多改善,例如COBOL 97包括常规改善并且具备了面向对象的特征),因此本节将不把注意力放在非结构化编程方面,而主要介绍采用结构化设计方法的主程序-子程序软件体系结构与采用面向对象设计方法的面向对象软件体系结构。
在介绍这两种软件体系结构以前,首先介绍调用-返回风格的体系结构的概念。
6.1.2 调用-返回风格软件体系结构的概念调用-返回风格体系结构(Call and Return Architecture)是在过去的30年内具有深远影响的软件体系结构。
本节要介绍的共享数据的主程序-子程序体系结构与面向对象体系结构可以被认为是调用-返回风格体系结构的子类型。
因此,熟悉调用-返回风格架构对于理解这两个体系结构有重大意义。
利用调用 - 返回风格软件体系结构设计的软件系统使用的是分而治之策略,其主要的思想是将一个复杂的大系统分解为一些子系统,以便降低复杂度,并且增加可修改性。
这种系统的程序执行顺序通常只由一个单线程控制。
例如,一个软件架构C,只有从另外一个调用者软件构件B得到控制以后,才能执行该构件C的程序;当运行结束以后,将控制返回给软件构件B。
该程序的运行控制流如图6.1所示。
图中的长箭头可以理解为是一个程序构件对另外一个构件的调用,而短箭头为程序运行控制流的走向,这也就是名称“调用-返回”的由来。
图6.1 调用-返回风格软件体系结构大的程序运行控制流示意图每个软件构件都设计为有一个唯一的程序执行起点和唯一的程序执行终点,或者称为程序执行入口和程序执行出口。
程序从其执行入口开始执行该构件的代码,运行至该构件的程序执行的出口,然后程序执行结束,而将控制返回给程序调用构件。
上述程序构件通常叫做子程序(Subroutine),从一个构件到另外一个构件的控制传递叫做子程序调用(Call)。
子程序调用程序都有参数传递。
拥有整个软件入口的构件叫做主程序(Main Program),它控制子程序的执行顺序。
在这种风格的系统中,也可能有一些被动的数据构件,其中存储供子程序的访问的共享数据。
可以被所有软件构件访问的共享数据被称为全局变量。
这种调用-返回风格体系结构的组织与执行的动态控制可以由高级程序语言的过程(Procedure)、函数(Function)或者方法(Method)来实现。
调用-返回风格架构可以被组织成任何形式,例如,可以将程序设计为如图6.2所示的结构图。
在该图中,箭头代表调用,方块内有“S ub”字样的是子程序,有“Global Date”字样的为数据构件。
图6.2设计的逻辑关系比较复杂,因此,通常人们往往喜欢将其组织成如图6.3所示的层次结构。
这样组织成层次结构的调用-返回风格架构设计叫做共享数据的主程序-子程序软件体系架构,其原因是在调用-返回体系结构中包括一个控制其他组件的主程序,该程序选择调用在其下层的软件组件(模块、函数),而该软件组件又往往调用其下层的软件组件。
每次调用都执行一个子任务,并且返回一个值。
主程序-子程序体系结构是较早出现的软件体系结构。
以上介绍的调用-返回风格软件体系结构对于理解当今流行软件体系结构有着重要的意义。
下面将分别介绍该软件体系结构下的主程序-子程序软件体系结构与面向对象软件体系结构。
6.1.3 主程序-子程序软件体系结构主程序-子程序软件体系结构在设计上使用层次化的划分方法,该体系结构中使用由编程语言直接支持的单一的控制线程。
子程序的结构是明确的,子程序通常组成程序模块。
子程序的调用呈现层次状,其正确与否往往取决于其调用的子程序的正确与否。
主程序-子程序软件体系结构图如吐6.3所示。
图6.3 共享数据的在主程序-子程序软件体系结构和非结构编程比较,主程序-子程序软件体系结构能够较好地支持系统的可改变性及可伸缩性等性能。
由于该体系结构采用了分而治之策略,将一个复杂问题分解为多个独立的子问题,从而实现了对系统分复杂度的有效控制。
C 语言开发程度即属于典型的主程序-子程序风格的软件体系结构。
C 语言开发的程序通常包括一个main 函数(即主程序)和一些自定义的函数(即子程序)。
主程序-子程序体系结构中典型地存在一个控制线程,每个阶层的组件从其父组件得到该控制并且通过它传给它的子组件。
使用主程序-子程序软件体系结构的设计通常采用如图6.4所示的自顶向下的功能化设计方法。
图6.4 自顶向下的的功能化设计方法自顶向下功能化设计方法的设计思想是,系统从功能的角度进行设计,从高层开始,逐步细化为详细的设计。
该设计从系统要完成的功能需求出发,首先将一个整体问题(功能)分为几个子问题(子功能),然后再考虑将每个子问题(子功能)再次划分为几个更小的子问题(子功能),依次下去,直到不可再分为止。
通过这样的设计,得到一颗如图6.4所示的根朝上的树形结构,其中,每个节点都是一个子程序。
可以理解为系统的功能可以由多个子程序完成。
高层子程序调用低层子程序,而低层主程序又调用比它更低的子程序,等等。
结构化程序设计得到了广泛的应用,例如阿波罗11号的地面控制系统的子系统Apollo Reentry Runge–Kutta数值集成器软件采用结构化程序设计,利用FORTRAN语言开发,在当时最快的计算机IBM 360 -75上运行。
结构化设计从数据流图开始,然后将数据流图转换为程序结构图(Structured Chart)。
设计数据流图从数据输入开始,对数据的各个处理过程以及最后的输出进行描述;将提供给用户的业务流程图(”物理模型”)进行功能建模,转化成开发人员更易理解的一系列”逻辑模型”图,以图形化的方法描绘数据在系统中的流动和处理过程。
这些图需要用规范的DFD描述,达到系统在建立前有关信息就能被充分理解的目的。
在设计时要求严格划分开发阶段,用规范的方法与图表工具精确的描述各阶段的工作,每个阶段都以规范是哪个的文档资料作为其成果,最终得到满足用户需要的系统。
相对于非结构化的设计,结构化设计有以下优点。
(1)逻辑设计与物理设计分开。
(2)开发过程中形成一套规范的文档,以便后期修改和维护。
结构化设计的缺点为开发周期长,系统难以适应环境的变化以及开发过程复杂繁琐。
结构化设计适用于组织相对稳定、业务处理过程规范、需求明确且在一定时期内不坏发生大的变化的大型复杂系统的开发,经验表明,当程序小于10万行时,结构化的程序设计比较成功。
当程序大于10万行时,结构化程序表现不加,原因是当程序规模非常大时,程序代码编写耗时长,软件测试变得越来越困难,难以保证软件的可靠性。
自顶向下的程序设计方法存在如下问题。
(1)功能烟花困难。
自上而下的方法穿件了符合最初的需求的较好的软件系统模型。
但是当系统改变或者增加新的需求是,功能结构变得越来越笨拙。
由于软件被设计为树形结构,修改与更新,通常要求广泛的“剪枝”与“嫁叶”,使系统维护变得越来越困难。
(2)现实中的系统功能不容易描述。
大型加护系统很难从功能方面进行刻画。
很多大型系统没有“顶部”,例如,一个涉及数据查询、数据改变与保持数据一致性的软件系统,如果按照功能化自向下的设计,则该系统可能被设计为一个基于一个唯一的“虚拟”顶点并且会产生非常复杂的结构。
(3)功能化设计丢掉了数据与数据结构。
自顶向下设计中捕捉不到所设计软件涉及的数据,通常,同样的数据被多个函数共享(如更新、删除、插入和询问数据库表)。
因为系统分解只突出问题的功能方面,数据结构对问题的影响被丢失了。
(4)由于功能设计得到的软件产品产生的可复用代码较少。
自顶向下的设计连续不断的将系统分为越来越简单的程序模块。
每个程序块被单独地分析确认,没有太多地考虑系统的其他部分。
但是每个程序单元的设计都仅仅考虑极为有限的需求,因为这些特定的需求不太可能出现于下个问题,所以产生的设计与代码没有普遍性与通用性,从而通常不可复用。
6.1.4 面向对象的软件体系结构在结构化设计以及编程中,简单的程序可以由一个主程序中的一系列语句组成的一个较长的文件代表,而在负载的程序中,通过子程序或者函数执行一些特定的任务。