当前课程知识点:软件工程 > 第11章 软件系统设计 > 11.3 软件体系结构风格(一) > 讲授视频
体系结构
也代表了系统宏观共性的东西
我们从建筑风格谈起
建筑风格等同于建筑体系结构的
一种可分类的模式
它一般是通过向外形 技术
和材料这样一些形态上的特征
进行区分
这里列出了法式建筑
中式园林建筑
和现代高层建筑
三种不同的建筑风格
显然
它们都有自己独特的共性特点
每一种建筑风格的产生
都是人们对居住的思考和尝试
挖掘出的可能性
它是一个
长期建筑历史发展的结果
之所以称为风格
是因为经过长时间的实践
它们已经被证明
具有良好的工艺可行性
性能和实用性
并且可以直接用来遵循和模仿
对于软件系统来说
大部分的设计也是例行设计
有经验的软件开发人员
经常会借鉴现有的一些解决方案
然后按照新的系统的要求
把它改造成一个新的设计
软件体系结构风格
是描述特定系统组织方式的
一些惯用范例
它反映的是众多系统
所共有的一些结构和语义
使用软件体系结构风格
可以促进设计的重用
和大量代码的重用
使系统更加易于理解
而且标准化的风格
也有利于系统的互操作
卡内其梅龙大学的Garlan
和Shaw教授
是软件体系结构
最早的研究者
他们认为体系结构风格
是按照结构组织的模式
来定义系统
具体地说
就是定义了构件和连接件的语法
和连接方法
同时他们也提出了
五种通用的体系结构风格
第一种是独立构件风格
典型的系统有进程通信
和事件系统等
其中事件系统
又可以进一步地分成隐式调用
和显式调用
第二种是数据流风格
主要包括批处理
和管道过滤器这样一些类型
第三种
是以数据为中心的风格
像常见的仓库
数据库系统
超文本系统等
都属于这种风格
第四种是虚拟机风格
主要包括解释器
和基于规则的系统
第五种是调用返回风格
像主程序-子程序
面向对象 层次结构等
都属于这种风格
下面我们来详细介绍
其中几种典型的
软件体系结构风格
主程序-子程序
是结构化程序设计的
一种典型风格
它是从功能设计出发
把系统进行模块化的分解
由主程序
调用那些所分解的子程序模块
来实现完整的系统功能
这种风格的系统
是由一个主程序
和一系列子程序组成
主程序和子程序
以及子程序之间
通过调用和返回
来形成一个层次化的系统结构
大家在学习C语言课程时
编写的程序
就是典型的主程序-子程序风格
面向对象风格
是建立在数据抽象
和面向对象的基础上
我们把数据和它相应的操作
都封装在一个抽象数据类型
或者对象中
整个系统
可以看成是一个对象的集合
每一个对象都有自己的功能集合
这种风格的系统
它的构件是类和对象
对象之间通过函数调用
和消息传递
来进行交互
它的特点是具有信息隐藏性
构件之间只通过接口和外部
进行交互
它的内部结构
是被封装隐藏起来的
像C++和Java程序
都是典型的面向对象风格
管道过滤器风格
是把系统的任务
分成一系列连续的处理步骤
这些步骤
通过系统的数据流进行连接
一个步骤的输出
是下一个步骤的输入
这个图显示了
管道过滤器风格的一个直观结构
其中的构件称为过滤器
过滤器对于输入的数据流
进行内部处理
然后产生输出数据流
而传送数据的连接件
就称为管道
这里给出的
是一个媒体播放器的例子
它的输入是一个AVI文件
包括了视频和音频数据
这个文件经过分离器进行处理
把视频和音频数据分离成两个流
其中视频数据
传送给视频解码器
音频数据传送给音频解码器
视频解码器和音频解码器
分别把压缩的视频和音频数据
解码成原始的图象数据
和原始的音频数据
然后再分别输出给显示器
和声卡
在管道过滤器风格中
构件具有良好的隐藏性
和高内聚 低耦合的特点
可以很好地支持软件的重用
和扩展
但是这种结构
不适合交互应用的情况
如果管道过长
或者过滤器过于复杂的话
系统的性能就会大大降低
我们经常使用剪贴板
这个程序可以把剪贴的数据
进行短时间的存储
然后支持文档
和应用之间的数据传递和交换
那么剪贴板和其他应用程序之间
应该是一个什么样的结构呢
剪贴板需要一个公共区域
来存储交换的信息
这个区域
就像是一个共享的数据仓库
不同的应用程序
通过Copy/Paste来访问剪贴板
并且使用这个区域
来交换格式化的信息
这是一种典型的仓库体系结构
仓库体系结构
是一种以数据为中心的
体系结构风格
在这种系统中
所有的功能模块都访问
和修改一个单一的数据存储
这个存储也被称为是一个
集中式的仓库
而功能模块之间是相互独立的
他们之间的交互
都是通过这个仓库来完成
这种体系结构
适合于实现那些经常发生改变
而且具有复杂数据处理的任务
只要仓库的定义良好
就可以很方便地增添功能模块
从而实现向系统添加新的服务
但是这种系统的主要问题在于
每个功能模块
和仓库之间的耦合非常高
集中式的仓库很有可能
成为系统性能的瓶颈
这是一个
现代程序设计语言编译器的
系统结构图
它采用的就是一种仓库形式的
体系结构风格
我们从图中可以看出
编译器 调试器和编辑器
都是单独的工具
编译器增量的产生
程序的语法分析数和符号表
代码调试器和编辑器
对它们进行读取和使用
一般来说
数据库系统
也是典型的仓库体系结构风格
它主要包括两种构件
一种是中心数据库
保存当前系统的数据状态
另一种是多个独立的应用
对数据库进行读取
对于复杂的应用系统来说
可能会涉及到
多个异构数据库的集成
一个数据库可以被多个应用访问
一个应用也可以访问多个数据库
当然现在有很多
异构数据库的集成技术
在这里不再进行详细讲述
-1.1 软件无处不在
--讲课视频
-1.2 软件的本质特性
--讲授视频
-1.3 软件工程的产生与发展
--讲授视频
-1.4 软件工程的基本概念
--讲授视频
-1.5 软件质量实现
--讲授视频
-1.6 业界人士谈软件工程
-测验题--作业
-讨论题
--讨论题
-作业题
--第一张 作业题
-2.1 编程过程与规范
--讲课视频
-2.2 良好的编程实践
--讲课视频
-2.3 Python集成开发环境
--讲课视频
-2.4 代码静态检查
--讲课视频
-2.5 代码性能分析
--讲课视频
-2.6 结对编程实践
--讲课视频
-2.7 刘贺谈软件工程
--讲课视频
--讨论
-测验题--作业
-作业题
--第二章 作业题
-3.1 单元测试概述
--讲课视频
-3.2 黑盒测试方法
--黑盒测试方法
-3.3 白盒测试方法
--基本概念
--代码覆盖标准
--基本路径测试
-3.4 单元测试工具
--单元测试工具
--html
-测验题--作业
-作业题
--第三章 作业题
--作业题附件
-4.1 软件过程
--讲课视频
-4.2 软件过程模型
--讲课视频
-4.3 敏捷开发过程
--讲课视频
-4.4 微软公司开发过程
--邹欣经理自我介绍
--微软开发过程之一
--微软开发过程之二
-测验题--作业
-5.1 团队组织与管理
--讲课视频
-5.2 项目沟通管理
--讲课视频
-5.3 软件项目计划
--讲课视频
-5.4 软件项目估算
--讲课视频
-测验题--作业
-讨论题
--讨论
-6.1 敏捷开发之Scrum
-- 敏捷开发之Scrum
--html
-6.2 用户故事与估算
--讲课视频
-6.3 团队协作工具Tower
-6.4 配置管理
--讲课视频
-6.5 配置管理工具Git
--讲课视频
-测验题--作业
-作业题--作业
-7.1 需求工程师
--讲课视频
-7.2 需求定义
--讲课视频
-7.3 需求的类型
--讲课视频
--讲课视频(2)
-7.4 需求工程过程
--讲课视频
-7.5 需求的主要来源
--讲课视频
-7.6 需求获取技术
--讲课视频
--讲课视频二
--讲课视频三
-7.7 撰写需求文档
--讲课视频
-测验题--作业
-讨论题
--讨论
-8.1 用例建模概念
--讲课视频
-8.2 用例建模过程
--讲课视频
-8.3 用例建模精讲
--讲课视频
-8.4 建模工具介绍
--讲课视频
-8.5 微信抢票应用案例
--讲课视频
-测验题--作业
-讨论题
--讨论
-9.1 面向对象分析
--讲课视频
-9.2 CRC卡片分拣法
--讲课视频-1
--讲课视频-2
-9.3 面向对象设计
--讲课视频-1
--讲课视频-2
-9.4 类图建模
--讲课视频-1
--讲课视频-2
-第9章 面向对象分析与设计--测验题
-讨论题
--讨论
-10.1 顺序图概念
--讲课视频
-10.2 顺序图建模
--讲课视频
-10.3 顺序图风格
--讲义视频
-10.4 状态建模
--讲课视频
-10.5 状态图
--讲课视频
-10.6 状态图精讲
--讲义视频
-测验题--作业
-讨论题
--讨论
-11.1 软件体系结构概念
--讲授视频
-11.2 软件设计原则
--讲授视频
-11.3 软件体系结构风格(一)
--讲授视频
-11.4 软件体系结构风格(二)
--讲授视频
-11.5 软件体系结构风格(三)
--讲授视频
-11.6 软件设计过程
--讲授视频
-11.7 Web系统架构设计
--讲授视频
-11.8 数据库选择策略
--讲授视频
-测验题--作业
-作业题
--html
--html
--html
-作业题--作业
-12.1 交互设计概述
--讲授视频
-12.2 交互设计目标
--讲授视频
-12.3 GUI设计原则
--讲课视频
-12.4 KLM效率模型
--Video
-12.5 Fitts定律
--讲授视频
-12.6 交互设计过程
--讲授视频
-测验题--作业
-13.1 软件测试概念
--讲课视频
-13.2 软件测试类型
--讲课视频
-13.3 软件功能测试
--讲课视频
-13.4 软件性能测试
--讲课视频
-测验题--作业
-14.1 软件部署与交付
--讲课视频
-14.2 软件演化与维护
--讲课视频
-测验题--作业
-第一部分:基础知识
-第二部分:编程与测试(选做)