首页 > 其他分享 >面向对象的设计原则

面向对象的设计原则

时间:2022-09-05 18:00:32浏览次数:75  
标签:原则 基类 接口 开闭 面向对象 Principle 派生类 设计

开闭原则(The Open-Closed Principle ,OCP)


软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。

系统设计需要遵循开闭原则的原因


    1. 稳定性。开闭原则要求扩展功能不修改原来的代码,这可以让软件系统在变化中保持稳定。
    2. 扩展性。开闭原则要求对扩展开放,通过扩展提供新的或改变原有的功能,让软件系统具有灵活的可扩展性。
        遵循开闭原则的系统设计,可以让软件系统可复用,并且易于维护。

 

 里氏替换原则(Liskov Substitution Principle ,LSP)


所有引用基类的地方必须能透明地使用其派生类的对象。

只有满足以下2个条件的OO设计才可被认为是满足了LSP原则:

  • 不应该在代码中出现if/else之类对派生类类型进行判断的条件。

  • 派生类应当可以替换基类并出现在基类能够出现的任何地方,或者说如果我们把代码中使用基类的地方用它的派生类所代替,代码还能正常工作。

里式替换原则的引申意义:子类可以扩展父类的功能,但不能改变父类原有的功能。

迪米特原则(最少知道原则)(Law of Demeter ,LoD)
迪米特原则(Law of Demeter)又叫最少知道原则(Least Knowledge Principle),可以简单说成:talk only to your immediate friends,只与你直接的朋友们通信,不要跟“陌生人”说话。

单一职责原则


永远不要让一个类存在多个改变的理由。

换句话说,如果一个类需要改变,改变它的理由永远只有一个。如果存在多个改变它的理由,就需要重新设计该类。

单一职责原则原则的核心含意是:只能让一个类/接口/方法有且仅有一个职责。

 接口分隔原则(Interface Segregation Principle ,ISP)


不能强迫用户去依赖那些他们不使用的接口。

依赖倒置原则(Dependency Inversion Principle ,DIP)


A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
B. 抽象不应该依赖于细节,细节应该依赖于抽象 C.针对接口编程,不要针对实现编程。

组合/聚合复用原则(Composite/Aggregate Reuse Principle ,CARP)


尽量使用组合/聚合,不要使用类继承。

 

标签:原则,基类,接口,开闭,面向对象,Principle,派生类,设计
From: https://www.cnblogs.com/diandianzai/p/16659047.html

相关文章

  • 高并发系统:它的通用设计方法是什么?
    我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流......
  • UML各设计图概要
    1.面向对象分析设计的三个模型对象(静态)模型:描述系统的静态结构,包括类和对象,它们的属性和操作,以及它们之间的关系。包括:类图、对象图动态模型:着重于......
  • 【设计模式】Java设计模式 - 建造者模式
    【设计模式】Java设计模式-建造者模式......
  • 【UML分析、建模与设计】我在工作时遇到UML
    一、前言UML分析、建模与设计来自现实世界中的概念的抽象描述方法(摘取自《UML面向对象分析、建模与设计(第2版)》)就我对UML分析与建模技术的认知,最早可追溯至2019年时的......
  • 【Java基础】面向对象的特征:封装性和权限修饰符
    1.封装(1)什么是封装使用洗衣机时,只需要放入衣物,按下开关和洗涤模式,不需要了解洗衣机的内部结构。只需要知道这个程序怎么用,隐藏对象内部的复杂性,只对外公开简单的接口,便......
  • D_07 高并发系统的设计开发要点
    一、产品需求澄清、pm排期和任务分解二、开发设计评审(研发、测试参与)(1)功能设计流程图采用亿图图示梳理:系统与外部系统交互、系统模块之间流程、核心功能流程图(2)......
  • RDLC报表设计1: 添加ReportViewer Control
    https://docs.microsoft.com/en-us/sql/reporting-services/application-integration/integrating-reporting-services-using-reportviewer-controls-get-started?view=sql......
  • 2022-2023-1 20221311《计算机基础与程序设计》第一周学习总结
    作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业链接:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01作业目标:快速浏览教材作业正文:ht......
  • 导航页面设计/课程
    导航页面设计/课程导航页面设计/课程免费下载在HTML、CSS和JavaScript中HTML:部分导航h1前沿趋势h3.span.loader跨度.mB跨度.mE跨度.mN......
  • JAVA 面向对象-上 (一)
    JAVA面向对象-上(一)类与对象1.面向对象学习的三条主线:①Java类及类的成员:属性、方法、构造器;代码块、内部类②面向对象的三大特征:封装性、继承性、多态性、(抽象性)......