类设计专题--中国最大的.Net社区

来源:百度文库 编辑:神马文学网 时间:2024/04/29 04:03:26
类设计原则》》》》》》》》》》......
类设计原则》》》》》》》》》》》》》》
1. 开闭原则(the Open Closed Principle OCP)
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。
我们以收音机的例子为例,讲述面向对象的开闭原则。我们收听节目时需要打开收音机电源,对准电台频率和进行音量调节。但是对于不同的收音机,实现这三个步骤的细节往往有所不同。比如自动收缩电台的收音机和按钮式收缩在操作细节上并不相同。因此,我们不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式。但是我们可以定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。不同的收音机继承并实现这六个抽象方法。这样新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。此外,已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。
2. 替换原则 (the Liskov Substitution Principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer 的DBC (Design by Contract) 的概念推出。
我们以学生为例,夜校生为学生的子类,因此在任何学生可以出现的地方,夜校生均可出现。这个例子有些牵强,一个能够反映这个原则的例子时圆和椭圆,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。
3. 依赖原则 (the Dependency Inversion Principle DIP)
在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。
在结构化设计中,我们可以看到底层的模块是对高层抽象模块的实现(高层抽象模块通过调用底层模块),这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个"硬伤"。
面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。
为此,我们在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类)来实现该业务方法,业务方法内容的修改将不会影响到运行时业务方法的调用。
4. 接口分离原则(the Interface Segregation Principle ISP)
采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。
ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。
这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。
类设计专题--中国最大的.Net社区 .NET中26个优化性能方法 一起Ext - 中国最大的EXTJS讨论社区 - Power... “隔离”是社区设计最大的要点社区|Streamy| 明年中国的十个预言 铁血社区 bbs.tiexue.net 明年中国的十个预言 铁血社区 bbs.tiexue.net 依法参与政治生活教学设计 - 张桂兰的个人空间 - 吉林省教育社区 吉林省最大... 网友影响中国--全国最大社区媒体-浅议张国焘的失败 健康养生_身心灵成长_成功网-8801.NET中国最大的... 如何设计标准字体(课件) - 平面及视觉设计(中高级区) - 中国设计之窗社区 设计人的网... 论坛首页 - 中国最大的Linux/Unix技术社区 - IT人的网上社区 - bbs.C... ChinaUnix.net - 个人简历常用到的英语 - 中国Unix技术社区 ChinaUnix.net - 写给Linux内核新手-关于Linux内核学习的误区 - 中国Unix技术社区 中国将在2008年曝光的主要新型军武器装备 铁血社区 bbs.tiexue.net 中国科举制度的形成及利弊 铁血社区 bbs.tiexue.net 中国科举制度的形成及利弊 铁血社区 bbs.tiexue.net ASP.NET上传专题 -垃圾猪的垃圾窝 暖家网-中国最大的采暖社区|采暖|地暖|壁挂炉|散热器|热泵|采暖社区 精益研发之质量设计-中国数控机床网-中国最大的机床门户网站 全国最大的人力资源社区、... 谁有《C 高级实用程序设计》- C程序汉字显示技术 那一章的源代码 C/C / 非技术区 - CSDN社区 community.csdn.net 中华网论坛十周年--蒙古丢失是中国最大的国觞--网友影响中国--全国最大社区媒体 网友影响中国--全国最大社区媒体-中国两千多年最大的悲剧:错误地重视孔子轻管仲[转贴] 网友影响中国--全国最大社区媒体-中国两千多年最大的悲剧:错误地重视孔子轻管仲[转贴] 中国长航设计的国内最大全自动铺排船顺利下水