Presentation is loading. Please wait.

Presentation is loading. Please wait.

周宇 南京航空航天大学 zhouyu@nuaa.edu.cn 软件设计模式与体系结构 周宇 南京航空航天大学 zhouyu@nuaa.edu.cn.

Similar presentations


Presentation on theme: "周宇 南京航空航天大学 zhouyu@nuaa.edu.cn 软件设计模式与体系结构 周宇 南京航空航天大学 zhouyu@nuaa.edu.cn."— Presentation transcript:

1 周宇 南京航空航天大学 zhouyu@nuaa.edu.cn
软件设计模式与体系结构 周宇 南京航空航天大学

2 先修课程 课程内容 软件设计方法学演化简介 软件设计模式概念、分类与案例 软件体系结构概念、模型与风格 软件工程(SE) 程序设计语言
统一建模语言(UML) 面向对象技术(OO) 课程内容 软件设计方法学演化简介 软件设计模式概念、分类与案例 软件体系结构概念、模型与风格

3 课程周期 32学时:4*8(1-8周) 课程设计 教材及参考 Design Patterns - Elements of Reusable Object- Oriented Software, Erich Gamma Richard Helm, Ralph Johnson John Vlissides 著, 机械工业出版社 Software Architecture – Perspectives on an Emerging Discipline. Mary Shaw, David Garlan著, 清华大学出版社.

4 目录 软件设计方法演化 软件设计模式 软件体系结构

5 软件设计方法演化 程序设计语言演化 软件设计方法演化 软件生产力提升

6 程序设计语言演化 机器语言 汇编语言 高级语言:面向过程式 高级语言:面向对象式 program = (1|0)+
program = (opcode (operand)*)* 高级语言:面向过程式 program = data structure and algorithm 高级语言:面向对象式 program = (object) + 程序设计是软件开发的基础,程序设计语言是程序开发的基本工具。

7 软件设计方法演化

8 软件生产力提升

9 软件生产力提升 例:Implementing Keyword in Context (KWIC)

10 Implementing KWIC (2)

11 Implementing KWIC (3)

12 Implementing KWIC (4)

13 软件设计模式 概念定义 基本要素 依据原则 分类讲解 模式协作

14 什么是设计模式 模式就是得到很好研究的范例 设计模式是软件开发过程中经验的积累 特定问题的经过实践检验的特定解决方法 走为上策 围魏救赵
声东击西 设计模式是软件开发过程中经验的积累 特定问题的经过实践检验的特定解决方法

15 软件中的设计模式 在建筑行业中,如何描述设计 模式: 在软件行业中,如何描述设计 模式:
每一个模式描述了一个在我们周围 不断重复发生的问题,以及该问题 的解决方案的核心。 在软件行业中,如何描述设计 模式: 设计模式描述了软件设计过程中某 一类常见问题的一般性的解决方 案。 面向对象设计模式描述了面向 对象设计过程中,特定场景 下,类与相互通信的对象之间 常见的组织关系。

16 Gof23种设计模式 在面向对象的编程中使用 模式化方法研究的开创性 著作,是文献[GOF95] (中译本[GOF95Z])
《设计模式:可复用面 向对象软件的基础》 这四位作者通常被称为 “四人帮”(Gang of Four, 或GoF) Gof23种设计模式是学习 面向对象设计模式的起 点,而非终点

17 设计模式的原则 单一职责原则 (SRP) “开-闭”原则 (OCP) 里氏代换原则 (LSP) 接口隔离原则 (ISP)
依赖倒置原则 (DIP) 设计模式就是实现了上述原则,从而达到代码复用、增加可维护性的目的

18 单一职责原则(SRP) 就一个类而言,应该仅有一个引起它变化的原因
每一个引起类变化的原因就是一个职责,当类具有多职责时,应把多余职责分离出去,分别创建一些类来完成每一个职责 每一个职责都是一个变化的轴线,当需求变化时会反映为类的职责的变化 举例 interface Modem{ public void dial(String pno); public void hangup(); public send(char c); public char recv(); } Modem类有两个职责:连接管理和数据通信,应将它们分离

19 开闭原则(Open Close Principle)
定义:软件对扩展是开放的,对修改是关闭的。开发一个软件时,应可以对其进行功能扩展(开放),在进行扩展的时候,不需要对原来的程序进行修改(关闭) 好处:在软件可用性上非常灵活。可以在软件完成后对软件进行扩展,加入新的功能。这样,软件就可通过不断的增加新模块满足不断变化的新需求 由于不修改软件原来的模块,不用担心软件的稳定性

