收藏 分享(赏)

软件设计教案(08级).doc

上传人:dzzj200808 文档编号:2636313 上传时间:2018-09-24 格式:DOC 页数:52 大小:345KB
下载 相关 举报
软件设计教案(08级).doc_第1页
第1页 / 共52页
软件设计教案(08级).doc_第2页
第2页 / 共52页
软件设计教案(08级).doc_第3页
第3页 / 共52页
软件设计教案(08级).doc_第4页
第4页 / 共52页
软件设计教案(08级).doc_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、1Chapter 1Programming Review and Introduction to Software DesignProcess Phase Introduced in This ChapterKey Concept: Where Were Headed Coding Practices Used in This BookInstance variables may be referred to with “this.” Example: class Car int milesDriven; May use this.milesDriven within methods of C

2、ar to clarify Static variables may be referred to with class name.Example: class Car static int numCarsSold; May use Car.numCarsSold within methods of Car to clarifyParameters are given prefix “a” or “an” Example: public getVolume( int aLength ) Programming Conventions: Method Documentation 1 of 2Pr

3、econditions: conditions on non-local variables that the methods code assumesIncludes parametersVerification of these conditions not promised in method itselfPostconditions: value of non-local variables after executionIncludes parametersNotation: x denotes the value of variable x after executionInvar

4、iants: relationships among non-local variables that the functions execution do not change(The values of the individual variables may change, however.)Equivalent to inclusion in both pre- and post-conditionsThere may also be invariants among local variablesProgramming Conventions: Method Documentatio

5、n 2 of 2Return: What the method returnsKnown issues: Honest statement of what has to be done, defects that have not been repaired etc.(Obviously) limited to whats known!Key Concept: Specifying Methods Flowchart ExamplePseuodocode Example For an X-ray ControllerAdvantages of Pseudocode i *“;String sa

6、vedFileName=“save.txt“;clientFacade.doOption(readFileName,delContent,savedFileName);21Facade Design Pattern StructureUsing Faade for Architecture of a Video GameDesign Goals At Work: Correctness and Reusability Using Faade to Access Bank CustomersOutput of Faade Banking ExampleKey Concept: Facade De

7、sign Pattern Decorator装饰模式装饰模式:动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。Decorator Pattern:Attach additional responsibilities to an object dynamically.Decorators provide a flexible alternative to subclassing for extending functionality.模式的结构与使用:包括了四种角色抽象组件(Component): 抽象类,定义了“被装饰者”需要进行“ 装饰” 的方法具体组件(Concet

8、eComponent):抽象组件的一个子类,具体组件的实例称作“被装饰”者装饰(Decorator):抽象组件的子类,还包含一个抽象组件声明的变量以保存“被装饰者”的引用。可以是抽象类,也可以是非抽象类,那么该类的实例称作“装饰者” 。具体装饰(ConcreteDecorator):具体装饰是装饰的一个非抽象子类,具体装饰的实例称作“装饰者”。类图Decorator Class Model Decorator模式的类图public class Client public static void main(String args)Factory myfactory;22myFactory=new

9、 Factory();Component myComponent=myFactouy.getComponent();abstract public class Componentabstract public void prtTicket();public class SalesTicket extends Componentpublic void prtTicket()abstract public class TicketDecorator extends Componentprivate Component myTrailer;public TicketDecorator(Compone

10、nt myComponent)myTrailer=myComponent;public void callTrailer()if(myTrailer!=null) myTrailer.prtTicket();public class header1 extends TicketDecoratorpublic Header1(Component myComponent)super(myComponent);public void prtTicket()super.callTrailer();public calss Headers extends TicketDecoratorpublic He

11、ader2(Component myComponent)super(myComponent);public void prtTicket()super.callTrailer();public class Footer1 extends ticketDecoratorpublic Footer1(Component myComponent)super(myComponent);23public void prtTicket()super.callTrailer();public clas Fooer2 extends TicketDecoratorpublic Footer2(Componen

12、t myComponent)super(myComponent);public void prtTicket()super.callTrailer();public class Factorypublic Component getComponent()Component myComponent;myComponent=new SalesTicket();mycomponent=new Footer1(myComponent);myComponent=new Header1(myComponent);return myComponent;Linked Objects in DecoratorO

13、utput of Customer/Account ExampleDecorator Applied to Customer / Accounts ExampleUse of Decorator in java.iojava.io Decorator exampleDecorator模式:关键特征意图:动态地给一个对象添加职责。问题:要使用的对象将执行所需的基本功能。但是,可能 要为这个对象将添加某些功能,这些附加功能可能发生在对象的基础功能之前或之后。请注意,Java基础类在I/O处理中广泛使用了Decorator模式。解决方案:可以无需创建子类,而扩展一个对象的功能。参与者与协作者:Con

