六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 46|回复: 0

里氏替换原则(LSP)和合成/聚合复用原则(CARP)

[复制链接]

升级  78%

45

主题

45

主题

45

主题

秀才

Rank: 2

积分
167
 楼主| 发表于 2013-1-27 05:14:47 | 显示全部楼层 |阅读模式
里氏替换原则(LSP)
LSP是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能不会受到影响时,基类才能真正被复用,而衍生类也才能在基类的基础上增加新的行为。
里氏替换原则讲的是基类和子类的关系。只有当这种关系存在时,里氏代换关系才存在,反之则不存在。如果两个基本类A和B之间的关系违反了里氏代换原则的设计,则有两种重构方案:
1.创建一个新的抽象类C,作为两个具体类的超类,将A和B的共同行为移动到C中。
2.从B到A的继承关系改写为委派关系。(CARP)
合成/聚合复用原则(CARP)
(CARP)就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的。
合成和聚合的区别:二者均是关联的特殊种类。聚合用来标示“拥有”关系或整体与部分的关系;而合成则用来标示一种强得多的“拥有”
关系。在一个合成关系里,部分和整体的生命周期是一样的。一个合成的新的对象完全拥有对其组成部分的支配权,包括它们的创建和湮灭等。进一步讲,一个合成的多重性不能超过1,换言之,一个合成关系中的成分对象是不能与另外一个合成关系共享的。一个成分对象在同一时间内只能属于一个合成关系,如果一个合成关系湮灭了,那么所有的成分对象要么湮灭自己所有的成分对象,要么就得将这一责任交给别人(较为罕见)。
只有当每一个S在任何情况下都是一种B的时候,才可以将S设计成B的子类。如果两个类的关系是"Has-A"关系而不是"Is-A"关系,这两个类一定违反里氏代换原则。
只有两个类满足里氏代换原则时,才有可能是"Is-A"关系。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表