第六章 经典软件体系结构
软件体系结构

软件体系结构引言软件体系结构是指在软件系统中,对系统整体结构进行组织和设计的过程。
一个合理的软件体系结构能够帮助开发者降低系统的复杂度,提高系统的可维护性和可扩展性。
本文将介绍软件体系结构的基本概念和常用的体系结构模式,以及如何进行软件体系结构设计。
软件体系结构的基本概念软件体系结构是一个抽象的概念,用于描述软件系统中各个组件之间的关系和交互方式。
它主要由以下几个基本概念组成:1.组件(Component):组件是软件系统中的一个独立的功能单元,可以由一个或多个模块(Module)组成,实现特定的功能。
2.接口(Interface):接口定义了组件之间的通信方式和消息传递方式。
一个组件可以提供多个接口供其他组件使用。
3.关系(Relationship):组件之间的关系可以是依赖关系(Dependency)、关联关系(Association)、聚合关系(Aggregation)和组合关系(Composition)等。
这些关系将多个组件链接起来,形成一个组织结构。
4.架构风格(Architectural Style):架构风格定义了软件系统的整体结构的模式和约束。
常见的架构风格包括层次结构(Layered)、客户端-服务器(Client-Server)、发布-订阅(Publish-Subscribe)等。
常用的软件体系结构模式在进行软件体系结构设计时,可以借鉴一些常用的体系结构模式。
下面介绍几种常见的模式:1.层次结构(Layered):层次结构将软件系统划分为若干层,每一层负责特定的功能。
上层的组件可以调用下层的组件,反之则不行。
这种模式可以降低系统的复杂度和耦合度,提高系统的可维护性。
2.客户端-服务器(Client-Server):客户端-服务器模式将软件系统划分为客户端和服务器两个部分。
客户端负责与用户进行交互,而服务器负责处理客户端的请求并返回结果。
这种模式可以实现系统的分布式部署,提高系统的可伸缩性。
软件体系结构

这种系统主要适用于控制系统,信息管理系 统,CAD系统,CASE工具集。
13
集成的CASE工具集的体系结构 以数据仓库为核心
设计编辑器
代码生成器
设计翻译器
项目数据仓库
程序编辑器
设计分析器
报告生成器
14
这种体系结构包括数据库、超文本系统及数 据黑板系统等。它包含两种成分:一是共享 的结构化数据;二是所有访问这些数据的操 作。
集中控制模型分为两类: 控制子系统顺序执行 控制子系统并发执行
作为集中控制器的子系统在将控制转交给另 一子系统后,该子系统完成它的功能后控制 权还要归还给集中控制器子系统。
33
(1)调用-返回模型 (Call-Return model)
此即熟悉的自顶向下的子程序模型。 控制始于子程序层次的顶部,通过子程序调
用,从层次结构较高层的程序向较低层的程 序传递控制信息。程序执行结束将向较高层 的父程序返回。 这种程序模型仅应用于顺序系统。 该模型可以在模块层使用,以控制函数或对 象。
34
控制的Call-Return模型
Main Program
Routine Routine Routine
1
2
3
Routine Routine
6
4) 控制构件: 管理其它构件运行的时间、时 机及次序。例如,调度器、同步器等。
5) 链接构件: 在实体之间传递信息。例如, 通信机制、用户界面等。
1.5 构件之间的连接方式
1) 过程调用: 在某一特定执行路径中传递执行 指针。如普通过程调用、远程过程调用。
2) 数据流: 相互独立的处理通过数据流进行交 互,在得到数据的同时被赋予控制权限。 如 UNIX 系统中的管道。
第六章软件体系结构与设计模式

