欢迎来到天天文库
浏览记录
ID:37623913
大小:460.42 KB
页数:25页
时间:2019-05-26
《面向对象设计原则和设计模式的概念》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、目标•了解软件复用的重要性•了解面向对象实现软件复用的几大设计原则•了解什么是设计模式微软亚洲研究院资助西安交大软件学院内容•软件的可维护性与可复用性•“开---闭”原则(OCP)•里氏代换原则(LSP)•依赖倒转原则(DIP)•接口隔离原则(ISP)•合成/聚合复用原则(CARP)•迪米特法则(LoD)•设计模式的概念及历史微软亚洲研究院资助西安交大软件学院软件的可维护性与可复用性•软件系统的可维护性•软件系统的可复用性微软亚洲研究院资助西安交大软件学院软件系统的可维护性•软件维护的费用=软件开发的费用×2•软件的维护=软件的再生•导致软件可维护性低
2、的原因:–过于僵硬(Rigidity)–过于脆弱(Fragility)–复用率低(Immobility)–黏度过高(Viscosity)微软亚洲研究院资助西安交大软件学院软件系统的设计目标•可扩展性(Extensibility)–新的性能可以很容易地加入到系统中–是“过于僵硬”的反面•灵活性(Flexibility)–可以允许代码修改平稳地发生,而不会涉及到很多其他的模块–是“过于脆弱”的反面•可插入性(Pluggability)–可以很容易的将一个类抽出去,同时将另一个有同样接口的类加入进来–是“黏度过高”的反面微软亚洲研究院资助西安交大软件学院系统
3、的可复用性•复用(Reuse)–重复使用•软件复用的好处–较高的生产效率•重复使用的软件成分可以为将来的使用节省费用–较高的软件质量•可复用的软件成分总是比不能复用的软件成分有更多的质量保证–恰当使用复用可以改善系统的可维护性微软亚洲研究院资助西安交大软件学院传统的复用•代码的剪贴复用•算法的复用–如经典的排序算法等•数据结构的复用–如队、栈等微软亚洲研究院资助西安交大软件学院面向对象设计的复用•数据的抽象化和继承关系–使得概念和定义可以复用•多态性–使得实现和应用可以复用•抽象化和封装–可以保持和促进系统的可维护性•面向对象设计的复用重点的转移–不再
4、集中在函数和算法等具体实现细节上–而是集中在最重要的含有宏观商业逻辑的抽象层次上微软亚洲研究院资助西安交大软件学院面向对象设计复用对可维护性的支持•恰当的提高系统的可复用性,可以提高系统的可扩展性–允许一个具有同样接口的新的类代替旧的类,是对抽现接口的复用–开闭原则、里氏代换原则、依赖倒转原则、组合复用原则•恰当的提高系统的可复用性,可以提高系统的灵活性–系统中的每一个模块都尽可能的保持独立,这样在修改一个模块的时候就不会向其他模块传递修改的压力–开闭原则、迪米特法则、接口隔离原则•恰当的提高系统的可复用性,可以提高系统的可插入性–将复用定格在商业逻辑
5、层,也就是在抽象层进行复用,这样就可以与具体的实现类没有关系了–开闭原则、里氏代换原则、组合复用原则微软亚洲研究院资助西安交大软件学院开-闭原则•定义:–一个软件实体应当对扩展开放,对修改关闭–Softwareentitiesshouldbeopenforextension,butclosedformodification.•实现该原则的关键技术:–抽象化•从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的•抽象层预见了所有的可能扩展,因此,在任何扩展情况下都不会改变,这就是对改变的关闭微软亚洲研究院资助西安交大软件学院举
6、例•用面向对象的方式模拟我们回家之后开灯、离开家之后关灯的过程•对象–家•进入操作•离开操作–灯•打开操作•关闭操作微软亚洲研究院资助西安交大软件学院类图描述publicvoidOpen(){publicvoidEnter(){mLight.Open();System.Console.WriteLine(“light}turnningon...”);publicvoidLeave(){}mLight.Close();publicvoidClose(){}System.Console.WriteLine(“lightpublicLightlight{tu
7、rnningoff...”);get{returnmLight;}}set{mLight=value;}}微软亚洲研究院资助西安交大软件学院测试publicclassTestMain{publicstaticvoidMain(){Roomroom=newRoom();Lightlight=newLight();room.light=light;room.enter();System.Console.WriteLine(“living...”);room.leave();}}•现在要给房子里加上电视机,程序该怎么改?微软亚洲研究院资助西安交大软件学院类图
8、描述publicvoidEnter(){mLight.Open();mTV.Open();}p
此文档下载收益归作者所有