面向对象设计原则-创新互联

常见的面向对象设计原则有7个, 遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。

南京ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!单一职责原则 (SRP)

定义:一个对象只有一种职责或功能,只有一个引起它变化的原因。

类的职责是由该类的对象在系统中的角色所决定的。举例来讲,教学管理系统中,老师就代表着一种角色,这个角色决定老师的职责就是教学。而要完成教学的职责,老师需要讲课、批改作业,而讲课、批改作业的行为就相当于我们在程序中类的方法,类的方法和属性就是为了完成这个职责而设置的。

一个类承担的责任越多,它被重用的可能性就越小。如果一个类承担了太多的责任,则相当于将这些责任耦合在一起。当其中一项职责发生变化时,可能会影响其他职责的运作,所以一个类中应该是一组相关性很高的函数、数据的封装。如果类中某个方法或属性与它所要完成的职责无关,或是为了完成另外的职责,那么这样的设计就不符合类的单一职责原则。

单一职责原则提出了对对象职责的一种理想期望。对象不应该承担太多职责,正如人不应该一心二用。唯有专注,才能保证系统的高内聚;唯有单一,才能保证系统的低耦合。

开闭原则 (OCP)

定义:软件中的对象应该对扩展开放,对修改封闭。

开闭原则是编程中最基础,最核心的设计原则, 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

需求总是变化,世界上没有一个软件是不变的,这些言论是对软件需求最经典的表白。从中透射出一个关键的意思就是,对于软件设计者来说,必须在不需要对原有的系统进行修改的情况下,实现灵活的系统扩展。

里氏替换原则 (LSP)

定义: 所有引用基类(父类)的地方必须能透明地使用其子类的对象。

把父类都替换成它的子类,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类的话,那么它不一定能够使用父类。通俗点讲只要父类能出现的地方子类就可以出现,而且调用子类还不产生任何的错误或异常,调用者可能根本就不需要知道是父类还是子类。但是反过来就不成了,有子类出现的地方,父类未必就能适应。

里氏替换原则是实现开闭原则的重要途径之一。由于在使用父类对象的任何地方都可以使用子类对象,因此在程序中应尽可能使用父类类型来定义对象,并且其子类类型应在运行时确定,父类对象应替换为子类对象。

依赖倒置原则 (DIP)

定义:高层模块不应该依赖低层模块,二者都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

依赖倒置的中心思想是面向接口编程。代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程。使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。

如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要手段。开闭原则的关键是抽象化,而依赖倒置原则说明了如何用面向接口编程去实现抽象化。

接口隔离原则 (ISP)

定义:使用多个专门的接口,而不使用单一的总接口。

客户端不应该依赖它们用不到的方法,只给每个客户端它所需要的接口。如果用户被迫依赖他们不使用的接口,当接口发生改变时,他们也不得不跟着改变。换而言之,一个用户依赖了未使用但被其他用户使用的接口,当其他用户修改该接口时,依赖该接口的所有用户都将受到影响。这显然违反了开闭原则,也不是我们所期望的。

一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干。使用接口隔离原则拆分接口时,首先必须满足单一职责原则,将一组相关的操作定义在一个接口中,且在满足高内聚的前提下,接口中的方法越少越好。

合成复用原则 (CRP)

定义:尽量使用对象组合,而不是继承来达到复用的目的。

通常类的复用分为继承复用和合成复用两种,继承复用虽然有简单和易实现的优点,但也有违反开闭原则的缺点。

继承复用破坏了类的封装性。因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为“白箱”复用。子类与父类的耦合度高。父类的实现的任何改变都会导致子类的实现发生变化,这不利于类的扩展与维护。它限制了复用的灵活性。从父类继承而来的实现是静态的,在编译时已经定义,所以在运行时不可能发生变化。

而合成复用是通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。它维持了类的封装性,且新旧类之间的耦合度低,复用的灵活性高。

迪米特法则 (LoD)

定义:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。

通俗地讲,就是一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。

我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。

如果一个系统满足迪米特法则,那么当其中一个软件实体发生变化时,就会尽量少的影响其他软件实体,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之间通信的宽度和深度。迪米特法则可以降低系统的耦合度,使类与类之间保持松耦合状态。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:面向对象设计原则-创新互联
网页链接:http://ybzwz.com/article/ddosjd.html