第六章软件体系结构与设计模式软件体系结构是指通过一组组件和它们之间的关系来描述一个软件系统的结构。
它是软件开发过程中的关键环节,可帮助开发人员更好地理解系统的组织方式以及各组件之间的通信和互动方式。
设计模式则是对常见问题的解决方案的抽象和总结,是一些经过验证的最佳实践。
本章主要介绍软件体系结构和设计模式的基本概念、原则以及常见的几种设计模式。
软件体系结构主要包括四个层次:结构模式、构件和连接模式、框架和架构模式、全局属性。
结构模式主要描述系统中各组件的静态结构,如类图、对象图等。
构件和连接模式关注系统中各组件的互动方式和通信方式。
框架和架构模式描述一些场景或领域中的通用的、可复用的体系结构模式。
全局属性则是描述整个系统的重要属性,如性能、可扩展性等。
设计模式是对常见问题的解决方案的抽象和总结,是一些经过验证的最佳实践。
常见的设计模式包括:创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)、结构型模式(适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式)、行为型模式(模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式)。
在实际的软件开发过程中,使用软件体系结构和设计模式可以带来一系列的好处。
首先,软件体系结构可以帮助开发人员更好地理解系统的组织方式,减少开发过程中的沟通成本。
其次,设计模式提供了一种经过验证的最佳实践,可以避免重复造轮子,提高开发效率。
再次,软件体系结构和设计模式可以提高系统的可维护性和可扩展性,降低系统的复杂度。
最后,软件体系结构和设计模式可以提高系统的重用性,减少代码的冗余。
总之,软件体系结构和设计模式是软件开发过程中非常重要的两个环节。
通过使用软件体系结构和设计模式可以提高系统的可维护性、可扩展性和重用性,降低系统的复杂度,提高开发效率。
因此,在实际的软件开发过程中,开发人员应该充分认识到软件体系结构和设计模式的重要性,并灵活应用于实际项目中。
软件体系结构整理

1.软件体系结构建模的种类◎结构模型◎框架模型◎动态模型◎过程模型◎功能模型2.4+1模型4+1视图模型从5个不同的视角包括逻辑视图、进程视图、物理视图、开发视图和场景视图来描述软件体系结构。
每一个视图只关心系统的一个侧面,5个视图结合在一起才能反映系统的软件体系结构的全部内容。
逻辑视图:逻辑视图主要支持系统的功能需求,即系统提供给最终用户的服务。
在逻辑视图中,系统分解成一系列的功能抽象,这些抽象主要来自问题领域。
这种分解不但可以用来进行功能分析,而且可用作标识在整个系统的各个不同部分的通用机制和设计元素。
在面向对象技术中,通过抽象、封装和继承,可以用对象模型来代表逻辑视图,用类图来描述逻辑视图。
要保持单一内聚的对象模型开发视图开发视图也称模块视图,主要侧重于软件模块的组织和管理。
开发视图要考虑软件内部的需求,如软件开发的容易性、软件的重用和软件的通用性,要充分考虑由于具体开发工具的不同而带来的局限性。
开发视图通过系统输入输出关系的模型图和子系统图来描述。
在开发视图中,最好采用4-6层子系统,而且每个子系统仅仅能与同层或更低层的子系统通讯,这样可以使每个层次的接口既完备又精练,避免了各个模块之间很复杂的依赖关系。
设计时要充分考虑,对于各个层次,层次越低,通用性越强,这样,可以保证应用程序的需求发生改变时,所做的改动最小。
开发视图所用的风格通常是层次结构风格。
进程视图进程视图侧重于系统的运行特性,主要关注一些非功能性的需求。
进程视图强调并发性、分布性、系统集成性和容错能力,以及从逻辑视图中的主要抽象如何适合进程结构。
它也定义逻辑视图中的各个类的操作具体是在哪一个线程中被执行的。
进程视图可以描述成多层抽象,每个级别分别关注不同的方面。
在最高层抽象中,进程结构可以看作是构成一个执行单元的一组任务。
它可看成一系列独立的,通过逻辑网络相互通信的程序。
它们是分布的,通过总线或局域网、广域网等硬件资源连接起来。
软件体系结构

