lsp

    1热度

    1回答

    在我的GWT应用程序,我有一个类,像这样: public class AppActivityMapper implements ActivityMapper { @Override public Activity getActivity(Place place) { if(place instanceof ThisPlace) { return new Th

    4热度

    1回答

    其中一个recommended principles of object-oriented programming是Liskov substitution principle:子类的行为应与其基类相同(警告:实际上这不是Liskov原理的正确描述:请参阅PS)。 是否建议它也适用于构造函数?我主要考虑Python和它的__init__()方法,但这个问题适用于任何具有继承的面向对象语言。 我在问这

    0热度

    3回答

    如何建立一个域,当你有一个基类和2个类扩展这个基类并且只有一个派生类与另一个对象有关系时。 例子: public abstract class Base { public abstract void method(); } public class1 extends Base { public void method() { do some st

    1热度

    3回答

    此问题引用代表团找到的设计模式here。 我有很多的接口,我代表各种实体的游戏引擎: 球员 车 网 等 和这些每一个都可以被渲染,因此它们实现了包含方法render()的Renderable接口。 方法1 使用代表团,一个例子是这样的: public interface Vehicle { public void drive(); } public class Car impl

    5热度

    2回答

    比方说,我们有这个真是小巫见大巫类: class A { virtual int Function(int number) { return number; } } class B : A { override int Function(int number) { return number + 1; }

    1热度

    3回答

    我有一个模型抽象类,它声明了一个项目列表。摘要有两个抽象类。其中你可以添加新的项目到列表和一个根本不使用该列表,但除此之外的模型抽象类的其他行为。 我声明了两种方法来添加和删除列表中的项目。很显然,无论何时我想使用这些方法,我都需要将模型抽象与其子类一起施放。 在这种情况下,我可以违反LSP (Liskov substitution principle)吗?或者有解决这个问题的办法吗?

    13热度

    2回答

    我处于与Code Complete中提到的Steve McConnell's非常相似的情况。只有我的问题是基于车辆和三轮车碰巧在法律属于汽车类。到目前为止,汽车有四个车轮。任何方式我的域名是不必要的复杂,所以很容易坚持下面的猫的例子。 要怀疑重写常规做内 任何派生例行这通常表明在 基类设计中的错误类。例如,假设你有一个类Cat和一个例程Scratch(),并且假设你最终发现有一些 猫被声明并且不能

    7热度

    4回答

    我正在用C#编写一系列集合类,每个集合类都实现类似的自定义接口。是否可以为接口编写单个单元测试集合,并自动在几个不同的实现上运行它们?我想避免每个实现的任何重复的测试代码。 我愿意查看任何框架(NUnit等)或Visual Studio扩展来完成此操作。 对于那些希望做同样的,我贴我的具体的解决方案,基于断avandeursen's accepted solution,为an answer。

    0热度

    1回答

    在C#中 - 但它可能适用于其他语言 - 在LSP的上下文中,我如何确保从另一个(可变的)继承的类不会破坏原始合同? 例如: 如果我有public,internal或protected属性setter,有一种风险,即继承类将打破原有的合同。 同样适用于virtual方法。 如果父代和继承类的所有者不是同一个人,那么这可能会导致合同和原始开发人员的意图不足。 不变性是唯一的解决方案还是存在其他一些方

    1热度

    3回答

    我有这样的代码: abstract class Entity { // blah-blah-blah } abstract class BaseCollection { public void add(Entity entity); } 而且我从实体和BaseCollection类派生: class User extends Entity { } class U