一、课程概述

(一)基本信息


适用专业


专业代码


修读性质

学时


总学时


周学时


  学 分

讲授

实践实训

实验

计算机科学与技术

080901

选修

48

0

16

64

4

3.5

软件工程

080902

选修

(二)先修课程

1. Java程序设计

2.UML建模技术

(三)后续课程

1. Web程序设计

2. IT项目综合设计与实践

(四)课程简介

1. 课程开设依据

随着软件开发复杂度的增加,开发成本变得越来越大。在软件设计中如何提高代码的可复用性、可维护性、健壮性、安全性和可读性变得非常重要,GoF23种软件设计模式正好解决了其中的主要问题。设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,它为大学本科高年级学生有关软件设计提供必要的指导思想,使学生掌握代码编制真正工程化。如同大厦的结构一样,软件设计模式是软件工程的基石脉络正确使用软件设计模式能提高代码的可重用性、让代码更容易被他人理解、保证代码可靠性。本门课程是计算机科学与技术专业、软件工程专业开设的一门专业课,具体实现语言可以是JavaC++C#

2. 课程目的

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

3. 课程主要内容

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

二、课程目标

(一)知识目标

1. 使学生理解7种面向对象的设计原则与面向对象的编程技术。

2. 使学生理解GoF23种软件设计模式的定义与特点、结构与实现,以及模式的应用场景、应用实例与扩展方向。

3. 使学生掌握应用5种常见的创建型模式的使用方法。

4. 使学生掌握应用7种常见的结构型模式的使用方法。

5. 使学生掌握应用11种常见的行为型模式的使用方法。

(二)能力目标

1. 使学生学会应用7种面向对象的设计原则进行面向对象的编程。

2. 使学生掌握代码编制真正工程化技术,为今后项目开发打下基础

3. 使学生掌握综合应用GoF23种软件设计模式进行IT项目的综合设计与实践。

(三)情感目标

1. 激发学生对软件设计模式的兴趣,提升学生的专业忠诚度;

2. 培养学生对代码的重用性、可读性、可靠性、可扩展性、可维护性的重视,提升程序设计质量意识;

3. 培养学生良好的程序设计素养、服务社会意识,提升学生服务社会的能力

三、课程内容

1设计模式基础

教学内容

教学方式

教学内容需掌握程度

教学主要手段

学时数

作业

软件设计模式概述

理论

了解

PPT投影讲授

理论: 6

实验: 2

习题

UML中的类图

理论

熟悉

PPT投影讲授

面向对象的设计原则

理论+实训

掌握

PPT投影、程序演示

2创建型模式(上)

教学内容

教学方式

教学内容需掌握程度

教学主要手段

学时数

作业

创建型模式概述

理论

了解

PPT投影讲授

理论: 4

实验: 2

习题、编写程序

单例模式

理论+实训

掌握

PPT投影、程序演示

原型模式

理论+实训

掌握

PPT投影、程序演示

3创建型模式(下)

教学内容

教学方式

教学内容需掌握程度

教学主要手段

学时数

作业

工厂方法模式

理论+实训

掌握

PPT投影、程序演示

 

理论: 6

实验: 2

 

 

习题、编写程序

 

抽象工厂模式

理论+实训

掌握

PPT投影、程序演示

建造者模式

理论+实训

熟悉

PPT投影、程序演示

4结构型模式(上)

教学内容

教学方式

教学内容需掌握程度

教学主要手段

学时数

作业

结构型模式概述

理论

了解

PPT投影讲授

理论: 6

实验: 2

习题、编写程序

代理模式

理论+实训

掌握

PPT投影、程序演示

适配器模式

理论+实训

掌握

PPT投影、程序演示

桥接模式

理论+实训

熟悉

PPT投影、程序演示

5结构型模式(下)

教学内容

教学方式

教学内容需掌握程度

教学主要手段

学时数

作业

装饰模式

理论+实训

掌握

PPT投影、程序演示

理论: 6

实验: 2

习题、编写程序

外观模式

理论+实训

熟悉

PPT投影、程序演示

享元模式

理论+实训

掌握

PPT投影、程序演示

组合模式

理论+实训

熟悉

PPT投影、程序演示

6行为型模式(上)

教学内容

教学方式

教学内容需掌握程度

教学主要手段

学时数

作业

行为型模式概述

理论

了解

PPT投影讲授

理论: 6

实验: 2

习题、编写程序

模板方法模式

理论+实训

熟悉

