首页 > 其他分享 >软件设计原则(转)

软件设计原则(转)

时间:2023-06-11 18:55:52浏览次数:31  
标签:原则 软件设计 子类 接口 对象 CarSystem 父类 方法

原文:https://mp.weixin.qq.com/s?__biz=MzA3NjU5ODU1Nw==&mid=2247484119&idx=1&sn=a05e38fc0f67e9de93cd44fe2647a6bb&chksm=9f5f9ea5a82817b373c45f39fc87706f29b64eb1f8db40a688a6726c49ffe07804269e73824a&scene=27

自己的理解:

开闭原则

对类或函数,尽量用扩展代替修改,如果要增加新的功能,或者在原来的基础上有一些修改,那么尽量扩展一个新的版本,比如用继承或函数重载,尽量不要修改原有的对象,这样就不会影响用户代码

依赖倒置原则

高层模块不应该依赖底层模块细节。

文章中CarSystem的设计,高层的CarSystem类就依赖了具体的汽车类,导致每个汽车类改动的时候或者新增汽车类的时候CarSystem也必须要修改。我认为可以有2个解决方法:

1. 使用类模板来设计CarSystem类;

2. CarSystem类里可以用一个car的父类指针来保存具体的car,这个car可以是Honda也可以是Ford,它们要继承自同一父类(文中的ICar接口其实就类似于一个抽象基类,Honda和Ford都必须实现规定的接口)

单一职责原则

这个没什么好讲的,就是每个类或者函数只实现一个单一功能,尽量把每个功能拆分成小的函数

接口隔离原则

尽量使用多个专门的接口,而不使用单一的总接口。就是说不要把所有的接口都放到同一个基类里面。因为有些接口对某些继承类而言根本用不到,可以把多个接口划分到多个基类里面,这样继承来再根据自己的需要来选择继承哪些基类。

迪米特法则

一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合。

其实可以解释为一个对象不要过度依赖另一个对象的特征,尽量减少类之间的耦合。

里氏替换原则

如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序p在所有的对象o1都替换成o2时,程序p的行为没有发生变化,那么类型T2是类型T1的子类型。

可以理解为一个软件实体如果适用一个父类的话,那一定适用于其子类,所以引用父类的地方必须能透明地使用其子类的对象,子类的对象能够替换父类的对象,而程序逻辑不变。

引申含义:对类来说,子类可以扩展父类的功能,但不能改变父类原有的功能。对软件实体来说,这个程序逻辑不能依赖于继承体系里面某个类的特征,而用其他继承类替换时这个逻辑就行不通。

对类的要求:

子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
子类中可以增加自己特有的方法
当子类的方法重载父类的方法时,方法的前置条件(即方法的入参)要比父类方法的入参更宽松
当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即方法的返回值)要比父类更严格或相等

 

标签:原则,软件设计,子类,接口,对象,CarSystem,父类,方法
From: https://www.cnblogs.com/tan-wm/p/17473384.html

相关文章

  • 面向对象的设计原则
    什么样的代码可以称之为好代码?又如何评价代码比较差?每个人也许都有自己的标准,但是在软件设计领域中,有一套通过经验总结出来的,可以有效解决问题的指导思想和方法论,遵从这些原则,可以事半功倍,反之则有可能带来一些麻烦。SOLIDSOLID是五种设计原则首字母的缩写,有趣的是这个单词本身......
  • 设计原则之组合优先继承
    “组合优于继承”是一个面向对象编程的设计原则,它建议我们在需要复用代码的时候,尽量使用组合(has-a)的方式,而不是继承(is-a)的方式。组合是指一个类包含另一个类的对象作为自己的属性,而继承是指一个类直接从另一个类派生出来,拥有其所有的属性和方法。为什么要使用组合而不是继承呢?主......
  • 【面向对象】六大原则
    总述面向对象编程的六大原则是通过多年的实践和经验总结而来的,它们被广泛接受为指导面向对象软件设计和开发的基本准则。包括以下六点:单一职责原则(SingleResponsibilityPrinciple,SRP)里氏替换原则(LiskovSubstitutionPrinciple,LSP)依赖倒置原则(DependencyInversionPrincip......
  • 类之OCP(Open Closed Principle):开闭原则
    //z2012-4-1715:31:13PMIS21201.OCP是什么?OCP:OPENCLOSEDPRINCIPLE对扩展开放,对修改关闭Softwareentitiesshouldbeopenforextension,butclosedformodification//z2012-4-1715:54:58PMIS21201.1扩展通过继承、覆写......
  • CAP原则
    CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partitiontolerance)。CAP原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Parti......
  • Java的先行发生原则
    先行发生原则(Happens-Before)是Java内存模型定义的一个等效判断原则。依赖这个原则,我们可以通过几条简单规则判断数据是否存在竞争,线程是否安全,而不需要陷入Java内存模型苦涩难懂的定义之中。“先行发生”原则指的是什么。比如说操作A先行发生于操作B,其实就是说在操作B发生......
  • 项目设计原则(新增用户故事)
    用户故事:(1):角色:作为一个上班人员我每天需要从家里到公司开车,我想要各个地区的计价收费以及路况情况。(2):需求:计时收费:根据用户租赁的总体时长进行计算收费。路程收费:根据用户的开车总路程进行计算收费。(3)商业价值:①第一要务肯定是要考虑如何盈利,只有保证自身不断发展,才能推出......
  • 2023年上半年软件设计师中级学习总结(超详细)
    目录前言一、背景1.1上次考试感受:1.2这次考试感受:1.3方法:二、过程2.1计算机网络概论计算机组成数据表示相关知识校验码相关知识计算机体系结构网络体系结构OSI/RM和TCP/IP计算机安全性可靠性性能评价2.2程序设计语言基础知识编译和解释的区别编译过程图示编译各个阶段常见的错误......
  • Blender+kanzi 变换归原则和应用窗口的变换使用方法。
    1、选中物体,ctrl+a 弹出 应用窗口,选择应用旋转,它会把变换的窗口数值都归0.同理其他的也是一样。这个操作会把模型的轴心回归到blender画面的中心点儿。 如果不归0的话,导入到kanzi里面,模型就跟kanzi里的不一致。 2、移动物体到左上角,设置原点到几何中心。ctrl +a 全......
  • SOLID设计原则
    单一责任原则(SRP)一个类只能有一个职责(一个功能)![U7I(QNLB{I@T{RHTHJ4)22.png例子:支付接口(支付有非常多中方式但是每一种方式都是支付)此时就需要让抽象类去调用需要调用的类,而不是调用一个类,类中包含的非常多的功能优点:减少类中不相关功能的代码耦合,使得类更加的健壮;另外,单一职责原......