我是OOP的新手。最近我读到有关Liskov替换原则的内容。在下面给出的代码中,Square类继承了Give_Area。假设Square类有一些与正方形相关的事情(比如有效性检查)。Give_Area给出正方形的面积(4个顶点在圆的周长上)和圆的面积。所以,如果给我一个Radius,我必须打印圆和正方形的面积(由放置在该圆周长上的顶点组成)。为了获得圆的面积,我使用了一个参数。但是在获取正方形面积时没有参数。因此我在这里完成了重载。#include#includeusingnamespacestd;classGive_Area{public:doubleRadius;doubleAre
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。ImprovethisquestionLiskov替换原则(LSP)指出,如果对象o1是S的一种类型,并且它可以替换为T类型的对象o2而不会违反其所有用户的原始行为,则S是T的一个子类型。用于显示LSP违规的常见示例是Rectangle及其派生类型Square。论据是,虽然直觉上Square似乎是Rectangle的子类型,但Square有一些不同于Rectangle的行为。结论是Square不能是LSP的Rectangle的
介绍里氏替换原则的文章非常多,但可能大家看完之后,心中仍然留有疑问,如何去落地实现,如何判断是否影响程序功能。本文将带领大家深入理解里氏替换,一起领略下它的真正面目。但在此之前,有必要阐述一下,为什么会提出设计原则以及设计原则的作用。什么是设计原则设计原则是指导代码设计的经验沉淀,其目的是为了提高软件开发的可维护性。我们知道,程序世界并非一尘不染的,随着业务的发展,之前所设计的流程,会为了适应业务而不断调整改变。 对于开发来说,需要有业务前瞻性,凡事多往前考虑一步,尽量减少因为未来业务改变,而造成系统大范围的改动。一旦大范围改动,势必造成开发和回归的成本。所以开发的时候,多思考这样的设计是否违
一、方法重写(override)在子类中将父类的方法再重新定义一遍称之为方法重写什么时候需要方法重写:如果父类继承的方法不能满足子类的需要,或者不适合子类的需要。此时子类可以从父类继承的方法重写定义为满足自己需要的方法。在下例中,Cat类继承了Pet的sound方法,但是并不适用于cat,此时可以进行方法的重写。publicclassPet{privateintweight;privateStringcolor;//方法soundpublicvoidsound(){}}publicclassCatextendsPet{@Override//方法重写,实现猫叫publicvoidsound(){
里氏替换原则OOP(ObjectOrientedProgramming)面向对象编程OO中的继承性的思考1.继承包含这样一层含义,父类中凡是已经写好的方法,实际上就是设定规范。虽然不强制要求所有子类必须遵守规范(不重写方法),但是如果子类对这些方法,任意修改就会对继承体系造成破坏。2.继承在程序设计带来便利同时,也带来弊端。使用继承会给程序带来侵入性,程序的可移植性降低,增加了对象间的耦合,如果一个类被其他类继承,则当这个类需要修改时,必须考虑所有的子类,并且父类修改后,所有涉及到的子类的功能可能会受到影响。3.问题提出,编码中如何正确的使用继承?=>里氏替换原则基本介绍1.里氏替换原则(Li
里氏替换原则前言一、介绍二、代码演示1、版本一:原始版本2、版本二:里氏替换原则前言本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!一、介绍(1)引入继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。继承在给程序设计带来便利的同时,也带来了弊端。比如:●使用继承会给程序带来侵入性;●程序的可移植性降低;●增加对象间的耦合性;●如果一个类被其他的类
我有一些处理程序(“Controller”)类,它们可以以某种方式处理项目:interfaceIHandler{publicfunctionexecute(Item$item);}classFirstHandlerimplementsIHandler{publicfunctionexecute(Item$item){echo$item->getTitle();}}classSecondHandlerimplementsIHandler{publicfunctionexecute(Item$item){echo$item->getId().$item->getTitle();}}clas
我的处境与SteveMcConnell's非常相似在CodeComplete中有提到。只有我的问题是基于Vehicles而Trike恰好是根据法律属于Cars类别。到目前为止,汽车只有四个轮子。无论如何,我的域都不必要地复杂,因此很容易坚持使用下面的猫示例。BesuspiciousofclassesthatoverridearoutineanddonothinginsidethederivedroutineThistypicallyindicatesanerrorinthedesignofthebaseclass.Forinstance,supposeyouhaveaclassCata
设计原则系列文章 必知必会的设计原则——单一职责原则必知必会的设计原则——开放封闭原则必知必会的设计原则——依赖倒置原则必知必会的设计原则——里氏替换原则必知必会的设计原则——接口隔离原则必知必会的设计原则——迪米特原则必知必会的设计原则——合成复用原则概述如果S(子类)是T(父类)的子类型,则T(父类)类型的对象可以替换为S(子类)类型的对象。 所有引用父类对象的地方,都可以使用子类类型代替。子类可以替换父类。里氏替换代码publicclassPerson{publicstring?Name{get;set;}}publicclassStudent:Person{publicintId{g
设计原则系列文章 必知必会的设计原则——单一职责原则必知必会的设计原则——开放封闭原则必知必会的设计原则——依赖倒置原则必知必会的设计原则——里氏替换原则必知必会的设计原则——接口隔离原则必知必会的设计原则——迪米特原则必知必会的设计原则——合成复用原则概述如果S(子类)是T(父类)的子类型,则T(父类)类型的对象可以替换为S(子类)类型的对象。 所有引用父类对象的地方,都可以使用子类类型代替。子类可以替换父类。里氏替换代码publicclassPerson{publicstring?Name{get;set;}}publicclassStudent:Person{publicintId{g