首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏DDD

    LSP之instanceof

    但代码里面用到了instanceof,当用到这个关键字,而且是在抽象实体时,基本上可以断定是抽象的层次不够, 可能违背了LSP LSP原则很明了:子类可以随时替换父类;这儿用了instanceof,说明有不可替换的成份在 每一种CheckCode都有各自不同的行为 ---- 一般通过instanceof判断子类型时,都有不满足LSP的嫌疑;在这个场景中也差不多,但抓住了这一点,重新思考一下,类层次与结构行为可以设计得更合理

    75230发布于 2021-03-23
  • 来自专栏云深之无迹

    什么 lsp

    “1 个最低有效位(Least Significant Bit, LSB 或 LSb)”的含义是:

    96810编辑于 2025-05-12
  • 来自专栏DDD

    SOLID之LSP

    里氏代换原则 LSP,Liskov Substitution Principle 子类型必须能够替换掉它们的基类型 若对每个类型S的对象O1,都存在一个类型T的对象O2,使得在所有针对T编写的程序P中, 用O1替换O2后,程序P行为功能不变,则S是T的子类型 LSP是继承关系设计基本原则,也是使OCP成为可能的主要原则之一。 那么D就违反了LSP。显然,D对于f来说是脆弱的。 f的编写者会想去对D进行一些测试,以便于在把D的对象传递给f时,可以使f具有正确的行为。 ,意味着LSP与通常的数学法则和生活常识有不可混淆的区别 在OOD中IS-A关系是就行为方式而言,而不是属性,这也就是面向接口编程;派生类的行为方式和输出不能违反基类已经确立的任何限制。 基类的用户不应该被派生类的输出扰乱 简单判断就是“可替换性”,子类是否能替换父类并保持原有行为不变 LSP与架构 LSP从诞生开始,也就差不多这些内容,主要是指导如何使用继承关系的一种方法。

    89430发布于 2021-03-23
  • 来自专栏一个程序员的修炼之路

    里氏替换原则(LSP)

    里氏替换原则(英文名为Liskov substitution principle,简称LSP)是由Barbara Liskov在1988年提出的,在Robert C.

    85520编辑于 2022-06-21
  • 来自专栏深度学习计算机视觉

    里式替换原则(LSP

    讲继承 所有引用父类的地方都必须可以透明的使用其子类对象 几个原则: 1、子类必须完全实现父类的方法 2、子类可以有自己的个性 3、覆盖或实现父类的方法时输入参数可以被放大 4、覆写或实现父类的方法时输出结果可以缩小 public class C { public int func(int a, int b){ return a+b; } } public class C1 extends C{ @Override public int fun

    900120发布于 2018-04-24
  • 来自专栏xingoo, 一个梦想做发明家的程序员

    LSP(分层服务提供者)

    LSP本身是DLL,可以将它安装到winsock目录,以便创建套接字的应用程序不必知道此LSP的任何信息就能调用它。 安装LSP: 实现LSP之前,要先将分层提供者安装到winsock目录,安装包括一个WSAPPROTOCOL_INFOW结构,定义了分层提供者的特性和LSP填写链的方式。 实现LSP的DLL要么被另一个LSP加载,要么直接被WS2_32.DLL加载。取决于它的位置。 如果LSP没有在协议链的顶端,就会被链中位于它上层的LSP加载,否则的话,将被WS2_32.DLL加载。 安装LSP时,必须在winsock目录中安装两种协议:一个分层协议,一个协议链。 LSP

    2K50发布于 2018-01-17
  • 来自专栏码农架构

    里式替换(LSP)跟多态有何区别?哪些代码违背了LSP

    里式替换原则的英文翻译是:Liskov Substitution Principle,缩写为 LSP。 哪些代码明显违背了 LSP? 实际上,里式替换原则还有另外一个更加能落地、更有指导意义的描述,那就是“Design By Contract”,中文翻译就是“按照协议来设计”。

    60430发布于 2021-01-19
  • 来自专栏EmacsTalk

    使用 eglot 代替 lsp-mode

    对于 Emacs 来说,主要有两个实现: •emacs-lsp/lsp-mode,主打功能丰富 •joaotavora/eglot,主打小巧精悍 笔者本人在使用 lsp-mode 多年后转到了 eglot ,主要觉得 lsp 太占用内存,很多功能华而不实。 下面是笔者在使用 lsp-mode 几天后,执行 memory-report 后的数据(完整版): Largest Variables 1.8 GiB lsp-clients 1.8 GiB lsp--session 1.8 GiB lsp--last-active-workspaces 4.6 MiB package-archive-contents 4.5 MiB 有关,而且在用 lsp-mode 进行 Rust 开发时,能明显感到卡顿,根本不敢用 rust-analyzer 来进行补全,之前笔者都是用 tabnine 来进行 Rust 代码的补全,只用 lsp

    1K10编辑于 2022-07-26
  • 来自专栏石的三次方

    lsp都要看的内存模型

    JMM(Java Memory Model):全称Java内存模型。它定义了**Java虚拟机在计算机内存中的工作方式**。它是一套规范,并不真实存在。它包括三个点:原子性,可见性,有序性

    82710发布于 2021-01-05
  • 来自专栏测试开发架构之路

    设计模式|LSP(里氏替换)原则

    sanMao.setGun(new Rifle()); sanMao.killEnemy(); } } 注意:在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP

    1K30编辑于 2022-08-01
  • 来自专栏北洋csdn

    深入理解LSP:里氏替换原则

    推荐书籍《unix编程的艺术》solid之lsp:里氏替换原则在设计继承关系的时候应该保证子类可以完全替换父类,忽略类型做特殊处理。 最典型的关于lsp的设计题是 长方形和正方形这两个类的设计,凭借经验 正方形是特殊的长方形,因此正方形可以继承长方形。

    39210编辑于 2023-12-12
  • 来自专栏dylanliu

    设计原则之里氏替换原则(LSP)

    简介 里氏替换原则是在做继承设计时需要遵循的原则,不遵循了 LSP 的继承类会带来意想不到的问题。 LSP 对语言增加了新的签名约束(协变与逆变可以看这篇文章Java中的逆变与协变): Contravariance of method arguments in the subtype. 思考 继承描述的是 is-a 关系,开闭原则要求我们使用继承增加功能,LSP 原则是指导我们如何继承。 注意,这里已经违反了 LSP 原则,在基类中并没有异常抛出,使用方正常使用,而在 Penguin 类中 fly 方法抛出了异常,违反了基类遵守的契约。 遇到违反 LSP 原则的继承,有两招来解决:1. 修改实现,2。 更改设计。

    1.4K40发布于 2019-07-01
  • 来自专栏Tecvan

    实例解析:如何开发 VSCode LSP 服务

    展开介绍各种语言特性的实现细节,解答 LSP 的通讯模型与开发模式。 /vscode-lsp-sample # 4. 此外,如果你选择使用 TS 编写 LSP,事情会变得更简单。 深入理解 LSP 看完示例后,我们再反过头来看看 LSPLSP —— Language Server Protocol 本质上是一种基于 JSON-RPC 的进程间通讯协议,LSP 本身包含两大块内容: 定义 client 与 server 之间的通讯模型,

    3.7K20编辑于 2021-12-09
  • CC++ 病毒木马LSP劫持应用

    应用程序通过 socket 进行网络通信时会调用 ws2_32.dll 的导出函数,比如 send/recv 等,而这些函数时通过更底层的 LSP 提供的 SPI(服务提供者接口)实现的。 所以注册一个 SPI 并插入到 winsock 目录的最前面就可以劫持 LSP 了! 另外劫持 LSP 需要将代码卸载 DLL 里(毕竟人家也叫劫持嘛 ~) 代码(来自网络) freesec.dll // 全局遍历 WCHAR exepath[MAX_PATH] = { 0 }; WSPPROC_TABLE

    1K10编辑于 2022-12-28
  • 来自专栏开心的学习之路

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

    第一种:If for each object O1 of type S there is an object O2 fo type T such that for all programs P defined in terms of T, the behavior of P is unchanged when O1 is substitueted for O2 then S is a subtype of T. (对于每一个S类型的对象O1, 都有一个T类型的对象O2,使以T定义的程序P在使用O2替换O1时,行为不发生变化,则S是T的子类)。

    1.2K20发布于 2019-02-14
  • 来自专栏前端桃园

    实例解析:如何开发 VSCode LSP 服务

    展开介绍各种语言特性的实现细节,解答 LSP 的通讯模型与开发模式。 核心代码有: server/src/server.ts:LSP 服务端代码,提供代码补全、错误诊断、代码提示等常见语言功能的示例 client/src/extension.ts:提供一系列 LSP 参数 此外,如果你选择使用 TS 编写 LSP,事情会变得更简单。 深入理解 LSP 看完示例后,我们再反过头来看看 LSPLSP —— Language Server Protocol 本质上是一种基于 JSON-RPC 的进程间通讯协议,LSP 本身包含两大块内容: 定义 client 与 server 之间的通讯模型,

    2.1K50发布于 2021-08-13
  • 来自专栏小码匠和老码农

    JupyterLab中代码自动补全神器一:lsp

    JupyterLab中代码自动补全神器一:lsp 大家平时用的编辑器都有代码自动补全功能,JupyterLab中,默认是没提供自动补全功能,但可以通过安装插件实现代码自动补全功能。 LSP Github https://github.com/jupyter-lsp/jupyterlab-lsp 特性 悬停显示包含功能/类签名、模块文档或语言服务器提供的任何其他信息的工具提示 诊断 oldgeek C:\Users\coder>conda activate coder (coder) C:\Users\coder> 安装扩展 conda install jupyterlab-lsp 安装LSP服务 pip install 'python-lsp-server[all]' 安装插件 jupyter labextension install @krassowski/jupyterlab-lsp

    13.8K10编辑于 2022-06-16
  • 来自专栏前端食堂

    前端LSP真是越来越多了

    有,这就是LSP(Language Server Protocol,即语言服务协议)。 当然,不是这个LSP LSP是编辑器和语言工具(例如linter、静态类型检查、代码风格检查)之间进行通信的标准协议。 没有LSP,不同语言需要实现这些工具与不同编辑器的通信。 有了LSP,他就能作为语言与编辑器之间沟通的桥梁。 对于前端领域,不同前端框架都在积极探索LSP方面的可行性,比如: Vetur[4]作为Vue针对VSCode的工具集,是Vue开发者的标配 相比Vue的模版语法,React直接写JS可以获得更好的静态类型分析 对于想错位竞争的前端同学,可以学习LSP相关知识,未来走大厂基建岗位。

    1.4K40发布于 2021-08-20
  • 来自专栏MasiMaro 的技术博文

    从零开始配置vim(26)——LSP UI 美化

    之前我们通过几个实例演示如何配置其他语言的lsp服务,相信各位小伙伴碰到其他的编程语言也能熟练的配置它对应的lsp服务。 本篇讲作为一个补充,我们来优化一下LSP 相关的显示 配置 UI 原始的 lsp 显示有点素,我们使用插件对它进行一些美化,这里使用插件 lspsaga.nvim 。 () 该插件对 NeoVim 原生 LSP 显示做了一些更改,并提供了一些方便的命令来实现LSP 相关的功能。 我们将它对应的功能绑定到快捷键上替换原有的 LSP 对应的快捷键 lsp_keybinds.set_keymap = function (bufnr) print("set lsp keymap 关于LSP的相关配置已经结束了,下一篇我们将要讨论如何使用代码片段进一步减少我们编码时输入的字符数。请各位敬请期待

    2.9K30编辑于 2022-10-28
  • 来自专栏Python数据结构与算法

    【AI时代的设计模式:LSP原则的智能应用】

    前言 本文主要讲解lsp原则 不是你以为的下面这种lsp, 狗头保命) lsp原则介绍 里氏替换原则(LSP),这是SOLID原则之一。 下面我们将以银行卡中的信用卡和储蓄卡为例,介绍不遵循LSP原则的例子,以及如何通过LSP进行优化。 下面我将遵循lsp原则,将信用卡和储蓄卡的共性抽取出来,都继承自同一个父类BanCard,使得在程序中可以 使用父类 BankCard 类型 来引用它们,而程序行为仍然是正确的。 遵循lsp的新设计 替换: 信用卡的 withdraw 方法和储蓄卡的 withdraw 方法是不同的。储蓄卡只能在余额范围内取款,而信用卡则可以透支。 总结 总结来说,LSP原则要求在扩展类时不修改调用方代码,确保子类对象可以替换父类对象。

    51410编辑于 2024-12-23
领券