数学建模社区-数学中国
标题:
一些面向对象得设计法则(4)
[打印本页]
作者:
post08070605
时间:
2009-9-10 22:40
标题:
一些面向对象得设计法则(4)
法则4:Liskov替换法则(LSP)
) Z% N! H" u w0 ^
( ], s/ i2 W+ e% ~5 ~
0 g, M8 H$ H K T$ I: q
使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。
6 C- Z+ N6 u* V$ w) p2 T+ ?' h% h
. d+ |- ]9 B7 H; H) E
* Y) d% G, H7 o# x
[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ]
# v9 ]% |1 `" ^) g2 s$ z8 x9 N8 B
! V1 p) M/ f/ r* J
9 `) m1 _4 h1 f- w
Liskov替换法则
* C8 G1 m9 L/ R3 S/ z7 {
& \6 L& Z, |: P/ T& J. |7 V
/ N! ?, R2 _ r" _ b. w
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。
) f/ S4 e& a4 H" Y5 F" B( E
" i( a5 f, K) O2 v; ~" |5 `, p
! x6 c6 D' d/ v& `, @* x9 g o
2.例如:
" j! x8 D& _3 c" _ D
- c: q: k3 c! V# v; M
; c# d2 F8 t9 Z9 z
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)
* G0 g+ \% ]5 D. f5 A6 ^3 \4 Z
1 t; Z4 p3 Y, b, i9 m
1 Y, B! \7 v. z5 G5 ^2 F
但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。
- C9 U4 F9 k( z& ?' Q9 U9 w
9 {8 c$ K/ Y+ ^" Z2 J
8 G+ i$ \. o8 w; w! |! G
# g O8 V5 Q6 a+ P
) X* {" R g# \# ^
, W6 Q0 q( j9 M1 R9 \2 w+ q2 @
3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
! e" h- B6 x$ t, p) @
6 V- M! E$ A; B+ ]3 m5 o
& q- s7 b2 L F/ `2 }
这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
( P( \' E; N2 W6 ?- S
% l' f, P& [! n% P+ Y4 |# d; J' V
) U, ?6 t% ]2 L: v8 T$ S+ y
>>更多一些面向对象得设计法则(4)
作者:
pxwgih
时间:
2011-12-31 10:36
楼主很棒!
作者:
fred_gavin
时间:
2012-4-10 22:52
谢谢分享!!!
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5