20 开闭原则(OCP)的实现途径 抽象:把系统的所有可能的行为抽象成一个底层;由于可从抽象层导出一个或多个具体类来改变系统行为,因此对于可变部分,系统设计对扩展是开放的 可变性封装:对系统所有可能发生变化的部分进行评估和分类,每一个可变的因素都单独进行封装

21 Liskov替换原则(LSP) 定义:“继承必须确保超类所拥有的性质在子类中仍然成 立”,当一个子类的实例能够替换任何其超类的实例时,它们之 间才具有is-A关系 里氏替换原则是继承复用的基石,只有当派生类可以替换掉 其基类,而软件功能不受影响时,基类才能真正被复用,派生类 也才能够在基类的基础上增加新的行为

22 Liskov替换原则(LSP)的本质 LSP本质:在同一个继承体系中的对象应该有共同的行为特征 例子:企鹅是鸟吗? 生物学:企鹅属于鸟类
南京航空航天大学计算机科学与技术学院 黄志球 NUAA CIST

23 Liskov替换原则(LSP)的实现途径
南京航空航天大学计算机科学与技术学院 黄志球 NUAA CIST

24 接口隔离原则(ISP) 多个和客户相关的接口要好于一个通用接口
如果一个类有几个使用者,与其让这个类载入所有使用者需要使用的所有方法,还不如为每个使用者创建一个特定接口,并让该类分别实现这些接口

25 依赖倒置原则(DIP) 定义:高层模块不应依赖低层模块,二者都应该依赖于抽象
高层模块只应该包含重要的业务模型和策略选择,低层模块则是不同业务和策略的实现 高层抽象不依赖高层和低层模块的具体实现,最多只依赖于低层的抽象 低层抽象和实现也只依赖于高层抽象 辅助原则 任何变量都不应该持有一个指向具体类的引用 任何类都不应该从具体类派生 任何方法都不应覆盖其任何基类中已经实现了的方法

26 依赖倒置原则(DIP)的实现途径

27 设计模式的分类 划分标准:目的 创建型: 创建对象 结构型: 处理类或者对象的组合 行为型: 类或者对象如何交互和分配职责

28 设计模式的分类 (2) 创建型 行为型 结构型 Incomplete Coverage ! AbstractFactory Builder
FactoryMethod Prototype Singleton Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor 行为型 结构型 Adapter Bridge Composite Decorator Facade Flyweight Proxy 南京航空航天大学计算机科学与技术学院 黄志球 NUAA CIST

29 模式的基本要素 模式名称(Pattern Name)
问题(Problem):描述应该在何时使用模式。解释了设计问题和问题存在的前因后果,可能还描述模式必须满足的先决条件 解决方案(Solution):描述了设计的组成成分、相互关系及各自的职责和协作方式。模式就像一个模板,可应用于多种场合,所以解决方案并不描述一个具体的设计或实现,而是提供设计问题的抽象描述和解决问题所采用的元素组合(类和对象) 效果(consequences ):描述模式的应用效果及使用模式应权衡的问题

30 如何描述设计模式 模式名和分类 意图:设计模式是做什么的?它的基本原理和意图是什么?它解决的是什么样的特定设计问题?
动机:说明一个设计问题以及如何用模式中的类、对象来解决该问题的特定情景 适用性:什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计?如何识别这些情况? 结构:采用对象建模技术对模式中的类进行图形描述

31 描述设计模式(续) 参与者:指设计模式中的类 和/或 对象以及它们各自的职责 协作:模式的参与者如何协作以实现其职责
参与者:指设计模式中的类 和/或 对象以及它们各自的职责 协作:模式的参与者如何协作以实现其职责 效果:模式如何支持其目标?使用模式的效果和所需做的权衡取舍?系统结构的哪些方面可以独立改变? 实现:实现模式时需了解的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的问题 代码示例:用来说明怎样实现该模式的代码片段 相关模式:与这个模式紧密相关的模式有哪些?其不同之处是什么?这个模式应与哪些其他模式一起使用?

32 创建型设计模式 用来创建对象的模式,抽象了实例化过程
工厂方法模式:父类负责定义创建对象的公共接口,而子类则负责生成具体对象,将类的实例化操作延迟到子类中完成 抽象工厂模式:为一个产品族提供统一的创建接口。当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类 单件(Singleton)模式:保证一个类有且仅有一个实例,提供一个全局访问点

