liskov-substitution-principle
全部标签 我读过一些关于将Square作为Rectangle类的继承类的做法的文章,说它违反了LSP(Liskov替换原则)。我还是不明白,我用Ruby做了一个示例代码:classRectangleattr_accessor:width,:heightdefinitialize(width,height)@width=width@height=heightendendclassSquare谁能告诉我这是怎么回事? 最佳答案 我并不总是热衷于Liskov,因为它似乎限制了您可以基于行为而不是“本质”进行继承。在我看来,继承始终是一种“是一种”关
BretVictor的InventingonPrinciple视频(http://vimeo.com/36579366)给我很大启发。此外,我对使用Javascript绘制的那棵树非常着迷。我没有做过多少图形编程。在我的整个职业生涯中,我一直是一名中间层和数据库开发人员。但是看着那棵以编程方式绘制的树,我有学习的动力。我已经开始学习Javascript。我知道我最终(在几周或几个月内,取决于我有多少时间)能够自己从头开始编写这样的程序。但是,我真的非常渴望获得一些用Javascript进行类似绘图的源代码并使用它。你们可以提供的任何链接/指针都会非常有用。
我正在研究XML模式中的替换组,但我似乎找不到官方规范。任何人都可以指出我吗?我想知Prop有替换组属性的元素是否可以替换复杂元素或仅全局元素中的元素,如w3schools声明:"NotethatallelementsinthesubstitutionGroup(theheadelementandthesubstitutableelements)mustbedeclaredasglobalelements,otherwiseitwillnotwork!"以上说法正确吗?因为每个全局元素都可以是XML实例的根-在它们上定义替换组有什么意义? 最佳答案
LSP说“派生类型不能改rebase类型的行为”,换句话说“派生类型必须完全可以替换它们的基类型”。这意味着如果我们在基类中定义虚方法,我们就违反了这个原则。另外,如果我们使用new关键字在驱动方法中隐藏一个方法,那么我们又违反了这个原则。换句话说,如果我们使用多态性,我们就违反了LSP!在许多应用程序中,我在基类中使用了虚拟方法,现在我意识到它违反了LSP。另外,如果你使用模板方法模式,你就违反了我经常使用它的原则。那么,当您需要继承并且还希望从多态性中获益时,如何设计符合此原则的应用程序呢?我很困惑!请参阅此处的示例:http://www.oodesign.com/liskov-s
我们都用一些模式编写代码,即使我们没有意识到。我试图真正理解一些S.O.L.I.D原则,以及您如何在现实世界中应用这些原则。我正在为“D”而苦苦挣扎。我有时会混淆依赖倒置和依赖注入(inject)。这是否意味着只要你让事情依赖于抽象(IE:接口(interface))你就完成了。有没有人有一个小的C#示例来解释它?谢谢。 最佳答案 看看MarkSeeman的博客,或者买他的书更好。它涵盖的不仅仅是DI。我很感激您可能只想要一个简单的示例。然而,许多自称了解的人其实并不了解这一主题,因此值得好好学习。也就是说,这是一个非常简单的例子。
我更多是出于好奇而不是真正关心它,但我一直想知道JavaScript事件系统是否违反了Liskovsubstitutionprinciple(LSP)或不。调用EventTarget.dispatchEvent,我们可以发送Event可能由已注册的EventListener处理的任意类型.interfaceEventListener{voidhandleEvent(inEventevt);}如果我正确理解LSP,则意味着anyEventListener.handleEvent(anyEvent)不应该失败。但是,通常情况并非如此,因为事件监听器通常会使用专用Event的属性。子类型。在
我用d3.svg.diagonal()渲染的边实现了下图。但是,当我尝试用d3.svg.line()替换对Angular线时,它似乎没有提取目标和源数据。我错过了什么?关于d3.svg.line有什么我不明白的地方吗?以下是我所指的代码,后面是完整代码:varline=d3.svg.line().x(function(d){returnd.lx;}).y(function(d){returnd.ly;});...varlink=svg.selectAll("path").data(links).enter().append("path").attr("d",d3.svg.diagona
在升级之前,我正在PHP5.4上测试我现有的代码。我发现以下代码不再有效,因为PHP收紧了它的继承模型。由于收紧,我一直在阅读SOLID,特别是Liskov'ssubstitutionprinciple(我是一个自学成才的程序员)这样我就可以改进我的代码并且不会遭受future的“紧缩”。interfaceIComparable{publicfunctionequals(self$other);}classAimplementsIComparable{protected$var;publicfunction__construct($v){$this->var=$v;}publicfun
我正在尝试制作开源缓存库。库的目的是提供将变量(可以是对象,可以是数组,可以是任何东西)存储到文件然后在调用时检索它的方法。(通常那些变量值是海量数据库查询和计算的结果)。该项目的基本目标是实践称为Solid的面向对象设计原则。如果有人能指出我在哪里违反了坚实的原则以及如何解决它我完全理解stackoverflow不是一个代码编写服务,但是嘿,我正在将这个库开源,所以它会让我们的社区受益。这是我的文件结构。我是UML新手,所以如果发现任何错误请忽略这是类的实现。缓存namespacelibrary\pingle\cache;uselibrary\pingle\cache\config\
我遇到了以下问题:我有这些类和接口(interface)定义publicabstractclassViewModelRefreshPostListFragment>extendsRefreshPostListFragmentimplementsIRefreshPostView{privatefinalViewModelHelpermViewModeHelper=//errorherenewViewModelHelper();...}publicabstractclassRefreshPostViewModelextendsAbstractViewModel{}publicclassVi