目录
小规模编程的重点在于模块内部的程序结构非常依赖于程序设计语言提供的编程机制,而大规模编程的重点在于将众多的模块组织起来实现需求,需要特别关注模块之间的关系——这些关系应该是不依赖于编程机制的另一项完全不同的技术
20世纪90年代,正式将软件体系结构作为重要的研究主题。
软件体系结构=部件+连接件+配置
以部件、连接件和配置为基本单位组织的模型就是软件体系结构的抽象,基本目的是描述软件系统的整体功能组织,不涉及程序设计语言提供的各种编程机制;而模块,构建,进程等传统单位都是依赖于编程机制的,它们组成的模型就被称为软件体系结构的实现~
软件体系结构设计是先使用抽象机制完成软件系统的总体功能部署,然后再将抽象模型等价转换为设计模型,这既保证了软件系统的效用和质量,又顺利实现那了从总体结构设计到详细设计的过渡
实现类型:
通过部件端口与连接角色想匹配的方式,将系统中部件和连接件的关系定义为一个关联集合,这个关联集合可以形成系统整体结构的一个拓扑描述~
ADL:体系结构描述语言,用于描述系统结构的形式化模块语言,描述的对象是软件系统的高层结构,而不涉及软件系统的实现~
如下是几个经典的常用模式~
包含一个主程序和一些列子程序,主程序是系统的控制器,负责调动各子程序的执行,而各子程序又是一个局部的控制器,负责调度其子程序的执行~
部件的实现模块内部无论采用结构化还是面向对象分析,这并不妨碍整个系统高层结构符合主程序、子程序风格的约定~
优点:
- 流程清晰,易于理解
- 强控制性
缺点:
- 系统难以修改和复用
- 会产生不必要的公共耦合(限制了各部件之间的数据交互)
将系统组织为多个独立的对象,每个对象封装其内部的数据,并基于数据对外提供服务,不同对象之间通过写作机制共同完成系统任务~
需要注意的是:面向对象式风格是因为它借鉴了面向对象分析方法的思想,而不是因为它使用面向对象分析方法实现体系结构,这也是在该风格名称中有一个“式”字的原因~
优点:
- 内部实现的可修改性
- 易开发、易理解、易复用的结构组织
缺点:
- 接口的耦合性
- 标识的耦合性
- 面向对象的副作用
根据不同的抽象层次,将系统组织为层次式结构,每个层次被建立为一个部件~
优点:
- 设计机制清晰
- 支持并行开发
- 更好的复用性与内部可修改性
缺点:
- 交互协议难以修改
- 性能损失
- 难以确定层次数量和粒度
模型-视图-控制风格~(Model-View-Control)
以程序调用为连接件,将系统功能组织为模型、视图和控制3个部件。
优点:
- 易开发性
- 视图和控制的可修改性
- 适宜于网络系统开发的特征
缺点:
- 复杂性
- 模型修改困难