软件体系结构在软件开发过程中,软件体系结构是一个至关重要的概念。
软件体系结构是指软件系统中的各个组件、模块和它们之间的关系。
一个优秀的软件体系结构可以提高软件系统的可维护性、可扩展性和可重用性,同时也有利于降低开发成本和提高软件质量。
软件体系结构的定义软件体系结构是指软件系统中各个部分相互之间的组织方式。
它包括软件系统中的组件、组件之间的关系,以及这些组件和关系在整体上所形成的结构。
软件体系结构描述了软件系统的整体结构,以及各个组件之间的相互作用。
软件体系结构的重要性软件体系结构在软件开发过程中起着至关重要的作用。
一个良好的软件体系结构可以帮助开发人员更好地理解软件系统的结构和设计,从而更容易进行软件开发、测试、部署和维护。
此外,良好的软件体系结构还可以提高软件系统的性能、可靠性和安全性,降低软件开发和维护的成本。
软件体系结构的组成一个软件系统的体系结构通常由以下几个组成部分组成:1.组件(Components):软件系统中的各个部分。
2.接口(Interfaces):组件之间进行通信和交互的方式。
3.关系(Relationships):描述组件之间的依赖关系,如依赖、引用、调用等。
4.约束(Constraints):对组件之间交互的限制条件。
5.配置(Configurations):软件系统中各个组件的布局和部署方式。
软件体系结构的类型软件体系结构可以分为多种类型,常见的软件体系结构包括:•分层体系结构:软件系统按层次结构组织,每一层负责不同的功能。
•客户端-服务器体系结构:软件系统分为客户端和服务器,客户端负责用户界面,服务器负责处理业务逻辑。
•面向服务的体系结构:软件系统以服务为中心,各个组件之间通过服务进行通信和交互。
•事件驱动体系结构:软件系统通过事件进行通信和控制。
•管道和过滤器体系结构:软件系统通过一系列过滤器进行数据处理。
软件体系结构的设计原则在设计软件体系结构时,需要遵循一些设计原则,以确保软件系统的质量和可维护性:1.模块化:将软件系统划分为多个独立的模块,每个模块负责一个特定的功能。
软件体系结构

1、MVC(模型-视图-控制):针对用户界面 模型:核心数据封装、逻辑和功能的计算,它独立于具体的界面表达和输入/输出操作。 视图:把模型数据等信息以特定形式展示给用户。 控制:处理用户与软件的交互操作。它接受用户的输入,将输入反馈给模型,进而实现对模 型的计算控制,是使模型和视图协调工作的部件。
2、软件重用的定义 软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相近软件元素的过程。 可重用软件元素越大,重用粒度越大。
7、基于事件的隐式调用的定义 基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事 件。系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调 用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一个模块中过程的调用。
8、基于事件的隐式调用的优缺点 优点: (1)为软件重用提供了强大的支持。 (2)为系统带来了方便。
end Attendห้องสมุดไป่ตู้e;
16、C2 对体系结构的描述 architecture MeetingScheduler is
conceptual_components Attendee;ImportantAttendee;MeetingInitiator;
connector connector MainConn is message_filter no_filtering; connector AttConn is message_filter no filtering; connector ImportantAttConn is message_filter no filtering;
软件体系结构

软件体系结构软件体系结构是指软件系统中各个组件之间的关系和结构的抽象描述。
它是构建软件系统的基础,对软件系统的设计和开发起着重要的指导作用。
本文将从软件体系结构的定义、目标和应用领域等方面对其进行详细的介绍。
一、软件体系结构的定义软件体系结构是指软件系统中各个组件之间的关系和结构的抽象描述,它包括软件系统的静态结构和动态行为。
静态结构是指软件系统中组件的组织方式和相互之间的关系,动态行为是指软件系统中组件的交互方式和相互之间的通信方式。
二、软件体系结构的目标软件体系结构的目标是实现软件系统的可重用性、可维护性、可扩展性和可伸缩性。
可重用性是指软件系统中的组件能够被多次使用,可维护性是指软件系统中的组件能够被轻松地修改和维护,可扩展性是指软件系统能够根据需求进行功能的扩展,可伸缩性是指软件系统能够根据需求进行性能的扩展。
三、软件体系结构的应用领域软件体系结构广泛应用于各个领域的软件系统开发,特别是大型跨平台和分布式系统的开发。
在金融领域,软件体系结构被应用于交易系统和风险管理系统的开发;在电子商务领域,软件体系结构被应用于在线购物系统和支付系统的开发;在物流领域,软件体系结构被应用于供应链管理系统和运输管理系统的开发。
四、软件体系结构的基本原则软件体系结构的设计应遵循以下基本原则:1. 模块化:将软件系统分为独立的模块,每个模块只负责特定的功能,通过接口进行通信和交互。
2. 松耦合:各个模块之间的依赖应尽量降低,避免模块之间的紧密耦合,以提高系统的灵活性和可维护性。
3. 高内聚:模块内部的各个元素之间应紧密关联,功能相关的元素应放在同一个模块中,以提高系统的内聚性。
4. 分层:将软件系统分为多个层次,每个层次负责不同的功能,上层层次通过接口调用下层层次的功能。
5. 可伸缩性:系统的设计应考虑未来的扩展需求,能够根据需求进行功能和性能的扩展。
六、软件体系结构的设计方法软件体系结构的设计方法有很多种,常用的有面向对象的体系结构设计方法、服务导向的体系结构设计方法和领域驱动设计方法。
软件体系结构

