首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

面向对象设计原则-里氏替换原则

里氏替换原则(Liskov Substitution Principle,LSP)是面向对象设计中的一个重要原则,它由Barbara Liskov提出。...这个原则的基本思想是,派生类必须能够完全替换其基类。也就是说,子类对象能够在不改变程序正确性的前提下,替换掉父类对象。这个原则的目的是帮助设计师避免在使用继承时可能会出现的错误和问题。...LSP的定义LSP原则的正式定义是:“如果S是T的一个子类型,那么S对象可以替换T对象,而程序执行的结果不会发生变化。” 换句话说,一个子类必须能够完全替代其父类,且不会对程序的正确性造成任何影响。...这样,我们就可以创建Bird和Fish对象,并将它们当作Animal对象来使用:Animal bird = new Bird();Animal fish = new Fish();bird.move()...; // 输出:鸟儿在飞翔fish.move(); // 输出:鱼儿在游泳通过上面的代码可以看出,Bird和Fish对象可以完全替代Animal对象,而不会对程序的正确性造成任何影响。

22910

Java进阶 | 从整体上观察面向对象

1、特征之封装 将结构、数据、操作封装在对象实体中,使用时可以不关注对象内部结构,只能访问开放权限的功能入口,从而降低程序耦合程度,提供安全性和可持续维护性。...,但是部分不需要依赖整体存在。...组合关系:描述整体与部分的关系,但是部分需要依赖整体存在。...里氏替换:继承时遵循里氏替换原则,子类中尽量不要重写父类的方法,可以扩展父类的功能; 迪米特原则:最少知道原则即类对象对其依赖的类知道的越少越好,以此降低耦合程度; 组合/聚合复用:新对象应使用部分已有的对象...,所以对常规基础操作做好统一代码风格管理,这样有助于别人快速理解整体结构和逻辑。

30020

vue源码实现的整体流程解析「建议收藏」

二、vue实现原理概述 vue作为一个前端渐进式的MVVM开发库,将广大的前端劳苦大众从DOM操作中解放出来;说到vue的实现原理,大体可分为三个要素: 1、数据的响应式,即vue可以监听到数据的变化...显示页面,并绑定数据依赖和和事件 第四步:data的变化,触发rerender,更新视图的显示 一下将通过解释vue监听数据的变化、模板绑定数据数据渲染至页面、实现只渲染数据改变部分DOM这几个部分进行讲解...三、vue实现整体解析 1、vue如何实现对数据的监听的?...说到vue数据的监听,不得不提到Object.defineProperty,当前主流浏览器均支持此属性,vue数据双向绑定及数据的监听都是基于此实现的;请看下面代码: 1 var obj = {...第二个参数为要定义的属性或方法名称,(如果对象中不包含此属性将此属性添加到目标对象里,vue中将data数据指向vm就是用的这里,下面将详细讲解) 第三个参数为目标属性的所拥有的特性 这三个参数为必填参数

34120

面向对象的设计原则-里氏替换原则

"里氏替换原则"是类的设计原则之一,我们使用"3H"学习法对其进行拆解; why(目的):为什么要学习"里式替换原则",我们都知道面向对象的三大特性:封装、继承、多态,该原则就是对良好的"继承关系...(本质):"里式替换原则"到底是什么?...接下来我们开始进行具体的学习; 概念:LSP,"里式替换原则",凡是在父类出现的场景中,将父类替换为子类,程序逻辑不变,反之则未必可以。...,设置宽、高后,长方形的体积=宽*高,正方形体积=高*高,子类无法替换父类,不符合里氏替换原则; 在策略模式中,客户端类依赖抽象父类,场景类使用时传入具体的策略子类,子类都实现了父类的抽象接口,可以互换...,这就符合里式替换原则;

83830

面向对象有限元编程|整体结构类(上)

Python是一个动态语言,在list等容器类里,我们可以放入任何类型的数据(字符串,浮点数等): a = [1, 2.3, 'n'] 这个方便也会带来问题。说的高大上点,就是这样的代码不安全。...在创建结构对象时,要把所有的结点对象和单元对象放入列表nodeList和elementList中,从前面对Python语法的讨论可知,这是可行的,也很简便。...假定nd1,nd2,nd3,nd4,nd5是5个节点对象,elem1,elem2,elem3,elem4是4个单元对象,那么 nodeList = [nd1,nd2,nd3,nd4,nd5] elementList...&t1, &b1 }; return 0; } 同样,如果一个结构对象包含多种材料,也可以定义一个matrialList列表。...如何定义节点类和单元类可参考话题#面向对象有限元编程#前3篇。

