目录
CH1 软件工程与软件设计
CH2 统一建模语言UML
CH3 软件设计基础
CH4 面向对象的软件设计方法(\(\star\))
CH6 用户界面设计
CH1 设计、体系结构
软件设计
概念
名词解释:对软件将如何被开发出来的一种描述
动词解释:得到这种描述的活动或过程
要素(6个)
- 目标描述
- 设计约束
- 产品描述
- 设计原理
- 开发规划
- 使用描述
软件体系结构
定义(两个,考试只回答2)
- 软件体系结构是软件系统的结构,包含软件元素、软件元素外部可见的属性以及这些软件元素之间的关联
- 软件体系结构是软件系统的基本组织,包含构件、构件之间、构件与环境之间的关系以及相应的设计和演化原则
风格
软件体系结构的风格描述了某一特定领域中系统组织方式的惯用模式,反映了该领域中众多系统所共有的结构与语义特性
CH2 图、面向对象方法
UML的目标是以面向对象方式描述任何类型的系统,具有广泛的应用领域
包图:是一种特殊类型的类图,描述类和接口如何进行逻辑上的划分,常用来描述软件系统的体系结构
组合结构图:UML2.0中新增加的视图,用于描述较为复杂的系统元素以及元素之间的关系。组合结构图把类图和构件图联系起来,表明系统元素如何组合在一起实现复杂的模式
通信图:由UML1.x中的协作图发展而来,更关注于描述特定行为中参与交互的对象以及连接关系,也能表示对象之间的消息传递,但对于显示顺序并不直观。很多情况下,通信图与顺序图可以相互转换
交互概览图:是活动图的一种简化版本,不像活动图那样强调每一步的动作,而是强调执行活动所涉及的元素,也是UML2.0新增的
面相对象方法是当今主流的软件开发方法,其基础在于将客观世界中的应用问题看成由实体及其相互关系组成的,那么显然可以将与某一应用问题有关的实体(包括其属性和操作)抽象为问题空间中的对象
面向对象方法通过提供对象、对象间信息传递等语言机制让软件开发人员在解空间中直接模拟问题空间中的对象及其行为,从而削减了语义断层,拉近了问题空间与解空间的距离
多态:多态指在父类及其子类中,对外接口的定义形式相同,却可以对应多种接口的实现形态
面向对象=对象+类+继承+聚集+多态+消息
面向对象方法的优势(三个)
- 简化软件开发过程
- 支持软件复用
- 改善软件结构
结构建模
抽象类:指一个类只提供操作名,而不对其进行实现
接口:用来声明一些属性或方法,但并不实现它们
依赖关系:表示一个类使用或需要知道另一个类中包含的信息
关联关系:两个类的实例之间存在语义上的联系
聚集关系:两个类的实例之间存在一种拥有或属于关系
构成关系:两个类的实例之间存在一种包含关系
泛化(继承)关系:继承
实现关系:一个元素对另一个元素的实现(如:抽象类实现)
类图:可以表示概念层的模型,也可以细化后表示实现层的模型,并且一般是由概念层逐步细化到实现层
部署图:制品+节点
CH3 设计、体系结构
软件设计的基本概念
- 抽象与逐步求精
- 模块化与信息隐藏
- 内聚与耦合
软件设计的一般过程
模式驱动的软件体系结构设计
领域特定的软件体系结构设计
软件体系结构设计的步骤
只列出来了一部分可能要考的
- 开发软件顶层架构
- 设计软件支撑方案
- 确定设计元素(子系统、构件、射击类三种设计元素)
- 开发软件部署模型
可信软件:是指软件系统的运行行为及其结果总是符合人们的预期,且在受到干扰时仍能提供连续的服务
嵌入式系统中的软件结构
CH4 面向对象的软件设计方法\(\star\)
拥有将用例图转化为分析类图,最后转化为顶层架构图的能力
用户界面
CH6 用户界面设计
界面设计着重考虑的三个方面
- 软构件之间的接口设计
- 软件与其他非人类的生产者和信息使用者(比如其他的外部实体)之间的界面设计
- 人和计算机之间的界面设计
与人有关的因素
- 人只有有限的短暂记忆能力,通常人只能够瞬时记忆7条左右信息
- 人都会犯错,特别是在处理大量信息和承受压力的情况下
- 人们都有不同程度的生理特征
- 人都有不同的交互和喜好
六条设计原则
- 用户熟悉程度
- 一致性
- 使惊讶最小化
- 可恢复性
- 用户帮助
- 用户多样性
三条“黄金规则”
- 使系统处于用户控制之中
- 减少用户的记忆负担
- 保持界面的一致性
CH7 体系结构风格与设计模式
设计模式的概念
广义:可解决一类软件问题并能重复使用的软件设计方案
狭义:设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述
软件体系结构风格
- 管道/过滤器风格
- 层次风格
- 客户/服务器风格
区别
管道/过滤器风格中,构建之间的依赖仅仅是数据流,低耦合
层次风格中,从提供服务的构建出发,形成有向无圈图。典型应用就是网络层次模型
客户/服务器风格中,从提供服务的构件出发,形成倒置的树
设计模式
工厂模式
适用场合:大实体包含着小实体,小实体都是同一类;如果各类小实体构成一个类层次,那么可以使用工厂模式,将各类大实体也描述成为一个类层次
核心思想:在父类中,将创建对象的操作包装成为一个虚函数;在描述公共行为的过程中调用该函数;在子类中重定义该虚函数来定制创建的对象,从而间接地定制公共行为
抽象工厂模式
适用场合:需要创建一组多种风格的小实体,且具体创建方式又要灵活可调整
核心思想:同一风格的一组小实体用一组抽象产品类来描述,创建行为封装为一个抽象工厂类,提供通用的创建借口。具体的产品或工厂,交给具体的类去实现。
单例模式
适用场合:一个类最多只有一个实例
核心思想:构造函数私有化,提供静态方法向外提供访问接口
组合模式
适用场合:对象具有递归组合特性,且希望用户忽略基本对象与组合对象的区别
核心思想:为基本对象和组合对象提供一个公共的抽象父类,并建立起从该抽象父类到组合对象类的聚集关联
代理模式
适用场合:没有直接访问对象,而是通过中间人进行访问
核心思想:构造一个具有相同接口的代理对象,它负责将操作请求转发给真实对象
迭代器模式
适用场合:需要以多种方式灵活的遍历一个聚合对象中的各个元素
核心思想:将与遍历有关的部分从聚合对象中分离出来,单独成类,并将遍历的状态信息用一个独立对象记录
观察者模式
适用场合:对象之间存在一对多的数据依赖关系,自变量数据改变时,其余对象都得更新
核心思想:被依赖对象使用表记录依赖对象,改变时依次通知,该模式用作数据的一致性维护
CH8 分布构件框架
分布构件框架的两个功能
- 向客户提供访问服务器上的分布构件的接口
- 向服务器上的分布构件提供一个运行的环境
三种分布构件框架的标准结构
EJB \(\downarrow\)
DCOM\(\downarrow\)
CORBA\(\downarrow\)