14、creteComponent让Decorator 对象为自己添加功能。有时候用ConcreteComponent的派生类提供核心功能,在这种情况下 ConcreteComponent类就不再是具体的,而是抽象的。Component类定义了所有这些类所使用的接口。效果:所添加的功能 放在小对象中。好处是可以在ConcreteComponent 对象的功能之前或之后动态添加功能。注意,虽然装饰对象可以在被迫装饰对象之前或之后动态地添加功能,但对象链总是终于ConcreteComponent对象。24实现:创建一个抽象类来表示原类和要添加到这个类的新功能。在装饰类中,将对新功能的调用放在对紧随其后的

15、调用之前或之后,以获得正确的顺序。示例示例源码/抽象组件public abstract class Bird public abstract int fly();/具体组件public class Sparrow extends Bird public final int DISTANCE=100;public int fly()return DISTANCE;public abstract class Decorator extends Birdprotected Bird bird;public Decorator(Bird bird)this.bird=bird;public class

16、 SparrowDecorator extends Decoratorpublic final int DISTANCE=50;SparrowDecorator(Bird bird)super(bird);public int fly()int distance=0;distance=bird.fly()+eleFly();return distance;private int eleFly() return DISTANCE; 25模式的应用public class Application public void needBird(Bird bird)int flyDistance=bird

17、.fly();System.out.println(“the bird fly distance “+flyDistance+“ metres“);public static void main(String args)Application client=new Application();Bird sparrow=new Sparrow();Bird sparrowDecorator1=new SparrowDecorator(sparrow);Bird sparrowDecorator2=new SparrowDecorator(sparrowDecorator1);client.nee

18、dBird(sparrowDecorator1);client.needBird(sparrowDecorator2);组合模式含义:将对象组合成树形结构以表示“部分整体”的层次结构。Composite傅用户对单个对象和组合对象的使用具有一致性。Composite Pattern:Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of objects uniformly.

19、设计目标:表示树形结构使用以树类聚集对象并且这些对象都是基类继承的递归形式组合对象:如果一个对象包含另一个对象的引用,称这样的对象为组合对象。组合对象具有其他子节点的节点。个体对象:如果一个对象不含有其他对象的引用,称这样的对象为个体对象。个体对象是不具有其他子节点的叶节点。组合模式可以让用户以一致的方式处理个体对象和组合对象,组合模式的关键在于无论是个体对象还是组合对象都实现 26了相同的接口或都是同一个抽象类的子类菜单与菜单项形成的树形结构模式的结构和使用包括三种角色:抽象组件(Component):是一个接口(抽象类),该方法(抽象类)定义了个体对象及组合对象需要实现的关于操作其子节点的

20、方法,抽象组件也可以定义个体对象和组合对象用于操作自身的方法。Composit节点(Composit Node):实现Component接口类的实例,Composit节点不仅实现Component接口,而且可以含义有其他Component节点或leaf节点的引用Leaf节点(Leaf Node):实现Component接口类的实例,Leaf节点不可以含有其他 Composite节点或Leaf 节点的引用。因此,叶节点在实现Compoinent接口有关操作子节点的方法时,可以让方法抛出一个异常,也可以实现为空操作。UML类图:JMenu menuTool=new JMenu(“工具” );JMe

21、nu menuImage=new JMenu(“图像工具”);JMenuItem itemJPG=new JMenuItem(“JPG图像”);JMenuItem itemGIF=new JMenuItem(“GIF图像”);JMenuItem itemBIT=new JMenuItem(“BIT图像”);JMenu menuGeometry=new JMenu(“图形工具”);JMenuItem itemRect=new JMenuItem(“矩形图形”);JMenuItem itemCurve=new JMenuItem(“曲线图形” );JMenuItem itemLine=new JM

22、enuItem(“直线图形” );menuTool.add(itemJPG);menuTool.add(itemGeometry);Basis for Composite Class ModelComposite Class ModelEmployee HierarchyDesign Goal At Work: Flexibility, Correctness 27Bank/Teller ExampleOutput of Bank/Teller ExampleComposite in java.awtComposite设计模式小结去除叶类单纯从结构的角度来说,Decorator模式是Compo

23、site模式的一个特例Composite式的动态观点关心的是节点所表示的功能。这将直接导致操作执行的顺序。这时就需要Iterator设计模式。Key Concept: Composite Design Pattern 适配器模式定义:将一个类的接口转换成客户希望的一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。Adapter pattern:Convert the interface of a class into another interface client expect.Adapter lets classes work together that

24、 couldnt otherewise because of incompatible interfaces.设计目标:允许应用程序以重定们的方式访问外部功能方法:针对抽象的外部应用编写应用程序;引入类用于聚合外部类。包含三种角色:目标( Tatget):目标是一个接口,该接口是客户想使用的接口 被适配者(Adaptee):被适配者是一个已经存在的接口或抽象类,这个接口或抽象类需要适配。适配器(Adapter ):适配器是一个类,该类实现了目标接口并包含有被适配者的引用,即适配器的职责是对被适配者接口(抽象类)与目标接口进行适配UML类图:适配器模式的类图结构的描述用户已有了一个两相插座,但最