PPT投影、程序演示

策略模式

理论+实训

掌握

PPT投影、程序演示

命令模式

理论+实训

掌握

PPT投影、程序演示

7章  行为型模式(中)

教学内容

教学方式

教学内容需掌握程度

教学主要手段

学时数

作业

职责链模式

理论+实训

掌握

PPT投影、程序演示

理论: 8

实验: 2

习题、编写程序

状态模式

理论+实训

熟悉

PPT投影、程序演示

观察者模式

理论+实训

掌握

PPT投影、程序演示

中介者模式

理论+实训

掌握

PPT投影、程序演示

8行为型模式(下)

教学内容

教学方式

教学内容需掌握程度

教学主要手段

学时数

作业

迭代器模式

理论+实训

掌握

PPT投影、程序演示

理论: 6

实验: 2

习题、编写程序

访问者模式

理论+实训

熟悉

PPT投影、程序演示

备忘录模式

理论+实训

掌握

PPT投影、程序演示

解释器模式

理论+实训

熟悉

PPT投影、程序演示

四、课程评价

(一)课程百分制评价方式

考核项目

考核标准

考核方法

评分比例范围

过程考核

学习态度

是否认真

是否积极参与

回答问题

讨论

5%

上课考勤

是否出勤

是否迟到早退

课堂考勤

5%

作业

是否完成作业

作业完成情况

作业批改

10%

实验成绩

是否完成实验

实验完成情况

实验报告批改

10%

结果考核

期末考试

卷面成绩

闭卷考试

70%

总评成绩

100

(二)期末考试题型和比例

考试题型

分数比例范围

举例

名词解释

0-10%

单一职责原则:

单选题

10-30%

关于模式适用性,在以下情况不适合使用COMMAND(命令)模式?(   )

A.抽象出待执行的动作以参数化某对象,使用过程语言中的回调(callback)函数表达这种参数化机制。

B.Java语言中的:AWT的事件处理。

C.在需要用比较通用和复杂的对象指针代替简单的指针的时候。

  D. 一个系统需要支持交易(transaction),一个交易结构封装了一组数据更新命令。

多选择题

0-20%

使用原型(Prototype)模式时以下那些属于要考虑的问题?(       )

A. 使用一个原型管理器

B. 实现克隆操作

C. 初始化克隆对象

D. 用类动态配置应用

填空题

10-20%

当桥接模式的实现化角色的接口与现有类的接口不一致时,可以在二者中间定义一个(       )将二者联接起来。

简答题

0-15%

设计模式按类型分为哪三类?简要叙述各类型的含义。

程序分析题

0-15%

分析以下程序源代码:

interface Aggregate {

Iterator createIterator();

}

interface Iterator

{

void first();

void next();

boolean hasNext();

Object currentItem();

}

class ConcreteAggregate  implements  Aggregate

{

   private Object[] obj={"筷","杯","锅”,"碗","瓢","盆"};

   public Iterator createIterator() {

      return new ConcreteIterator();

}   

   private class ConcreteIterator  implements Iterator  {

     private int currentIndex=0;   

       public void first() {

  currentIndex=0;

}   

   public void next() {

if(currentIndex<obj.length){ currentIndex++; }

}

   public boolean hasNext(){

  return currentIndex<obj.length;

}

   public Object currentItem(){

return obj[currentIndex];

   }

   }

}

class Client

{

public static void process(Aggregate  a)

{

Iterator i=a.createIterator();

while(i.hasNext())

{

System.out.println(i.currentItem().toString());

i.next();

}

}

public static void main(String a[])

{

Aggregate  a=new ConcreteAggregate();

process(a);

}

}

要求:1) 说明选择了什么设计模式?

      2)画出其结构图。

编程题

0-15%

分析以下类图:

z66_WyTourStrategy.jpg

要求:1) 说明选择了什么设计模式?

      2)写出其程序代码。

综合设计题

10-25%

某房地产公司欲开发一套房产信息管理系统,根据如下描述选择合适的设计模式进行设计:

1) 该公司有多种房型,如公寓、别墅等,在将来可能会增加新的房型;

2) 每售出一套房子,主管将收到相应的销售消息,销售人员增加奖金。

要求:(1)正确选择设计模式

(2)画出其类图

五、课程资源

(一)教材

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


软件设计模式(Java版)3.jpg

(二)参考书目

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

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

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

网站

1. 教学资源网址http://www.ryjiaoyu.com/book/details/8402