课程概述

       开设本课程的目的是使学生能充分掌握GoF的23种设计模式,提高他们的软件开发能力。可以采用“任务驱动”的教学方法,根据学生的特点分析设计模式的实例,训练其编程的基本方法和技能,为进一步学习后续专业课程和将来从事应用软件开发奠定良好的程序设计基础。

      课程内容主要包括:5种创建型模式(单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式),7种结构型模式(代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式)和11种行为型模式(模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式)等相关知识,以及面向对象的设计原则。

     通过课程的学习,学生应该学会应用7种面向对象的设计原则进行面向对象的编程;掌握代码编制真正工程化技术,为今后项目开发打下基础;掌握综合应用GoF的主要几种软件设计模式进行IT项目的综合设计与实践。


    

证书要求

采取百分制

预备知识

Java等面向对象程序设计语言

UML及其工具


授课大纲

第1章 面向对象概述

1.1 序言

1.2 课程定义

1.3 面向对象思想的起源

1.4 面向对象的基本概念

1.5 面向对象的思考方式

1.6 面向对象的核心特征(一)

1.7 面向对象的核心特征(二)

第一章单元测试

第2章 建模工具UML

第2章单元作业

2.1 UML序言

2.2 用例模型

2.3 活动图

2.4 类图

2.5 顺序图

2.6 通信图

2.7 状态图

第二章 单元测验

第3章 面向对象分析(一)

3.1 面向对象分析与设计概览

3.2 面向对象分析方法(一) 名词法

3.3 面向对象分析方法(一) 名词法案例

3.4 面向对象分析方法(二) 分析模型法

3.5 面向对象设计(初步)

第3章 单元作业

第3章 单元测试

第4章 面向对象分析 (二)

4.1 标识概念类和对象的注意点

4.2 CRC方法标识概念类

4.3 CRC方法建模的一些规则

4.4 CRC方法建模的案例:ATM取款机软件

第4章单元作业

第4章单元测试

第5章 领域模型

5.1 领域模型定义

5.2 领域模型建模指导

5.3 领域模型案例

5.4 系统顺序图

5.5 其他的需求信息

第5章单元作业

第5章单元测试

第6章 从分析到设计

6.1 准备高质量的用例模型

6.2 高质量的用例描述

6.3 契约式设计

6.4 操作契约

6.5 开始进入设计

6.6 面向对象设计

第6章单元作业

第6章单元测试

第7章 设计原则GRASP(一)

7.1 GRASP原则一:创建者

7.2 GRASP原则二:信息专家

7.3 GRASP原则三:低耦合

7.4 GRASP原则四:控制器

7.5 GRASP原则五:高内聚

第7章单元作业

第7章单元测试

第8章 设计原则GRASP(二)

8.1 GRASP原则六:多态

8.2 GRASP原则七:纯虚构

8.3 GRASP原则八:间接

8.4 GRASP原则九:隔离变化

8.5 其他面向对象设计原则1:开-闭原则

8.6 其他面向对象设计原则2

8.7 其他面向对象设计原则3:依赖倒置原则

第8章单元作业

第8章单元测试

第9章 GOF设计模式(一)

9.1 关于设计模式

9.2 GOF设计模式一:单实例

9.3 GOF设计模式二:适配器

9.4 GOF设计模式三:外观

9.5 GOF设计模式四:观察者模式(一)

9.6 GOF设计模式四:观察者模式(二)

第9章单元作业

第9章单元测试

第10章 GOF设计模式(二)

10.1 策略模式

10.2 修改后的设计方案

10.3 简单工厂模式

10.4 工厂模式

第10章单元测试

第11章 成为好的架构师

11.1 心存志远

11.2 成为一个好的架构师(一)

11.3 成为一个好的架构师(二)

11.4 课程总回顾

参考资料

教材:

程细柱,软件设计模式(Java版),2018年,第1版,人民邮电出版社。



参考书

1. 刘伟,设计模式,2011年,第1版,清华大学出版社。

2. 青岛东合信息技术有限公司,设计模式-(Java版),第1版,2012年,电子工业出版社。

3. 王翔,设计模式Java版-模式工程化实现及扩展,第1版, 2012年,电子工业出版社。

4. Object.Oriented.Thought.Process.The.2nd.Edition.

5. Head.First Object Oriented Analysis and Design (2006.11)

6. Applying.UML.and.Patterns,3rd.Edition , Graig Larman

常见问题

【1】为什么要设计、为什么恰当的软件设计是一种过程、它很重要吗?

答:良好的设计,能够使待开发系统更准确地满足客户的需要,同时有更大的可能性满足今后的需求变化,比如 客户业务扩展、技术更新、运行环境的改变等,极大地降低客户运营成本。

软件设计有一定的步骤,它的输入是领域模型、用例模型、前景文档、补充需求说明文档等资料。在此基础上,给出初步的架构设计、模块划分、类图。对一些重要的功能模块,通过设计顺序图可以动态检测 其实现的可行性、对部分模块通过状态图来分析各种状态下处理的各种事件等。如果遇到不合适的地方,需要返回前一阶段进行改进。设计是一个需要不断演化、完善的过程。

设计很重要!


【2】什么是面向对象设计、有没有超越面向对象设计的设计方法?

答:以面向对象的思维方式去研究、分析待开发系统,找出其中的对象、对象的属性、对象之间的关系、为对象分析分配职责,在对象的分工协作过程中完成整个系统的功能,这是面向对象设计。

谈不上“超越面向对象设计”。设计的方式目前看来主要有两大类: 面向功能分析设计、面向对象分析设计。对一个大而复杂的系统,一般先用面向功能的方式,对系统进行分层、或者划分子系统的方式。对某一个具体的子系统,考虑采用面向对象的设计方式。


【3】什么是好的设计、如何区分好的设计与坏的设计?

答:好的设计,有一些质量属性可以作为衡量的标准:如,可扩展性、可移植性、可靠性、可重用性等。符合这些性质的设计方案,一般而言,就是好的设计。

至于如何区分,笼统的标准就是 “满足客户需要的设计”,就是好的设计。理论一点评判,就是满足上述的质量标准。


【4】如何去设计、针对通常的设计问题,有没有现成的“处方”?

有,设计模式(design pattern)。前人为了解决某类问题,给出了很好的解决方案。当前的待开发系统也遇到类似的问题,可以考虑、借鉴前人的这个解决方案,省时、省力、可靠。