21/12/6 软件体系结构复习
复习
1.基本概念
软件体系结构
系统的基本组织结构,包括系统构成要素,这些构成要素之间以及与环境之间的关系,系统设计及演化时所应遵循的原则
什么设计模式?
是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结.
为什么要用设计模式?
为了<u>
可重用代码</u>
,让代码更容易<u>
被他人理解</u>
,保证<u>
代码可靠性</u>
非功能需求有哪些?,含义是什么?
- 性能
- 可扩展性/伸缩性
- 可维护性
- 可用性
- 安全性
- 业务质量
成本,周期,投入的人力,需要的资源 - 性能需求:用户在软件响应速度,结果精度,运行时资源消耗量等方面的要求
- 可靠性需求:用户在软件失效的频率,严重程度,易恢复性,以及故障可预测性等方面的要求
- 易用性要求:用户要求在界面的易用性,美观性,以及对面向用户的文档和培训资料等方面的要求
- 安全性需求:用户在身份认证,授权控制,私密性等方面的要求
- 运行环境约束:用户对软件系统运行环境的要求
- 外部接口:用户对待开发的软件系统与其他软件系统或硬件设备之间的接口的要求
- 可保障性要求:用户在软件可配置性,可扩展性,可维护性,可移植性方面的要求
编程的三个层次?
针对实现编程
Dog d = new Dog();
d.bark();
针对接口/超类型编程
Animal animal = new Dog();
animal.makeSound();
运行时才指定具体实现的对象
a=getAnimal();
a.makeSound();
设计模式的三大原则
单一职责
一个类只负责一个功能领域中相应的职责,
依赖倒置
针对接口编程,而非针对实现编程
即程序中所有的依赖关系都是终止与抽象类或者直接接口.
开闭原则
对拓展开放,对修改关闭
面向对象的三大原则
软件体系结构
分层风格
指将软件设计成层次结构,每个层为其上层服务,同时又是其下层的客户,不允许隔层调用
优点
- 层次结构 支持基于随着层次不断增加而不断抽象的设计.能将一个复杂的问题分一系列从初等的与硬件相关的功能到可以被用户使用的高级功能.
- 支持更新.每层只和两个层交互,因此,在接口不变的前提下,可以单独修改或更换某一层的某些组件而不影响其他层.
- 支持复用.
缺点
- 不是什么系统都容易被组织成层次结构
- 有时层次结构的逻辑上的较高层级和较低层级会有比较紧密的耦合
- 正确的层次抽象往往可能很困难.
管道-过滤器风格
每个过滤器都有一组输入和输出,组件读入输入数据流,经过数据处理,然后产生输出数据流.
系统由负责运送数据的管道和负责对数据进行处理的过滤器组成
优点
- 高内聚低耦合
- 允许设计者将整个系统的输入/输出行为看做是多个过滤器行为的简单合成
- 支持软件重用
- 系统维护和增强系统性能简单
- 允许对一些如吞吐量,死锁等属性的分析
- 支持并发
缺点
- 导致进程称为批处理结构
- 不适合处理交互应用
- 因为每个过滤器上都增加了解析和合成数据的工作,因此系统性能下滑,
主程序-子程序风格
采取分而治之策略,将一个复杂的问题分解为多个独立的字问题
自顶向下功能化设计思想(结构化设计)
从功能需求出发,将一个整体问题分解为多个子问题,然后将子问题划分为几个更小的子问题,直到不可划分为止
优点
- 逻辑设计与物理设计分开
- 开发过程中形成一套规范化的文档,以便后期修改和维护
适用于组织相对稳定,业务处理过程规范,需求明确且在一定时期内不会发生大的变化的大型复杂系统的开发.
缺点:开发周期长,系统难以适应环境的变化及开发过程复杂繁琐
功能演化困难,显示中的系统功能不容易描述,功能化设计丢掉了数据与数据结构,产生的可复用代码少.
面向对象软件体系结构
系统看做由一些对象的集合构成,消息从一个对象发送到另外一个对象.每个对象都有其相关的功能
对象是一个具有状态和行为的实体.一个对象存储它的状态在域中,面向对象设计隐藏对象的内部状态,并且要求所有对象之间的交互都通过该对象的方法,这叫做数据封装,是面向对象编程的基本原则.
面向对象设计的特点
- 封装性,限制对特定信息的访问
- 继承性,共享同一个功能定义
- 动态绑定性:在程序运行前,不知道创建哪个类的对象,运行时才动态生成
- 复用和可维护性:因为封装与局部化
- 系统功能通过对象服务表示:对象的接口提供了一系列的方法.
- 共享数据区域被取消
- 对象可以是分布的.通过函数或者方法调用互相交互.
- 对象是对现实世界的抽象并且可以自己管理自己.
优缺点
优点:
- 容易维护
- 可复用性好
- 映射现实世界
- 容易对一个系统进行剖分
缺点
- 占用欧冠内存较大.因为每个新被创建的对象都必须占用一块内存,而面向对象程序中,往往有大量对象被创建
- 一个对象要和另外一个对象交互,该对象必须知道另外一个对象的身份,包括对象名,方法名和参数类型等.
基于共享数据的事件风格
- 系统中的每个组件可以注册一种事件
- 当一个组件要发布事件时,该组件可以广播一个或多个事件到事件空间
- 每当一个事件被广播了,系统将负责自动调用那些已经注册了该事件的组件或者过程,被调用的组件将运行.
2.设计模式
mvc模式
model 包含核心数据和功能,独立于输入行为和输出表示
View 将模型中的数据显示给用户
Controller处理用户输入,如果用户通过一个view 的controller改变了model,其他controller必须反映出该改变,即当数据发生变化的时候,model负责同志所有的view,告诉他们数据已经改变了.(观察者模式,model对象是被观察者,controller是观察者)
优缺点
优点
- 对于同一个模型,可以有不同的视图和控制器,一遍提供给用户不同类型的用户图形界面
- 改变-传播机制保证了模型在改变的同时自动刷新所有的视图
- mvc体系结构的设计使的改变图形界面非常容易,适合业务逻辑较少改变,而图形界面需要经常改变的应用
- 全部的核心数据和核心功能都包含在模型中,很容易对核心的应用进行测试
- 可拓展性比较好
命令模式
三个部件
客户程序
调用者程序
被调用者程序
解除调用者类与被调用者类的耦合–为响应客户新请求的行动创建一个抽象
client对象负责初始化Command对象,并且提供将来要调用的方法的全部信息
Invoker决定什么时候调用所要调用的方法
receiver是含有索要调用方法的代码的实例
3.期末复习
21/12/6 软件体系结构复习