面向对象的软件工程PPT.ppt
《面向对象的软件工程PPT.ppt》由会员分享,可在线阅读,更多相关《面向对象的软件工程PPT.ppt(79页珍藏版)》请在三一办公上搜索。
1、面向对象的软件工程,第1章 面向对象的概念和原则,1.2 面向对象的概念,消息消息是指对象间相互联系和相互作用的方式。一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。,4.9 模式编程介绍,程序设计是思维具体化的一种方式,是思考如何解决问题的过程,设计模式是在解决问题的过程中,一些良好思路的经验集成,最早讲设计模式,人们总会提到 Gof 的著作,它最早将经典的 23 种模式集合在一起说明,对后期学习程序设计,尤其是对从事对象导向程序设计的人们起了莫大的影响。面向对象的设计模式主要有三种:创建(Creational)模式。结构(Structural
2、)模式。行为(Behavioral)模式。,4.9 模式编程介绍,创建(Creational)模式对象的产生需要消耗系统资源,所以如何有效率的产生、管理与操作对象,一直都是值得讨论的课题,Creational 模式即与对象的建立相关,在这个分类下的模式给出了一些指导原则及设计的方向。在这里主要介绍创建(Creational)模式中的:单态(Singleton)模式简单工厂(Simple Factory)模式,4.9 模式编程介绍,单态(Singleton)模式动机在软件系统中,经常有这样一些特殊的类,必须保证它在整个系统中只存在一个实例,才能确保它们的逻辑正确性以及良好的效率。如何绕过常规的构
3、造器,提供一种机制来保证一个类只有一个实例?这应该是类设计者的责任,而不是使用者的责任!,4.9 模式编程介绍,单态(Singleton)模式意图保证一个类仅有一个实例,并提供一个该实例的全局访问点。设计模式GoF,4.9 模式编程介绍,单态(Singleton)模式单态(Singleton)模式的UML结构类图如下:,4.9 模式编程介绍,单态(Singleton)模式单态(Singleton)模式的几个要点:Singleton模式中的实例构造器可以根据需要设计成protected以允许子类派生。Singleton模式只考虑到了对象创建的管理,没有考虑到对象销毁的管理。就支持垃圾回收的平台和
4、对象的开销来讲,我们一般没有必要对其销毁做特殊的管理。不能应对多线程环境:在多线程环境下,使用Singleton模式仍然有可能得到Singleton类的多个对象。,4.9 模式编程介绍,简单工厂(Simple Factory)模式 new的问题常规的对象创建方法:A a=new A();new的问题:实现依赖,不能应对“具体实例化类型”的变化。解决思路:封装变化点(哪里变化,封装哪里)。潜台词:如果没有变化,当然不需要额外的封装。,4.9 模式编程介绍,简单工厂(Simple Factory)模式工厂模式的缘起变化点在对象创建,因此就封装对象创建。面向接口编程依赖接口,而非依赖具体实现。Sim
5、ple Factory模式(又称Static Factory模式)就是应用的这种方式。一个Simple Factory生产成品,而对客户端隐藏产品产生的细节。实现时定义一个产品接口(interface),并透过特定静态方法来建立成品。,4.9 模式编程介绍,简单工厂(Simple Factory)模式假设有一个八音盒工厂,购买八音盒的客人不用知道八音盒是如何制作的,他只要知道如何播放八音盒就可以了,以 UML 类别图来表示以上的概念:,父类Sample 子类 MySample MySampleSample mysample=new MySample();Sample hissample=new
6、 HisSample();public class Factorypublic static Sample creator(int which)/getClass 产生Sample 一般可使用动态类装载装入类。if(which=1)return new SampleA();else if(which=2)return new SampleB();Sample sampleA=Factory.creator(1);,1.4 设计模式介绍,结构(Structural)模式如何设计对象之间的静态结构,如何完成对象之间的继承、实现与依赖关系,这关乎着系统设计出来是否健壮(robust):像是易懂、易维
7、护、易修改、耦合度低等等议题。Structural 模式正如其名,其分类下的模式给出了在不同场合下所适用的各种对象关系结构。适配器(Adapter)模式桥(Bridge)模式组合(Composite)模式,1.4 设计模式介绍,适配器(Adapter)模式适配(转换)的概念无出不在适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。,1.4 设计模式介绍,适配器(Adapter)模式动机:在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同
8、时又能满足新的应用环境所要求的接口?适配器(Adapter)模式可以分为以下三种:1.默认适配器(Default Adapter)模式2.对象适配器(Object Adapter)模式3.类适配器(Class Adapter)模式,1.4 设计模式介绍,适配器(Adapter)模式将一个类的接口转换成客户希望的另一个借口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。设计模式GoF类适配器(Adapter)模式的UML结构图如下所示:,1.4 设计模式介绍,Adapter模式的几个要点1.Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境不
9、一致”的情况,在遗留代码重用、迁移类库方面有用。2.类适配器采用“多继承”方式,带来了高耦合,不推荐使用。对象适配器采用“对象组合”的方式,更符合“松耦合”精神。3.Adapter模式实现方式可以非常灵活。例如,完全可以将Adapter模式中的“现存对象”作为新的接口方法参数来达到适配的效果。4.Adapter模式本身要求我们尽可能地使用“面向接口编程”的风格,这样才能在后期很方便地适配。,1.4 设计模式介绍,桥(Bridge)模式抽象与实现抽象不应该依赖于实现细节,实现细节应该依赖于抽象。抽象A稳定 实现细节b变化问题在于如果抽象B由于固有的原因,本身也不稳定,也可能面临变化,这时怎么办?
10、,1.4 设计模式介绍,桥(Bridge)模式举例来说,假如我们需要开发一个同时支持PC和电视的坦克游戏,游戏在PC和电视上的功能都一样,都有同样的类型,都面临同样的功能需求变化,比如坦克有多种不同的型号:A,B,C等等。对于坦克的设计,我们能够很容易的设计出来一个坦克的接口,然后不同类型的坦克都实现这个接口:/抽象部分/各种坦克的实现public interface ITank public class TankA implementsITank/public void shot();public class TankB implementsITank/public void move();
11、public class TankC implementsITank/抽象部份指的是行为方面定义,实现方面指的是与特定平台相依的代码实现。,1.4 设计模式介绍,桥(Bridge)模式另外变化的原因PC和电视上的图形绘制、声效、操作等实现都不一样,因此对于各种型号的坦克,都要提供各种不同平台上的具体实现。这样的设计会有很多问题:有很多重复代码,类的结构过于复杂,难以维护,最致命的是如果引入任何新的平台,比如手机上的坦克游戏,都会让整个类的层次结构变的异常复杂。,1.4 设计模式介绍,桥(Bridge)模式动机思考上述问题的症结所在:事实上,由于Tank类型的固有逻辑,使得Tank类型具有了两个
12、变化的维度一个维度的变化为型号的变化,一个维度的变化是运行平台的变化。如何应对这种“多维的变化”?如何运用面向对象的技术使得Tank类型可以轻松地沿着“型号”和“平台”两个方向来变化,而不引入额外的复杂度?“将抽象部份与它的实现部份分离,使它们都可以独立地变化。”设计模式GoF,1.4 设计模式介绍,桥(Bridge)模式桥(Bridge)模式的要点1.Bridge模式使用“对象间的组合关系”解耦了抽象与实现之间固有的绑定关系,使得抽象(Tank的型号)和实现(不同的平台)可以沿着各自的维度来变化。2.所谓抽象和实现沿着各自的维度变化,即“子类化”它们。比如不同的Tank型号子类,和不同的平台
13、子类。得到各个子类之后,便可以任意组合它们,从而获得不同平台上的不同型号。3.Bridge模式一般应用在“两个非常强的变化纬度”,有时候即使有两个变化的纬度,但是某个方向的变化纬度并不剧烈换言之两个变化不会导致纵横交错的结果,并不一定要使用Bridge模式。,1.4 设计模式介绍,组合(Composite)模式在面向对象系统中,我们经常会遇到一些具有“容器”特征的对象即它们在充当对象的同时,又是其它对象的容器。,1.4 设计模式介绍,组合(Composite)模式处理这样问题的一般方法是在作为容器的对象中使用诸如ArrayList等集合类,在客户端代码中判断该对象是否是对象容器,然后再进行相应
14、的处理。动机上述问题的根源在于:客户代码过多地依赖于容器对象内部的复杂结构,一旦发生变化,将会引起客户端代码的大量变动。如何让客户代码像使用简单对象一样来使用对象容器呢?将对象组合成树型结构以表示“整体-部分”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。设计模式GoF,1.4 设计模式介绍,组合(Composite)模式Composite 模式的要点:1.Composite 模式采用树形来实现普遍存在的容器对象,从而将“一对一”的关系转化成“一对多”的关系,使得客户代码一致地处理对象和对象容器,无须关心是单个对象还是容器对象。2.将“客户代码与复杂的对象容器”解
15、耦是Composite 模式的核心思想。解耦之后,客户代码将与纯粹的抽象接口而非对象容器的复杂内部结构发生依赖关系,从而更能应对变化。,2.7 设计模式,装饰(Decorator)模式假如我们要为一款游戏开发一种坦克,除了要有不同的型号外,还希望使不同型号的坦克能够在不同的场合动态地增加功能:比如红外线、特殊材料的钢板等等。一般的作法如下:/坦克接口/各种不同功能的组合public interface ITank public class Tank1A implements ITank,IApublic void shot();public class Tank2A implements IT
16、ank,IA/各种坦克的型号public class Tank1 implements ITank/public class Tank2 implements ITank/,2.7 设计模式,装饰(Decorator)模式动机:这种作法的问题在于:随着需要增加的功能的增加,需要继承或实现的抽象类或接口会不断增加,会导致子类的增加,如果要对不同的功能进行组合,将会导致更多的子类的膨胀。如何使“对象功能的扩展”能够根据需要动态地实现?同时避免子类膨胀问题?从而使得“扩展功能变化”导致的影响降为最低?动态地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类更为灵活。设计模
17、式GoF,2.7 设计模式,装饰(Decorator)模式装饰(Decorator)模式的UML结构图如下:,2.7 设计模式,装饰(Decorator)模式装饰(Decorator)模式的几个要点:1.通过采用组合而非继承的手法,Decorator模式实现了在运行时动态地扩展对象功能的能力,而且可以根据需要扩展多个功能。2.Component类在Decorator模式模式中充当抽象接口的角色,不应该去实现具体的行为。而且Decorator类相对于Component类应该透明换言之Component类无需知道Decorator类,Decorator类是从外部扩展Component类的功能。3.
18、Decorator模式应用的要点在于解决“主体类在多个方向上的扩展功能”是为“装饰”的含义。,2.7 设计模式,外观(Facade)模式系统的复杂度假设我们开发一个坦克模拟系统用于模拟坦克在各种不同的作战环境中的行为,其中坦克系统由引擎、控制器、车轮、车身等各子系统构成。如何设计这样的系统 A方案 B方案,2.7 设计模式,外观(Facade)模式动机上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和子系统的演化,这种过多的耦合面临很多变化的挑战。如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦?为子系统
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 软件工程 PPT

链接地址:https://www.31ppt.com/p-6034413.html