软件体系结构随着计算机科学和技术的不断发展,软件开发也越来越重要。
软件体系结构是软件开发中非常关键的一环。
它是指软件系统中各组件之间的关系和交互方式的一种描述方式。
软件体系结构不仅仅是软件系统的设计,还涉及到软件系统的架构、组件、模式等多方面的内容。
软件体系结构的定义软件体系结构是指软件设计时所考虑到的系统结构和组件之间的关系,以及它们之间的交互方式和通信方式。
它是软件系统设计的基础,可以帮助程序员们更好地规划和管理整个项目。
在实际开发过程中,软件体系结构可以将软件系统划分为若干个独立的部分,每个部分可以独立开发,最终组合成一个完整的软件系统。
软件体系结构的重要性软件体系结构在软件开发生命周期的各个阶段都会发挥重要作用。
它可以帮助软件开发者们更清楚地定义系统范围、确定模块之间的关系、减少冲突和风险等。
此外,软件体系结构还可以帮助软件开发者预测系统的变化,让系统更加易维护和扩展。
软件体系结构的种类软件体系结构可以根据不同的标准进行分类。
下面介绍几种常见的分类方式。
1. 根据结构组织按照软件系统的结构组织方式来分类,可以分为:层次体系结构、客户/服务器体系结构、面向对象体系结构等。
层次体系结构将软件系统划分为若干个层次,每个层次尽量保持独立,每个层次只依赖于下一层次,不依赖于上一层次。
这种体系结构的好处是简单易懂,可维护性高。
客户/服务器体系结构是指将软件系统分为服务器端和客户端两部分。
服务器提供各种服务,客户端通过调用服务器端提供的服务来实现自己的功能。
这种体系结构的好处是扩展性好,因为只要增加一台服务器就可以为更多的客户端提供服务。
面向对象体系结构是指将软件系统看成是若干个对象的集合。
每个对象有一些属性和方法,它们之间可以相互调用来完成一些功能。
这种体系结构的好处是维护性好,因为不同对象之间的关系比较简单清晰。
2. 根据数据流方向按照数据流的方向来分类,可以分为:单向体系结构、双向体系结构。
单向体系结构是指软件系统在数据流的传递方向上是单向的,只有一个方向。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
虽然非结构化编程所编写的程序很难理解,并且经常遭到批评,但是早期的银行与金融机构软件代码都是由非结构化编程语言(例如COBOL)写的。
(3)功能化设计丢掉了数据与数据结构。自顶向下设计中捕捉不到所设计软件涉及的数据,通常,同样的数据被多个函数共享(如更新、删除、插入和询问数据库表)。因为系统分解只突出问题的功能方面,数据结构对问题的影响被丢失了。
(4)由于功能设计得到的软件产品产生的可复用代码较少。自顶向下的设计连续不断的将系统分为越来越简单的程序模块。每个程序块被单独地分析确认,没有太多地考虑系统的其他部分。但是每个程序单元的设计都仅仅考虑极为有限的需求,因为这些特定的需求不太可能出现于下个问题,所以产生的设计与代码没有普遍性与通用性,从而通常不可复用。
图中的长箭头可以理解为是一个程序构件对另外一个构件的调用,而短箭头为程序运行控制流的走向,这也就是名称“调用-返回”的由来。
图6.1调用-返回风格软件体系结构大的程序运行控制流示意图
每个软件构件都设计为有一个唯一的程序执行起点和唯一的程序执行终点,或者称为程序执行入口和程序执行出口。程序从其执行入口开始执行该构件的代码,运行至该构件的程序执行的出口,然后程序执行结束,而将控制返回给程序调用构件。上述程序构件通常叫做子程序(Subroutine),从一个构件到另外一个构件的控制传递叫做子程序调用(Call)。子程序调用程序都有参数传递。拥有整个软件入口的构件叫做主程序(Main Program),它控制子程序的执行顺序。在这种风格的系统中,也可能有一些被动的数据构件,其中存储供子程序的访问的共享数据。可以被所有软件构件访问的共享数据被称为全局变量。
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.9 面向对象的体系结构图
1.对象与类的定义
面向对象的设计是在1972年由Parnas提出的,对象和类是面向对象设计的基本要素。软件系统的开发者创建类来代表系统的每个构建。这些通用的类被用来创建程序中所需要的每个对象的特定实例。对象可以通过使用方法互相进行交互。在类的实例没被创建以前,对象是不存在的,类仅仅是定义。当一个对象被具体的创建以后,随机存储器将会为该对象分配内存空间。一个类可以产生多个对象。
在介绍这两种软件体系结构以前,首先介绍调用-返回风格的体系结构的概念。
6.1.2 调用-返回风格软件体系结构的概念
调用-返回风格体系结构(Call and Return Architecture)是在过去的30年内具有深远影响的软件体系结构。本节要介绍的共享数据的主程序-子程序体系结构与面向对象体系结构可以被认为是调用-返回风格体系结构的子类型。因此,熟悉调用-返回风格架构对于理解这两个体系结构有重大意义。
这种调用-返回风格体系结构的组织与执行的动态控制可以由高级程序语言的过程(Procedure)、函数(Function)或者方法(Method)来实现。
调用-返回风格架构可以被组织成任何形式,例如,可以将程序设计为如图6.2所示的结构图。在该图中,箭头代表调用,方块内有“Sub”字样的是子程序,有“Global Date”字样的为数据构件。图6.2设计的逻辑关系比较复杂,因此,通常人们往往喜欢将其组织成如图6.3所示的层次结构。这样组织成层次结构的调用-返回风格架构设计叫做共享数据的主程序-子程序软件体系架构,其原因是在调用-返回体系结构中包括一个控制其他组件的主程序,该程序选择调用在其下层的软件组件(模块、函数),而该软件组件又往往调用其下层的软件组件。每次调用都执行一个子任务,并且返回一个值。主程序-子程序体系结构是较早出现的软件体系结构。
目前,非结构化编程已成为历史,现在很少使用(除了有些银行与金融业企业仍然使用COBOL进行开发,但和早期的版本相比有了很多改善,例如COBOL 97包括常规改善并且具备了面向对象的特征),因此本节将不把注意力放在非结构化编程方面,而主要介绍采用结构化设计方法的主程序-子程序软件体系结构与采用面向对象设计方法的面向对象软件体系结构。
本节首先简要回顾非结构化编程,然后介绍对软件设计有重要的影响的调用-返回风格软件体系结构,重点介绍其中的主程序-子程序软件体系结构与面向对象软件体系结构,并对它们进行讨论。
6.1.1 非结构化编程简介
非结构化编程技术是历史上最早的编程范型。紧随其后的是结构化设计/编程技术与面向对象设计/编程技术。一个由非结构化语言编写的程序通常包含一系列有序的命令,或者称为语句,通常是每个语句占一行,每行都有标记一个行号或者可能是标签。这样做的目的事允许程序执行流可以依据行号从一行跳到程序的其他指定的行。支持非结构化编程的语言包括早期的BASIC与COBOL。
主程序-子程序体系结构中典型地存在一个控制线程,每个阶层的组件从其父组件得到该控制并且通过它传给它的子组件。
使用主程序-子程序软件体系结构的设计通常采用如图6.4所示的自顶向下的功能化设计方法。
图6.4自顶向下的的功能化设计方法
自顶向下功能化设计方法的设计思想是,系统从功能的角度进行设计,从高层开始,逐步细化为详细的设计。该设计从系统要完成的功能需求出发,首先将一个整体问题(功能)分为几个子问题(子功能),然后再考虑将每个子问题(子功能)再次划分为几个更小的子问题(子功能),依次下去,直到不可再分为止。通过这样的设计,得到一颗如图6.4所示的根朝上的树形结构,其中,每个节点都是一个子程序。可以理解为系统的功能可以由多个子程序完成。高层子程序调用低层子程序,而低层主程序又调用比它更低的子程序,等等。
图6.2 应用调用-返回风格架构的设计
以上介绍的调用-返回风格软件体系结构对于理解当今流行软件体系结构有着重要的意义。下面将分别介绍该软件体系结构下的主程序-子程序软件体系结构与面向对象软件体系结构。
6.1.3 主程序-子程序软件体系结构
主程序-子程序软件体系结构在设计上使用层次化的划分方法,该体系结构中使用由编程语言直接支持的单一的控制线程。子程序的结构是明确的,子程序通常组成程序模块。子程序的调用呈现层次状,其正确与否往往取决于其调用的子程序的正确与否。主程序-子程序软件体系结构图如吐6.3所示。
自顶向下的程序设计方法存在如下问题。
(1)功能烟花困难。自上而下的方法穿件了符合最初的需求的较好的软件系统模型。但是当系统改变或者增加新的需求是,功能结构变得越来越笨拙。由于软件被设计为树形结构,修改与更新,通常要求广泛的“剪枝”与“嫁叶”,使系统维护变得越来越困难。
(2)现实中的系统功能不容易描述。大型加护系统很难从功能方面进行刻画。很多大型系统没有“顶部”,例如,一个涉及数据查询、数据改变与保持数据一致性的软件系统,如果按照功能化自向下的设计,则该系统可能被设计为一个基于一个唯一的“虚拟”顶点并且会产生非常复杂的结构。
结构化程序设计得到了广泛的应用,例如阿波罗11号的地面控制系统的子系统Apollo Reentry Runge–Kutta数值集成器软件采用结构化程序设计,利用FORTRAN语言开发,在当时最快的计算机IBM360-75上运行。
结构化设计从数据流图开始,然后将数据流图转换为程序结构图(Structured Chart)。设计数据流图从数据输入开始,对数据的各个处理过程以及最后的输出进行描述;将提供给用户的业务流程图(”物理模型”)进行功能建模,转化成开发人员更易理解的一系列”逻辑模型”图,以图形化的方法描绘数据在系统中的流动和处理过程。这些图需要用规范的DFD描述,达到系统在建立前有关信息就能被充分理解的目的。在设计时要求严格划分开发阶段,用规范的方法与图表工具精确的描述各阶段的工作,每个阶段都以规范是哪个的文档资料作为其成果,最终得到满足用户需要的系统。
相对于非结构化的设计,结构化设计有以下优点。
(1)逻辑设计与物理设计分开。
(2)开发过程中形成一套规范的文档,以便后期修改和维护。
结构化设计的缺点为开发周期长,系统难以适应环境的变化以及开发过程复杂繁琐。
结构化设计适用于组织相对稳定、业务处理过程规范、需求明确且在一定时期内不坏发生大的变化的大型复杂系统的开发,经验表明,当程序小于10万行时,结构化的程序设计比较成功。当程序大于10万行时,结构化程序表现不加,原因是当程序规模非常大时,程序代码编写耗时长,软件测试变得越来越困难,难以保证软件的可靠性。
第六章 经典软件体系结构
本章介绍经典的软件体系结构,主要包括Mary Shaw等人所总结的一些软件体系结构分格。众所周知,计算机学科历史较短,因此,软件架构的研究历史更短。本章所谓的经典软件体系结构也仅仅是指在20世纪80年代至21世纪初期间提出的成功的软件体系结构。本章将介绍调用-返回分格软件体系结构、数据流风格软件体系结构、基于事件的软件体系结构、层次软件体系架构与MVC软件体系结构。
6.1.4 面向对象的软件体系结构
在结构化设计以及编程中,简单的程序可以由一个主程序中的一系列语句组成的一个较长的文件代表,而在负载的程序中,通过子程序或者函数执行一些特定的任务。通常情况下,程序中的数据可以被程序的任何语句或者函数访问,当程序很大时,这种做法意味着一个程序缺陷(bug)可能被传导到很远,导致程序难以调试和维护,另外,如果想在程序中添加一些新的功能也比较困难,因为用户必须清楚哪些函数对哪些数据进行了访问与修改。