首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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从诞生开始,也就差不多这些内容,主要是指导如何使用继承关系的一种方法。

64030
您找到你想要的搜索结果了吗?
是的
没有找到

从零开始配置vim(23)——lsp基础配置

上一章,我们初步认识了lsp,并且对 nvim-treesitter插件进行了配置,为编辑器提供了代码着色、自动格式化以及增量选中功能。算是初步体验了 lsp的相关功能。...从这篇开始我们通过lsp的功能,进一步提升代码编辑、查阅等功能的体验 neovim lsp 早期想通过 neovim 使用 lsp 得通过一个额外的插件 nvim-coc 。...好在 neovim 社区听从了程序员们对于 lsp 的呼唤,它内置了lsp 的客户端,并且为了方便配置服务端,它提供了一个名为 nvim-lspconfig 的插件。...require('lspconfig').xx.setup{…} 检查 lsp 的服务端在该缓冲区是否正常运行 print(vim.inspect(vim.lsp.buf_get_clients())...nvim-lsp-installer 插件 require("nvim-lsp-installer").setup {} 我们可以使用 LspInstallInfo 命令来查看当前lsp服务的安装情况

3.2K10

从零开始配置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的相关配置已经结束了,下一篇我们将要讨论如何使用代码片段进一步减少我们编码时输入的字符数。请各位敬请期待

1.9K30

《架构整洁之道》第 9 章 LSP:里氏替换原则

里氏替换原则:(LSP :Liskov Substitution Principle)。使用一个父类对象,替换成该父类对象的子类对象后,该程序不会发生异常。...这样就是符合LSP原则的。图片正方形/长方形问题以下设计中,正方形/长方形问题,是一个著名的违反LSP的设计案例。图片可以看到,User调用Rectangle为获得长方形的面积,可设置宽高。...所以这是一个违反LSP的案例,正方形不该继承于或者说成为长方形的子类型。...LSP 与软件架构可以看出,上述讲的是类和接口的继承与实现关系。然而随着时间推移,LSP演变成了一种更广泛的,指导接口与其实现方式的设计原则。...本章小结LSP可以且应该被用于软件架构层面,因为一旦违反了可替换性,该系统就不得不为此增添复杂的应对机制。

22630
领券