• 面向对象设计原则


    表1  7种常用的面向对象设计原则

    设计原则名称

    定  义

    使用频率

    单一职责原则

    (Single Responsibility Principle, 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)

    一个软件实体应当尽可能少地与其他实体发生相互作用

    ★★★☆☆

    1.单一职责原则

    单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

    单一职责原则是实现高内聚、低耦合的指导方针

    我的原则是:只有逻辑足够简单,才可以在代码级别上违反单一职责原则;只有类中方法数量足够少,才可以在方法级别上违反单一职责原则。

    遵循单一职责原的优点有:

    可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
    提高类的可读性,提高系统的可维护性;
    变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

    2.里氏替换原则

    里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。

    在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。

    里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:
    1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
    2.子类中可以增加自己特有的方法。
    3.当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
    4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

    3.依赖倒转原则

    依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

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

    在实际编程中,我们一般需要做到如下3点:
    1.低层模块尽量都要有抽象类或接口,或者两者都有。
    2.变量的声明类型尽量是抽象类或接口。使用继承时遵循里氏替换原则。
    3.依赖倒置原则的核心就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。

    4.接口隔离原则

    接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。


    5.迪米特法则

    迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用
    定义:一个对象应该对其他对象保持最少的了解。
    类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。
    因此,尽量降低类与类之间的耦合。

    6.开闭原则
    开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

     

  • 相关阅读:
    10.01 简单的51代码
    1010Linux的文件操作函数以及所需头文件
    10.05 最初对Linux的了解,对Shell的认识
    1006 Linux的基本命令以及一些简单的通配符说明
    10.03 简单的51单片机程序
    1011Linux用户管理规则及用户管理函数
    vim命令以及gcc编译器的常用cmd
    10.02 一个简单的串口的初始化程序
    做销售的100个绝招
    一个女程序员的创业人生:胆识也是一种能力
  • 原文地址:https://www.cnblogs.com/AlanCheng/p/5531331.html
Copyright © 2020-2023  润新知