48031

PHP面向对象之里氏替换原则简单示例

本文实例讲述了PHP面向对象之里氏替换原则。...分享给大家供大家参考,具体如下: 里氏替换原则(Liskov Substitution Principle) 里氏替换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常...,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。...里氏替换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象替换父类对象。...> / / 里氏替换原则是对类继承的一种约束。对里氏替换原则有两种理解: ① 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。 ② 子类中可以增加自己特有的方法。

55220

逃逸分析:分离对象、标量替换、同步锁消除

在JVM的即时编译语境下,逃逸分析将判断新建的对象是否逃逸。即时编译判断对象是否逃逸的依据:一种是对象是否被存入堆中(静态字段或者堆中对象的实例字段),另一种就是对象是否被传入未知代码。...逃逸分析的优点 逃逸分析的优点总体上来说可以分为三个:对象可能分配在栈上、分离对象或标量替换、消除同步锁。我们可以使用下图来表示。...对象可能分配在栈上 JVM通过逃逸分析,分析出新对象的使用范围,就可能将对象在栈上进行分配。栈分配可以快速地在栈帧上创建和销毁对象,不用再将对象分配到堆空间,可以有效地减少 JVM 垃圾回收的压力。...分离对象或标量替换 当JVM通过逃逸分析,确定要将对象分配到栈上时,即时编译可以将对象打散,将对象替换为一个个很小的局部变量,我们将这个打散的过程叫做标量替换。...将对象替换为一个个局部变量后,就可以非常方便的在栈上进行分配了。 同步锁消除 如果JVM通过逃逸分析,发现一个对象只能从一个线程被访问到,则访问这个对象时,可以不加同步锁。

13010

上帝视角看Vue源码整体架构+相关源码问答

在 created 前,主要是初始化实例的响应式数据和方法,首先初始化 inject 配置项,再初始化数据响应式和方法,最后解析组件配置项上的 provide 对象。...总结来说构建初始化 Vue 实例对象 vm。...答:响应式的数据主要分为两类:Object 和 ArrayObject 对象则利用 defineReactive(),来循环遍历整个对象,通过 Object.defineProperty 设置 getter...可能你还没有注意到,Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。...初始化后,自定义往 Vue 实例上的响应式对象添加属性,添加的属性是否具有响应式?如何自定义数据实现响应式?vm.$set() 和 vm.$delete() 方法,分别如何操作对象和数组?

1.7K10

你会怎么替换json对象中的key?

以上代码可以很好地完成工作,从而将obj对象中的"_id"替换成"id"。 在大多数情况下,这种方式不会带来什么问题,但是,如果你需要将obj对象序列化到文档中并比较差异,你就会看到问题。...但所有这些示例无一例外都不能同时满足下面两个要需: 保留要替换的key在原json对象中的顺序。既保证在JSON.stringify()执行之后输出的字符串中key的顺序和原json对象是一致的。...如果我们对res中的某些key进行替换,而返回一个新json对象的话,那么这个修改就不会反应到obj对象中。...基本思路:既然新添加的key默认都会排在最后,那么索性遍历json对象的所有key,然后将key一一替换为一个临时名称,随后再将这个临时名称替换回来。...在这个过程中,如果遇到真正需要替换的key,则不再进行二次替换

1.6K10

Vue 对象模块内如何使用 this 对象

众所周知,js 中的 this 对象在不同作用域下指代不同的对象实例,并且在以下 4 种场景中经常会“不知所向”: 在定时器(setTimeout、setInterval等)回调中 在事件句柄回调中 在硬件环境...是因为调用代码没有将 this 对象传递过去。在 js 中所有函数或方法,其类型都是 Function,这个对象的三个方法call、apply、bind的第一个参数均是 thisArg。...所以最好的对象模块开发规范是,不使用 this 关键字。 这里指对象模块,默认导出是一个全局的对象这种场景;如果是导出 Class,在类方法中访问类属性,是必使用 this 关键字的。...对象模块维护自身状态,原则上它不需要、也不能向外暴露自己的私有变量。如果外界模块需要这个对象的一个只读属性,怎么办?...Q/A 在回调中如何保证 this 对象的正确指向? 使用bind方法,在上面已经使用过了。

2.6K20
领券