欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    4e-08UML与设计模式.ppt

    • 资源ID:80589811       资源大小:382KB        全文页数:81页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    4e-08UML与设计模式.ppt

    第八章第八章 UML与与设计模式设计模式王少锋Email:2003年12月4日面向对象技术与应用课程讲义81主要内容主要内容 基本概念基本概念 设计模式实例分析设计模式实例分析 Facade设计模式设计模式 Abstract Factory设计模式设计模式 Visitor设计模式设计模式 在在Rose中使用设计模式中使用设计模式2什么是设计模式什么是设计模式定义:A design pattern is a proven generalized solution to a generalized problem that can be used to derive a specific solution to a specific problem.简单地说:Pattern=problem/solution pairs in a context3说明:设计模式是可重用的设计经验的总结,已在实际的系统中多次得到成功应用。设计模式一般是针对用面向对象技术的。设计模式不只是关于孤立的对象的设计,还强调对象之间的通信。设计模式突出了OO设计中的封装、泛化、多态等概念,学习设计模式,必须清楚这些概念的使用。设计模式通常都很小,只涉及几个类。4设计模式的历史设计模式的历史设计模式设计模式的概念最早是由建筑师克里斯托夫亚历山大(Christopher Alexander)提出来的(70年代后期)。Each pattern describes a problem which occurs over and over again in our environment,and then describes the core of the solution to that problem,in such a way that you can use this solution a million times over,without ever doing it the same way twice.模式语言(A Pattern Language)Erich Gamma博士论文(1991)的部分工作开始对设计模式进行分类整理5E.Gamma,R.Helm,R.Johnson,and J.Vlissides 等四人合著的“Design Patterns:Elements of Object-Oriented Software”Addison-Wesley,1995The Gang of Four(GoF)patterns书的中、英文电子版在ftp上理解设计模式已成为任何面向对象软件开发人员所必需具备的重要素质之一。6使用设使用设计模式的好处计模式的好处1.Simplify and speed-up design(简化和加快了设计)无需从底层做起,从设计模式入手可以节省时间,提高开发质量。2.Facilitate communications between designers(方便了设计者之间的通信)更准确地描述问题和它们的解决方案,使解决方案具有一致性,使代码更容易理解。开发人员可以在更高的层次上来思考问题和讨论方案。例:“建议用Visitor模式来解决这个问题”3.Reduce risk(降低风险)4.Patterns help ease the transition to object-oriented technology.(有助于转到OO技术)7设计模式的分类设计模式的分类GoF中共有23个设计模式,这些模式可以按两个准则来分类:1.按设计模式的按设计模式的purpose来来分类分类:分为创建型模式,结构型模式和行为型模式三种。2.按设计模式的按设计模式的scope来划分来划分:即根据设计模式是作用于类还是作用于对象,把设计模式分为类设计模式和对象设计模式。8Purpose对象创建型结构型行为型类ScopeFactory MethodAbstract FactoryBuilderPrototypeSingletonAdapterAdapterBridgeCompositeDecoratorFacadeFlyweightProxyInterpreterTemplate MethodChain of ResponsibilityCommandIteratorMediatorMementoObserverStateStrategyVisitor设计模式的分类表:设计模式的分类表:9创建型模式创建型模式创建型模式创建型模式(Creational pattern):Creational design patterns abstract the instantiation process.They help make a system independent of how its objects are created,composed,and represented.创建型模式创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。创建型模式包括:Factory Method(工厂方法)Abstract Factory(抽象工厂)Builder(生成器)Prototype(原型)Singleton(单件)10结构型模式结构型模式结构型模式结构型模式(Structural pattern):Structural patterns are concerned with how classes and objects are composed to form larger structures.结构型模式结构型模式涉及到如何组合类和对象以获得更大的结构。结构型模式包括:Adapter(适配器)Bridge(桥接)Composite(组成)Decorator(装饰)Facade(外观)Flyweight(享元)Proxy(代理)11行为型模式行为型模式行为型模式行为型模式(behavioral pattern):Behavioral patterns are concerned with algorithms and the assignment of responsibilities between objects.Behavioral patterns describe not just patterns of objects or classes but also the patterns of communication between them.行为型模式行为型模式涉及到算法和对象间职责的分配。行为型模式行为型模式不仅描述对象或类的模式,还描述它们之间的通信模式。12行为型模式包括:Chain of Responsibility(职责链)Command(命令)Interpreter(解释器)Iterator(迭代器)Mediator(中介者)Memento(备忘录)Observer(观察者)State(状态)Strategy(策略)Template method(模板方法)Visitor(访问者)13说明:在GoF所著的书中,采用下面的固定格式来描述每个模式:Pattern Name and Classification(模式名和分类)Intent(目的)一、二句话的简单陈述:设计模式是做什么的?它的基本原理和目的是什么?它解决的是什么样的特定设计问题?Also Know As(别名)Motivation(动机)给出一个具体的设计问题,并说明如何该模式中这个特定问题。Applicability(适用性)什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计?怎样识别这些情况?Structure(结构)采用OMT的表示法(UML?下一版本?)14Participants(参与者)指设计模式中的类和/或对象以及它们各自的职责。Collaborations(协作)模式的参与者怎样协作以实现它们的职责。Consequences(结果)使用模式的效果和所需做的权衡取舍?Implementation(实现)实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的问题。Sample code(示例代码)大部分的示例代码是C+,有一小部分是Smalltalk。Known Uses(已知的应用)实际系统中发现的使用该模式的例子。Related Patterns(相关模式)15设计模式中使用的两个设计模式中使用的两个OO设计原则设计原则1.Program to an interface and not to an implementation.(针对接口编程,而不是针对实现编程)2.Favor object composition over inheritance.(优先使用对象组合,而不是使用继承)16说明:Liskov替换原则(Liskov Substitution Principle)是“针对接口编程,而不是针对实现编程”的基础。Liskov替换原则:Derived classes must be usable through the base class interface without the need for the user to know the difference.图例:17Liskov替换原则的图示说明:18主要内容主要内容 基本概念基本概念 设计模式实例分析设计模式实例分析 Facade设计模式设计模式 Abstract Factory设计模式设计模式 Visitor设计模式设计模式 在在Rose中使用设计模式中使用设计模式19Facade设计模式设计模式Facade设计模式设计模式属于对象结构型设计模式。intent:Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。20引入Facade对象后Client和子系统之间通信关系的变化:client classessubsystem classes21说明:Client通过调用Facade中的方法来和子系统通信。Client很少直接存取子系统中的对象。子系统中的对象不需要了解关于Client的知识。子系统中对象不需要了解关于Facade对象的知识,即没有指向Facade的引用。引入Facade对象可以降低Client和子系统之间相互依赖关系,降低系统的耦合度,增加了系统的灵活性。22Facade设计模式中的参与者(Participant)为Facade和 subsystem classes:1.Facade:knows which subsystem classes are responsible for a request.delegates client requests to appropriate subsystem objects.2.subsystem classes implement subsystem functionality.handle work assigned by the Facade object.have no knowledge of the facade.23Facade设计模式的适用场合设计模式的适用场合在下列情况下,可考虑使用Facade设计模式:want to provide a simple interface to a complex subsystem.there are many dependencies between clients and the implementation classes of an abstraction.want to layer your subsystems.24使用Facade设计模式的例子:一个对数据库操作的Java应用程序。25示例问题说明:在java.sql包中Java提供了ResultSet,ResultSetMetadata,Connection,DatabaseMetadata,Statement等接口。利用这些接口中的方法可以对数据库进行操作。JDBC驱动程序实现这些接口,即提供了具体的实现类。26Java中使用数据库的一般过程:1.装载数据库驱动程序try Class.forName(driver);catch(Exception e)System.out.println(e.getMessage();272.利用Connection类(接口)连接数据库,如果必要,获取数据库的元数据信息。try con=DriverManager.getConnection(url);dma=con.getMedataData();catch(Exception e)System.out.println(e.getMessage();283.可以利用dma对象(类型为DatabaseMetadata)获取数据库的表名。Vector tname=new Vector();try results=new resultSet(dma.getTables(catalog,null,“%”,types);catch(Exception e)System.out.println(e);While(results.hasMoreElements()tname.addElement(result.getColumnValue(“TABLE_NAME”);29上述操作过程还没有涉及对表的查询操作,但已有些复杂。可以利用Facade设计模式来简化对数据库的使用过程,即:创建两个类Database和resultSet包含ResultSet,ResultSetMetadata,Connection,DatabaseMetadata,Statement接口中的一些主要操作。利用Database类和resultSet类可以对数据库进行打开,显示表名,列名,列中的数据,以及执行查询操作等。如下图所示:30ClientConnectionDatabase MetadataStatementResultSet MetadataResultSetDatabaseresultSet31Database类的定义class Database public Database(String driver)();public void open(String url,String cat);public String getTableNames();public String getColumnNames(String table);public String getColumnValue(String table,String columnName);public String getNextValue(String columnName);public resultSet execute(String sql);32resultSet类的定义:class resultSet public resultSet(ResultSet rset)();public String getMetaData();public boolean hasMoreElement();public String nextElement();public String getColumnValue(String columnName);public String getColumnValue(int i);说明:对数据库的一般操作可通过类Database和resultSet进行,减低了客户程序和数据库操作类的耦合关系,如果需要一些特殊的操作,客户程序也可以调用数据库操作类中的方法。33Facade设计模式的特点设计模式的特点Shields clients from subsystem components,thereby reducing the number of objects that clients deal with and making the subsystem easier to use.Promotes weak coupling between the subsystem and its clients.It doesnt prevent applications from using subsystem classes if they need to.Thus you can choose between ease of use and generality.34Abstract Factory设计模式设计模式Abstract factory属于对象创建型设计模式。intent:Provide an interface for creating families of related or dependant objects without specifying their concrete classes.提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。35问题分析:考虑一个支持多种“look-and-feel”标准(如Motif,Presentation Manager)的图形用户界面工具包,不同的look-and-feel标准为用户界面控件如ScrollBar,Button定义了不同的外观和行为。例:Java中的几种look-and-feel:Metal形式Motif形式Window形式36为了系统的可移植性一个应用程序不应该对某一特定的look-and-feel硬编码(hard-code)其所使用的控件。37解决方法:采用Abstract Factory设计模式。如下图所示:38说明:定义一个WidgetFactory抽象类,并且为每种类型的控件定义抽象类,如ScrollBar抽象类,具体的Motif的ScrollBar控件类定义成ScrollBar类的子类MotifScrollBar。对Presentation Manager中的ScrollBar控件类也同样定义为ScrollBar类的子类PMScrollBar。Client调用WidgetFactory抽象类(或接口)中的方法来获得具体的控件对象,但Client并不知道它们正在使用是哪些具体类,这样Client就不依赖于特定的look-and-feel。39Abstract Factory的适用场合的适用场合在下列情况下,可考虑使用Abstract Factory设计模式:A system should be independent of how its products are created,composed,and represented.A system should be configured with one of multiple families of products.A family of related product objects is designed to be used together,and you need to enforce this constraint.You want to provide a class library of products,and you want to reveal just their interfaces,not their implementations.40例:判断对错题 CoolSoft公司准备开发一套酒店辅助管理系统,其前端采用触摸屏技术,但各个酒店使用的触摸屏由不同的生产厂家生产,这些厂家包括Touch Screen公司、Smart Screen公司、Small Screen公司等,各种型号的触摸屏在组成部分上没有差别,只是在外观上有区别,CoolSoft公司希望开发出来的酒店辅助管理系统可以支持各种类型的触摸屏,一旦前端设备从一种型号的触摸屏转到另一种型号时,只需要改动一些配置信息即可,整个软件系统不需要做大的改动。那么在设计前端设备驱动程序部分时采用抽象工厂(Abstract Factory)设计模式较好。41Abstract Factory的一般结构的一般结构42说明:Abstract Factory设计模式中的参与者为AbstractFactoryConcreteFactory AbstractProductConcreteProductClient客户类仅使用由AbstractFactory和AbstractProduct 声明的接口。43Abstract Factory设计模式的特点设计模式的特点1.Client只通过product接口操作product对象,product对象的具体名字不出现在client中。2.在应用系统中改变ConcreteFactory的种类很容易。3.可以保证应用系统在某一时刻只使用一个product系列。4.AbstractFactory接口中已确定了可以创建的product集合,如果要支持新的产品种类需要扩展AbstractFactory及其所有子类中的方法,比较困难。44Visitor设计模式设计模式Visitror设计模式设计模式属于对象行为型设计模式。Intent:Represent an operation to be performed on the elements of an object structure.Visitor lets you define a new operation without changing the classes of the elements on which it operates.表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。45问题分析:考虑编译分析中的语法树,在进行静态语义分析时要对语法树中的结点进行一些操作,这些操作包括类型检查、代码优化、流程分析、检查变量在使用前是否已被赋初值、pretty-printing、program restructuring(程序重构)、code instrumentation(代码植入)、程序度量等。问题的特点:结点类可以有多种,如表示赋值语句的结点类,表示变量存取的结点类,表示算术表达式的结点类等。结点类的集合依赖于语言,对于一个特定的程序设计语言,结点类的集合是固定的。这些操作要求对不同的结点进行不同的操作,例如对代表赋值语句的结点的处理不同于代表变量的结点的处理。46下图是结点类的类图设计的一部分:存在的问题:1.由于把所有的操作都分散到各个结点类中,导致整个系统难以理解,难以维护和修改。2.增加一个新的操作将需要对所有的类进行修改和重新编译。47改进要求:系统可以独立增加新的操作,结点类独立于作用于其上的操作。改进方法:把一个类的相关操作包装在一个独立的对象(visitor)中,并在遍历语法树时把visitor传递给语法树中的元素。新的类图设计如下所示:48语法树结点的层次结构Visitor的层次结构49说明:要增加对语法树的结点的操作,只要在NodeVisitor下增加子结点即可,因为一个程序设计语言的语法是固定的,即语法树的结点类型不会变。50Visitor设计模式的适用场合设计模式的适用场合在下列情况下,可考虑使用Visitor设计模式:一个对象结构包含很多类对象,需要对这些对象实施一些依赖于其具体类的操作,而又想避免让这些操作“污染”(polluting)这些对象的类。定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。51Visitor设计模式的一般结构设计模式的一般结构52说明:Visitor设计模式中的参与者包括:VisitorConcreteVisitorElementConcreteElementObjectStructure:能遍历它的元素。53Visitor设计模式允许不改变类的定义即可有效地增加其上的操作,实际上是使用了双分派双分派(double-dispatch)技术。双分派双分派指的是一个请求到底由哪个操作来实现取决于请求的种类和两个接收者的类型。例:在Visitor模式中,accept是一个双分派操作,因为accept的含义决定于两个类型:Visitor类型和Element的类型。在支持单分派单分派(single-dispatch)技术的语言中,到底由哪一个操作来实现一个请求取决于两个方面:该请求的名字和接收者的类型。例:一个generateCode的请求将调用的操作决定于所请求的结点对象的类型。54一个visitor对象可以访问不具有相同父类的对象。例:class Visitor /public abstract void visitMyType(MyType element);public abstract void visitYourType(YourType element);55当visitor对象访问对象结构中的元素时,可以在visitor中记录当前状态。如果不使用visitor对象,状态信息将作为参数传递给进行遍历的操作,或者定义为全局变量。Visitor设计模式中concreteElement作为参数传递给visitor对象,在visitor对象中要对concreteElement的一些内部属性进行操作,因此要求concreteElement提供一些可见性为public的操作,降低了concreteElement的封装性。56Visitor设计模式所生成的设计模式所生成的Java代码代码共生成七个文件:Visitor.javaElement.javaConcreteElementA.javaConcreteElementB.javaConcreteVisitor1.javaConcreteVisitor2.javaObjectStructure.java所生成的代码如下所示(生成代码所依据的类图不采用Rose所提供的设计模式):57public abstract class Visitor public Visitor()public abstract void visitConcreteElementA(ConcreteElementA element);public abstract void visitConcreteElementB(ConcreteElementB element);1.Visitor.java的源代码:的源代码:58public abstract class Element public Element()public abstract void accept(Visitor v);2.Element.java的源代码:的源代码:59public class ConcreteElementA extends Element public ConcreteElementA()public void accept(Visitor v)public void operationA()3.ConcreteElementA.java的源代码:的源代码:60public class ConcreteElementB extends Element public ConcreteElementB()public void accept(Visitor v)public int operationB()return 0;4.ConcreteElementB.java的源代码:的源代码:61public class ConcreteVisitor1 extends Visitor public ConcreteVisitor1()public void visitConcreteElementA(ConcreteElementA element)public void visitConcreteElementB(ConcreteElementB element)5.ConcreteVisitor1.java的源代码:的源代码:62public class ConcreteVisitor2 extends Visitor public ConcreteVisitor2()public void visitConcreteElementA(ConcreteElementA element)public void visitConcreteElementB(ConcreteElementB element)6.ConcreteVisitor2.java的源代码:的源代码:63public class ObjectStructure public Element theElement;public ObjectStructure()7.ObjectStructure.java的源代码:的源代码:64Visitor设计模式的特点设计模式的特点Visitor设计模式使得在复杂对象结构上增加新的操作变得容易。相关的行为不是分布在各个类上,而是集中在一个Visitor中。在对象结构中增加新的ConcreteElement类很困难应用Visitor模式时考虑关键的问题是系统的哪个部分会经常变化,是作用于对象结构上的算法(作用于对象上的操作)还是构成该结构的各个对象的类?65主要内容主要内容 基本概念基本概念 设计模式实例分析设计模式实例分析 Facade设计模式设计模式 Abstract Factory设计模式设计模式 Visitor设计模式设计模式 在在Rose中使用设计模式中使用设计模式66在在Rose中中使用设计模式使用设计模式Rose 2003提供了GoF中20种设计模式的支持(对Java),但不包括对Interpreter,Memento,Builder的支持。在Rose中应用设计模式后,所生成的代码更详细。Singleton模式和其它模式不同,没有参与者(participant)。对于singleton模式的使用不用设置participant,对于其余的19个模式需要设置participant,这19个模式的使用步骤是一致的。67在在Rose 2003中应用中应用Visitor设计模式设计模式步骤1:首先在菜单ToolsOptionsNotaion中把模型语言设为Java。步骤2:在类图中创建类,把类名设为A,然后用鼠标右击类A,在弹出菜单中选Java/J2EEGOFPatternsVisitor菜单项68步骤3:在Visitor设计模式对话框中设置参与者,根据需要可以指定具体Visitor类和具体Element类。69步骤4:单击OK按钮后,把生成的类拖到类图中,Rose 2003会自动加上类与类之间的泛化、关联、依赖等关系。可以把类与类之间一些不太重要的依赖关系删除。步骤5:完成类图后,即可利用Rose 2003生成代码框架。70Visitor设计模式所生成的设计模式所生成的Java代码代码共生成八个文件:A_Visitor.javaA_ConcreteVisitor_A.javaA_ConcreteVisitor_B.javaA_Element.javaA.javaA_ConcreteElemnet_B.javaA_ObjectStructure.javaA_Client.java711.A_Visitor.java的源代码:的源代码:/Source file:F:codeA_Visitor.javapublic abstract class A_Visitor /*roseuid 3FD6D6E4001B */public A_Visitor()/*param theA *param theA_ConcreteElement_B *roseuid 3FD6D29F0087 */public abstract void visit(A theA,A_ConcreteElement_B theA_ConcreteElement_B);72/Source file:F:codeA_ConcreteVisitor_A.javapublic class A_ConcreteVisitor_A extends A_Visitor /*roseuid 3FD6D6E401B5 */public A_ConcreteVisitor_A()/*param theA *param theA_ConcreteElement_B *roseuid 3FD6D29F02C2 */2.A_ConcreteVisitor_A.java的的源代码源代码73 public void visit(A theA,A_ConcreteElement_B theA_ConcreteElement_B)/TO DO:Overload(copy and paste)this operation as often as necessary,/typically once for each class selected for:/theConcreteElement participant:/A /A_ConcreteElement_B /Reduce the argument set for each operation as applicable./TO DO:Replicate/modify the above code as necessary to process all,/required combinations of arguments for each of:/theConcreteElement participant:/theA /theA_ConcreteElement_B 74类似于A_ConcreteVisitor_A.java的源代码3.A_ConcreteVisitor_B.java的源代码的源代码75/Source file:F:codeA_Element.javapublic abstract class A_Element /*roseuid 3FD6D6E40300 */public A_Element()/*param visitor *roseuid 3FD6D29F0127 */public abstract void accept(A_Visitor visitor);4.A_Element.java的源代码的源代码76/Source file:F:codeA.javapublic class A extends A_Element /*roseuid 3FD6DEB5009A */public A()/*param visitor *roseuid 3FD6DE3801BD */public void accept(A_Visitor visitor)/visitor.visit(this);5.A.java的源代码的源代码77/Source file:F:codeA_ConcreteElement_B.javapublic class A_ConcreteElement_B extends A_Element /*roseuid 3FD6D6E5018F */public A_ConcreteElement_B()/*param visitor *roseuid 3FD6D29F025E */public void accept(A_Visitor visitor)/visitor.visit(this);6.A_ConcreteElemnet_B.java的源代码的源代码787.A_ObjectStructure.

    注意事项

    本文(4e-08UML与设计模式.ppt)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开