33 创建型设计模式 (2) 生成器(Builder)模式:将复杂对象创建与表示分离,同样的创建过程可创建不同的表示。允许用户通过指定复杂对象类型和内容来创建对象,用户不需要知道对象内部的具体构建细节 原型(Prototype)模式:通过“复制”一个已经存在的实例来返回新的实例(不新建实例)。被复制的实例就是“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据

34 结构型设计模式 结构型模式讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象来实现新的功能(对象结构型模式) 组合(Composite)模式:定义一个接口,使之用于单一对象,也可以应用于多个单一对象组成的对象组 装饰(Decorator)模式:给对象动态添加额外的职责,就好像给一个物体加上装饰物,完善其功能 代理(Proxy)模式:在软件系统中,有些对象有时候由于跨越网络或者其他障碍,而不能够或者不想直接访问另一个对象,直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切,这就是代理(Proxy)模式

35 结构型设计模式(2) 享元(Flyweight)模式:Flyweight是一个共享对象,它可以同时在不同上下文(Context)使用
外观(Facade)模式:外观模式为子系统提供了一个更高层次、更简单的接口,从而降低了子系统的复杂度,使子系统更易于使用和管理。外观承担了子系统中类交互的责任 桥梁(Bridge)模式:桥梁模式的用意是将问题的抽象和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题 适配器(Adapter)模式:将一个类的接口适配成用户所期待的接口。一个适配器允许因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包装在一个已存在的类中

36 行为型设计模式 着力解决的是类实体之间的通讯关系,希望以面向对象的方式描述一个控制流程
模版(Template ) 模式:定义了一个算法步骤,并允许子类为一个或多个步骤提供实现。子类在不改变算法架构的情况下,可重新定义算法中某些步骤 观察者(Observer)模式:定义了对象之间一对多的依赖,当这个对象的状态发生改变的时候,多个对象会接受到通知,有机会做出反馈 迭代子(Iterator)模式:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示

37 行为型设计模式 (2) 责任链(Chain of Responsibility)模式:很多对象由每一个对象对其下一个对象的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态的重新组织链和分配责任 备忘录(Memento)模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态 命令(Command)模式:将请求及其参数封装成一个对象,作为命令发起者和接收者的中介,可以对这些请求排队或记录请求日志,以及支持可撤销操作

38 行为型设计模式(3) 状态(State)模式:允许一个“对象”在其内部状态改变的时候改变其行为,即不同的状态,不同的行为
访问者(Visitor)模式:表示一个作用于某对象结构中的各元素的操作。可以在不改变各元素的类的前提下定义作用于这些元素的新操作 解释器(Interpreter) 模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子 中介者(Mediator)模式:用一个中介对象来封装一系列的对象交互 策略(Strategy)模式:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化

39 设计模式、体系结构、框架 框架(Framework)是整个或部分系统的可重用设计,具体表现为一组抽象构件及构件实例间交互的方法
构件是代码重用,而设计模式是设计重用,框架介于两者之间,部分代码重用,部分设计重用 设计模式比框架更为抽象,设计模式在碰到具体问题后才能产生代码;框架已经可以用代码表示 设计模式是比框架更小的体系结构元素,框架中可以包含多个设计模式

40 框架(Framework)与结构(Architecture)
框架是可实例化的、部分完成的软件系统或子系统,它为一组系统或子系统定义了统一的体系结构,并提供了系统的基本构造块,还为实现具体功能定义了扩展点 框架实现了体系结构级别的复用

41 框架(Framework)与模式(Pattern)
从应用领域上分,框架给出的是整个应用的体系结构;而设计模式则给出了单一设计问题的解决方案 从内容上分,设计模式仅是一个单纯的设计,这个设计可被不同语言以不同方式来实现;而框架则是设计和代码的混合体 设计模式比框架更容易移植:框架一旦设计成形,以其为基础进行应用的开发就要受制于框架的实现环境;而设计模式是与语言无关的,所以可以在更广泛的异构环境中进行应用 总之,框架是软件,而设计模式是软件的知识体,设计模式的合理利用可以提升框架的设计水平


Download ppt "周宇 南京航空航天大学 zhouyu@nuaa.edu.cn 软件设计模式与体系结构 周宇 南京航空航天大学 zhouyu@nuaa.edu.cn."

Similar presentations


Ads by Google