本次学习的是《软件工程》里的12.1,12.2,12.3节内容。
软件体系结构概念
软件工程师需要对软件系统的结构和行为进行抽象,实现系统级的复用(代码级的复用已经不能够满足日益复杂的软件)
软件体系结构:包括构成系统的设计元素的描述、设计元素之间的交互、设计元素的组合模式以及在这些模式中的约束。构建+连接+约束
包括:构建(一组基本的构成要素)、约束(作用于这些要素或连接关系上的限制条件)、连接件(要素之间的连接关系)、质量(性能)、物理分布(这些要素连接之后形成的拓扑结构)
构建
任何能产生某种功能的软件体都可以称为构建,比如程序函数、模块、类、对象、文件等,构建作为一个封装的实体,只能通过它的接口与外界进行交互,其内部的结构是隐藏的,构建的功能以服务的形式体现出来,进而产生与其他构建的关联。
连接
需要连接机制和协议的支持。
连接件
软件体系结构设计目标
软件体系结构发展
风格、模式和框架
软件设计原则
软件设计原则可以使代码更加灵活、易于维护和扩展。不同的语言可以有不同的原则,但是必须要有的是抽象、封装、模块化、层次化和复用。
抽象:
封装:
单元设计要尽可能简单
模块化:
系统分解的目标是高内聚,低耦合(一个模块或子系统内部之间联系很紧密,不同模块或子系统之间独立性强)
例:一个软件系统中,A、B、C都要访问一个关系数据库(此时耦合度高
层次化:
复用:
软件体系结构风格
使用软件体系结构风格,可以促进设计的重用和大量代码的重用,也有利于系统的互操作。
软件体系结构风格包括五种:
主程序-子程序风格
例子:c语言
面向对象风格
例子:c++,java,python
管道-过滤器风格
优点:构件具有良好的封装性,符合高内聚、低耦合的特点
缺点:不适合交互应用
仓库体系结构
所有的功能模块只访问和修改一个单一的数据数据存储。功能模块之间相互独立。
优点:适用于经常改变并且具有复杂数据处理的任务,可以很方便的增添功能模块
缺点:每个功能模块和仓库的耦合性很高
例子:现代程序设计编译器 / 数据库