专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 敏捷开发

敏捷开发的LSP原则的困惑,该如何解决

发布时间:2011-06-20 17:28:24 文章来源:www.iduyao.cn 采编人员:星星草
敏捷开发的LSP原则的困惑
看了《敏捷软件开发:原则、模式与实践》的LSP原则那章,感觉很困惑,没有多少分可以给,希望能有高人解答。
困惑源于10.3.1的测试例子:
C/C++ code

void g(Rectangle& r){
    r.SetWidth(5);
    r.SetHeight(4);
assert(r.Area() == 20);
}


当一个正方形被传递进这个函数就会发生断言错误。

按照这个例子,我们很多应用了继承并改写了超类方法的类都是明显的违反了LSP原则。
比如以下的继承:
Java code

Class Father{
    String say(){
       return "I'am father.";
    }
}

Class Son extends Father{
    String say(){
        return "I'am son.";
    }
}


测试用例类似书上的用例:
Java code

void g(Father f){
    assert(f.say().equals("I'am father."));
}


这样,当把Son传入上面的测试用例就会发生相应的断言错误。

是我的理解有问题,还是说我们这确实是违反了LSP原则呢,请高人解答,谢谢

------解决方案--------------------
再回到楼主的代码,
以你的测试代码为标准:assert(f.say().equals("I'am father."));
说明你希望得到I'am father这个结果,
那么这个继承链条就算再长,你拿重重孙子来,它的say()方法也应该输出I'am father
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: