首页计算机计算机软件设计模式 01 第一部分 设计模式基础.pptx

01 第一部分 设计模式基础.pptx

页数:36页文件大小:384.7 KB来源: 设计模式ppt课件

本课件为课程的基础部分,先说明面向对象设计的层次与变化复用问题,再讲类间关系的UML表示、抽象封装与开闭等设计原则,最后交代设计模式的定义、三类分类与名称、场景、方案、效果四要素。

设计模式课程封面页,标示课程名称与可复用面向对象软件基础的主题定位
第一部分设计模式基础目录,列出面向对象设计与复用、UML表示、OO设计原则等五节内容
面向对象设计与复用章节页,说明框架级、类级与代码级三个设计层次及变化对维护性的影响
查看本课件的文字版(共 36 页,供检索与复制)

第1页:设计模式课程封面

《设计模式》

第2页:第一部分 设计模式基础

第一部分设计模式基础

  • §1.1面向对象设计与复用
  • §1.2设计的模式
  • §1.3类设计的UML表示
  • §1.4 OO设计的原则
  • §1.5设计模式说明
  • 分类方法
  • 四个要素

第3页:1.1 面向对象设计与复用

§1.1面向对象设计与复用

  • 面向对象设计的层次
  • 框架级设计
  • 类设计
  • 代码设计
  • 类设计中考虑哪些问题?
  • 如何进行类设计
  • 类设计中难点在于—变化的存在
  • 变化与维护性

第4页:类设计考虑的问题

类设计考虑的问题

  • 类的组织与表示
  • 类的发现
  • 聚类分析
  • 类的再抽象
  • 类的拆分
  • 类的可见性
  • 类的复用性
  • 行为的组织与表示
  • 行为的参与者
  • 行为的分组与接口
  • 行为的分解
  • 行为的可见性
  • 行为的返回结果
  • 行为的差异
  • 属性的组织与表示
  • 本征属性
  • 可计算属性
  • 复合属性
  • 只读/只写属性
  • 不变属性
  • 类变量与类属性
  • 设计时属性与运行时属性

第5页:变化与复用

变化与复用

  • 变化
  • 职责的变化(接口、功能的变化)
  • 实现的变化(数据表示、行为的变化)
  • 变化的适应方式
  • 修改既有代码的缺点
  • 既有代码的获取问题
  • 改变实现的顾虑
  • 改变接口的顾虑
  • 扩展既有代码
  • 继承方式扩展
  • 依赖方式扩展
  • 关联方式扩展
  • 聚合方式扩展
  • 组合方式扩展
  • 复用的价值

第6页:面向对象复用示意

面向对象的复用mainClassClassClassClass

第7页:1.2 模式的层次

§1.2模式的层次

  • 框架(Framework)
  • MVC及Document/View
  • COM/DCOM/EJB/…
  • 其它(Spring、Hibernate等)
  • 设计模式
  • 微模式

第8页:微模式示例

微模式(Micro Pattern)例If ( ord == 0 ) {}else if (ord ==2) {}else if (ord ==60) {} else {}switch ( ord ) {case 0:break;case ‘A’:break;case ‘\0’:break;default:break;}

第9页:1.3 类间关系及UML表示

§1.3类间关系及UML表示

  • 关联关系(水平关系,类级关系)
  • 普通关联
  • 部分/整体关联
  • 依赖关系(水平关系,实例级关系)
  • 泛化关系(垂直关系)
  • 父类和子类
  • 抽象类和具体类
  • 实现关系
  • 接口类与实现类
  • 模版与模版类

第10页:双向关联关系

普通关联双向关联关系class A {private:B * pB1;B * pB2;};class B {private:A * pA;};

第11页:双向多对多关联

普通关联双向多对多关联关系

第12页:单向关联(相识关系)

单向关联(相识关系)单向关联关系class A {private:B * pB;};class B {};

第13页:组合(合成)关系

组合(合成)关系1)B是A的组成部分;2)A负责B的生存与消亡如:人由头、颈、躯干、四肢组成。例:class A {Public:A() : pB(new B) { }~A() { delete pB; }};

第14页:聚集(聚合)关系

