软件工程期末复习——第十章
软件工程期末复习——第十章
一、重要知识点
1. 面向对象设计原则
一个好的面向对象设计原则应该在提高一个系统的可维护性的同时,提高系统的可复用性。常见的几种面向对象设计原则如下所述。
2. 单一职责原则含义
单一职责原则(Single-Responsibility Principle,SRP)要求系统中的一个具体设计元素(类)只完成某一类功能(职责),尽可能避免出现一个复合功能的类——在同一个类中完成多个不同的功能。
3. 开放-封闭原则含义
开放-封闭原则(Open Closed Principle,OCP)的基本思想是“不用修改原有类就能扩展一个类的行为”,它要求软件实体类(类、模块、函数等)应该是可以扩展的、但是不可修改。
4. Liskov替换原则含义
里氏替换原则要求:子类应当可以替换父类,并能够出现在父类能够出现的任何地方。换句话说,就是子类必须能够替换他们的基类型。
5. 接口隔离原则含义
接口隔离原则(Interface Segregation Principle,ISP):采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口更好。
6. 依赖倒置原则含义
依赖倒置原则(Dependence Inversion Principle,DIP)是指应用系统中的高层模块不应该依赖于底层模块,两者都应该依赖于抽象;抽象不应该依赖于细节实现,实现细节应该依赖于抽象。
依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多,以抽象为基础搭建的架构比以细节为基础搭建起来的架构要稳定的多。
7. 分析类与设计类之间的映射关系
分析类(OOA 阶段)向设计类(OOD 阶段)的映射存在 5 种核心关系,需根据设计需求调整:
- 1 = 1:分析类无任何变化,直接作为设计类;
- 1 to 1:分析类经修改(新增 / 删除属性 / 操作)后成为设计类;
- 1 to m:一个分析类拆分为多个设计类,分别承担不同职责;
- m to 1:多个相关分析类合并为一个设计类,简化结构;
- m to m:一组分析类经重组后形成另一组设计类;
- 0 to 1:为实现需求新增设计类(分析阶段未涉及),如数据库访问类。
8. 关系数据库与面向对象概念的对应关系
利用关系数据库对永久对象进行存储,是当前使用得最为广泛的方法。关系数据库与面向对象中的概念存在一定的对应,如表10-3所示。
9. 对持久类的存储设计
所谓持久对象就是指生存期可以超越程序的任意一次执行时间而长期存在的对象。比如新建了一名读者对象,程序结束后该读者的基本信息将转化为持久保存的读者数据。通常来说,实体对象都会成为持久对象,实体类也称为持久类。
而对于持久类的存储设计而言,一般有以下几个要点:
- 类映射到表;
- 在一个第三范式的关系型数据库当中,表中的每一行都被认定为是一个对象,表中的列则对应于持久类的持久属性(持久类也有可能有临时属性);
10. 对关系的存储设计——关联关系的映射
两个持久对象间的关联关系在OOAD中通常表现为一个对象存放了另一个对象的对象引用(也称为关联属性),而在表中则表现为外键。关联关系一般可以分为以下这几类:
- 1:1关联:可在一个类对应的表中用外键隐含关联。
- 1:n关联:通常在n端类对应的表中用外键隐含关联。
- n:n关联:最好把它转换为1:n关联,然后再按照上面的方法进行转换。
11. 对关系的存储设计——继承关系的映射
- 继承关系树的每个类对应一个表:使用不同的表来分别表示父类和子类(即父表和子表)。以上图为例,此时就应该建立三张表:
- 品种:ISBN,名称,作者,出版日期,价格…
- 书籍:ISBN,开本
- 光盘:ISBN,光盘类型,盘片数量
- 继承关系树的每个具体类对应一张表:将所有父类的属性复制为子类表中不同的列,父类不建立对应的表。以上图为例,此时就应该建立两张表:
- 书籍:ISBN,名称,作者…,开本
- 光盘:ISBN,名称,作者…,光盘类型,盘片数量
- 继承关系树只对应一个表:使用一张表来描述父类和所有子类的属性,额外还要增加一列来表示对象所属的子类型:
- 品种:ISBN,名称,作者…,品种类别,开本,光盘类型,盘片数量
12. 对关系的存储设计——组合聚合关系的映射
由于聚合就是一种关联,所以对聚合的存储设计的规则与对关联进行存储设计的规则相同。
二、次重要知识点
1. 3方面的具体工作
2. 设计糟糕的系统的症状
- 僵化性:系统很难改变,即使一个简单的改动也会导致大量有耦合关联的其他部分的连锁反应;
- 脆弱性:改变系统的某个部分会破坏许多无关的其他部分;
- 固化性:很难将系统分解成可供其他系统重用的部件。
3. 典型的三层结构设计
- 表示层:用户界面;
- 业务层:业务处理流程;
- 数据层:持久化存储。
分层只是将系统进行有效组织的方式。当系统采用分层架构时,处于下一层的组件负责对上层组件提供服务,上层组件可以使用下层组件定义的服务,但下层组件对上层组件一无所知,层与层之间通常是不透明的,每一层都具有独立的职责。另外,上层的组件不需要了解所有的底层组件,它只需要了解和它邻接的那一层的细节,通过严格的区分层次,大大降低了层间的耦合度。
4. 硬件系统体系结构模型的作用
- 指出系统中的类和对象涉及的具体程序或进程;
- 指明系统中配置的计算机和其他硬件设备;
- 指明系统中各种计算机和硬件设备如何进行相互连接;
- 明确不同代码文件之间的相互依赖关系;
- 如果修改某个代码文件,表明哪些相关的代码文件需要重新进行编译。
5. 设计模式的作用和研究意义
作用:记录和提炼了软件人员在面向对象软件设计中的成功经验和问题的解决方案,是系统可复用的基础。正确地使用设计模式,有助于快速开发出可复用的系统。
意义:
- 优化的设计经验;
- 极高的复用性;
- 丰富的表达能力;
- 极低的耦合度。
使用设计模式,我们就能一次一次地利用已有方案而不必做重复劳动。