25、近双有了一个新的三相插座。用户现有一台洗衣机和一台电视机,洗衣机按着三相插座的标准配有三相插头,而电视机按着两相插座的标准配有两相插头,现在用记想用新的三相插座来使用洗衣机和电视机,即用新的三相插座为洗衣机和电视机接通电流。针对以上问题同,使用适配器模式设计若干个类1.目标:public interface ThreeElectricOutlet public abstract void connectElectricCurrent();2.被适配者:public interface TwoelectricOutlet public abstract void connectelectricC

26、urrent();3.适配器:public class ThreeElectricAdapter implements ThreeElectricOutletTwoelectricOutlet outlet;28ThreeElectricAdapter(TwoelectricOutlet outlet) this.outlet=outlet; public void connectElectricCurrent() outlet.connectelectricCurrent(); 4.模式的使用public class Application public static void main(S

27、tring args)ThreeElectricOutlet outlet;/目标接口(三相插座)Wash wash=new Wash();/ 洗衣机outlet=wash; / 洗衣机插在三相插座上System.out.println(“使用三相插座接通电流:“);outlet.connectElectricCurrent();/ 接通电流,开始洗衣TV tv=new TV(); / 电视机 ThreeElectricAdapter adapter=new ThreeElectricAdapter(tv);/ 把电视插在适配器上outlet=adapter; / 适配器插在三相插座上Syst

28、em.out.println(“使用三相插座接通电流:“);outlet.connectElectricCurrent();/ 接通电流,开始播放电视节目class Wash implements ThreeElectricOutletString name;Wash() name=“黄河洗衣机“; public void connectElectricCurrent() turnOn(); public void turnOn() System.out.println(name+“开始洗衣物。“); class TV implements TwoelectricOutletString na

29、me;TV()name=“长江电视机“; public void connectelectricCurrent()turnOn(); public void turnOn()System.out.println(name+“开始播放节目“); 双向适配器在对象适配模式中,如果Adapter角色同时实现目标接口和被迫适配者接口,并包含目标和被适配者的引用,那么该适配器就是一个双向适配器。使用双向适配器,用户即可以使用新的接口,也能使用已有的接口。29在上例中,如果用户希望能用新的三相插座来为洗衣机和电视机接通电流,马能用旧的两相插座为洗衣机和电视机接通电流,那么就必须使用一个双向适配器。publ

30、ic class Application public static void main(String args)ThreeElectricOutlet outlet;/目标接口(三相插座)TwoElectricOutlet twoOutlet;Wash wash=new Wash();/ 洗衣机outlet=wash;/ 洗衣机插在三相插座上TV tv=new TV(); / 电视机 ThreeAndTwoElectricAdapter adapter=new ThreeAndTwoElectricAdapter(wash,tv);threeOutlet=adapter;System.out

31、.println(“使用三相插座接通电流:“);threeOutlet.connectElectricCurrent();twoOutlet=adapter;System.out.println(“使用两相插座接通电流:“);twoOutlet.connectelectricCurrent();适配器的适配程度1.完全适配:如果目标(Target) 接口中的方法数目与被适配者(Adaptee)接口的方法数目相等,那么适配器(Adapter )可将被适配者接口(抽象类)与目标接口进行完全适配。2.不完全适配:如果目标(Target) 接口中的方法数目少于被适配者(Adaptee) 接口的方法数目

32、,那么适配器(Adapter )可将被适配者接口(抽象类)与目标接口进行部分适配。3.剩余适配:如果目标(Target) 接口中的方法数目大于被适配者(Adaptee) 接口的方法数目,那么适配器(Adapter )可将被适配者接口(抽象类)与目标接口进行完全适配,但必须将目标多余的方法给出用户允许的默认实现。适配器模式的优点目标(target)和被适配者(Adaptee)完全解耦的关系适配器模式满足“开- 闭原则”。当添加一个实现Adaptee接口的新类时,不必修改30Adapter,Adapter就能对这个新类的实例进行适配。Adapter模式:关健特性意图:使控制范围之外的一个原有对象与

33、某个接口匹配。问题:系统的数据和行为都正确,但接口不符。通常用于必须从抽象类派生时。解决方案:Adapter模式提供了具有所需接口的包装类。参与者与协作者:Adapter改变了Adaptee的接口,使Adaptee与Adapter的基类Target匹配。这样Client就可以使用Adaptee了,好像它是Target类型。效果:Adapter模式使原有对象能够适应新的类结构,不受其接口的限制。实现:将原有包包含在另一个类之中。让包含类与需要的接口匹配,调用被包容类的方法。示例:Class Circle extends Shapeprivate XXCircle myXXCircle;public Circle()myXXCircle=new XXCircle();Void public display()myXXCircle.displayIt();应用举例 Iterator接口与Enumeration 接口目前有一个运行良好的系统,该系统中有一个类:BookNameList, BookNameList类使用 Vector存放图书名称,但为用户提供的是Vector的枚举器,用户可以使用该枚举器查看Vector中存放的图书名称。目前一个开发小组正在设计一个新的系统,根据项目特点,该系统准备在一个

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报