聚集(聚合)关系1)B是A的组成部分;2)但A不负责B的生存与消亡。即A存在时,B可以不存在;B存在时,A也可以不存在;如:计算机包括CPU,内存,网卡等。其中的网卡就可独立

第15页:依赖关系(实例级关联)

依赖关系(实例级关联)#include “B.h”class A {public:void Func(B & b);};

第16页:泛化关系

泛化关系class A1 {};class B1:public A1 {};

第17页:实现关系

实现关系class IA {Public:virtual void func1() = 0;virtual void func2() = 0;};class A:public IA{public:virtual void func1() { }virtual void func2() { }};

第18页:1.4 OO设计的原则

§1.4 OO设计的原则

  • 基本原则
  • 抽象与封装原则
  • 接口编程,而不是针对实现编程
  • 组合优先原则(而不是继承)
  • 单一职责原则(The single responsibility)
  • 开闭原则(Open-Close Principle)
  • 里氏替换原则(The Liskov substitution)
  • 依赖倒转原则
  • 多接口分离原则
  • 迪米特法则(委托而不是直接交互)

第19页:OO设计的基本原则

基本原则

  • 抽象与封装原则
  • 分离稳定与变化
  • 封装变化
  • 抽象变化接口
  • 针对接口编程,而不是针对实现编程
  • 组合优先原则(而不是继承)

第20页:分离稳定与变化

分离稳定与变化

  • 职责是否变化
实现是否变化Class Clock {Public:void SetDate() { }void SetTime() { }void Draw( ) {DrawDate() ; DrawTime(); }Protected:void DrawDate() { }void DrawTime() { }private:Date dt;Time tm;};

第21页:抽象接口IClock与BaseClock

class IClock {public:virtual void SetCurrent();virtual void Draw( );};Class BaseClock : public IClock {public:void SetCurrent() {SetDate();SetTime();}void SetDate() { }void SetTime() { }void Draw( ) {DrawDate() ;DrawTime();}protected:void DrawDate() { }void DrawTime() { }private:Date dt;Time tm;};

第22页:针对接口编程

针对接口编程Class MyClass {Private:IClock * aClock;//不采用BaseClock * aClock;};

第23页:组合优先原则

组合优先class A {//…};class EA {private:A * aA;};class EA :public A {};

第24页:单一职责原则

单一职责原则(The singleresponsibility)

  • 类的职责不要过多
  • 单一职责可有效降低类间的耦合度,提高内聚度
  • 职责的划分不可过于机械

第25页:开闭原则

开闭原则(Open-Close Principle)

  • 对扩展开放,对修改关闭
  • 禁止修改,允许扩展
  • 这是我们的追求!!!

第26页:里氏替换原则

里氏替换原则(The Liskovsubstitution)

  • 任何出现父类的地方,均可用子类替换;
  • 必须正确地使用继承
  • 限制RTTI的使用

第27页:依赖倒转原则

依赖倒转原则

  • 倒转是指:与结构化设计方法正好相反;
  • 结构化中依赖:高层依赖于底层具体实现;
  • OO中依赖:高层只依赖于底层的抽象类和接口;即底层的实现类依赖抽象类和接口。

第28页:依赖倒置示意

依赖倒置说明

第29页:多接口分离原则

多接口分离原则

  • 一个接口类的职责不要太多
  • 可分为多个接口
  • 使变化更灵活,提高移植性

第30页:

第31页:使用多接口

使用多接口

第32页:迪米特法则

迪米特法则(委托而不是直接交互)

  • 交互过多,将增加类的耦合度
  • 引入中间类,负责交互工作,降低耦合度

第33页:

第34页:

第35页:1.5 设计模式说明

§1.5设计模式说明

  • 什么是设计模式
  • 分类方法
  • 行为型模式
  • 结构型模式
  • 创建型模式
  • 四个要素
  • 模式名称
  • 应用场景
  • 解决方案
  • 效果及说明

第36页:对象生命周期与模式分类

对象生命周期与设计模式的对应关系
生命周期阶段对应的模式类别
类模版 → 模版类 → 具体类结构型模式(关注如何分解、组织、封装各个类)
类对象的实例化、初始化创建型模式
类的行为行为型模式
销毁—
顶部目录