锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / Java开源技术 / 面向对象设计原则
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品原创,禁止转载和任何形式的非法内容使用,违者必究。


面向对象设计原则

 

面向对象在国外教学里有个CRC方法,意思是:分类-优化适配-校正,在CRC过程中要注意使用面向对象设计原则,保证不打破原则,设计一个成功的类体系。

面向对象的设计原则最常用的有7种,如下
设计原则名称 定义                                                        使用频率
单一职责原则 (Single ResponsibilityPrinciple, SRP) 一个类只负责一个功能领域中的相应职责★★★★☆
开闭原则 (Open-Closed Principle, OCP) 软件实体应对扩展开放﹐而对修改关闭―★★★★★
里氏代换原则(Liskov Substitution Principle, LSP) 所有引用基类对象的地方能够透明地使用其子类的对象 ★★★★★
依赖倒转原则(Dependence Inversion Principle,DIP) 抽象不应该依赖于细节﹐细节应该依赖于抽象 ★★★★★
接口隔离原则(Interface Segregation Principle, ISP) 使用多个专门的接口﹐而不使用单一的总接口 ★★☆☆☆
合成复用原则(Composite Reuse Principle, CRP)尽量使用对象组合﹐而不是继承采达到是用的目的 ★★★★☆
迪米特法则(Law of Demeter, LoD) 一个软件实体应当尽可能少地与其他实体发生相互作用★★★☆☆

这些设计原则都是我们在项目设计的时候胡需要去尽量遵守的,可能有的小伙伴看到这里就头疼了,我只想好好写我的程序,实现需要的功能不就行了,你老给我扯这些有的没的干啥。
但我们静下心来好好想想,我们写的程序目的是要实现我们的需求不假,但是我们往往还要去考虑程序的可维护性,并且可维护的基础上还要去提高我们程序的可复用性,这些是至关重要的。
如果不考虑这些,一味追求短期的需求实现,越往后就会越累,到时候自己都不想看自己的代码,感觉就是一团乱码,那时候后悔没有好好的对自己的项目进行总体设计就悔之晚矣。
而我们要介绍的面向对象设计原则就是前人总结好的面向对象中应该遵守的一些基本原则,站在巨人的肩膀上,让我们看的更远
单一职责原则
顾名思义,这可以说是最简单的面向对象设计原则,它告诉我们,一个类不能太“累”,提示我们不要在一个类里做过多的事情。
开闭原则
要满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。
里氏代换原则
里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是 我喜欢狗,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。
里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对 象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用 子类对象来替换父类对象。
依赖颠倒原则
简言之就是要针对接口编程,而不是针对实现编程。
依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层 类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据 类型的转换等,而不要用具体类来做这些事情。为了确保该原则的应用,一个具体类应当只 实现接口或抽象类中声明过的方法,而不要给出多余的方法,否则将无法调用到在子类中增 加的新方法。
在实现依赖倒转原则时,我们需要针对抽象层编程,而将具体类的对象通过依赖注入 (DependencyInjection,      DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发 生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。构造注入是指通过构造函数来传入具体类的对象, 设值注入是指通过Setter方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务 方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型 的对象,由子类对象来覆盖父类对象。
在大多数情况 下,这开闭原则、里氏代换原则、里氏代换原则会同时出现,开闭原则是目标,里氏代换原则是基础,依赖倒转原则是 手段,它们相辅相成,相互补充,目标一致,只是分析问题时所站角度不同而已。
接口隔离原则
根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接 口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
合成复用原则
在面向对象设计中,可以通过两种方法在不同的环境中复用已有的设计和实现,即通过组合/ 聚合关系或通过继承,但首先应该考虑使用组合/聚合,组合/聚合可以使系统更加灵活,降低 类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少;其次才考虑继承,在使 用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂 度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继 承复用。
迪米特法则
如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他 模块,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之 间通信的宽度和深度。迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。

 

总结

面向对象设计原则掌握好的前提是学好多态,方法在不同类里的实现不一样。多态是面向对象设计架构的重要功能。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内