数学建模社区-数学中国
标题:
一些面向对象得设计法则(4)
[打印本页]
作者:
post08070605
时间:
2009-9-10 22:40
标题:
一些面向对象得设计法则(4)
法则4:Liskov替换法则(LSP)
' m6 I) |. \3 K( f. c
8 F4 l; `' p1 g; ?. q
, h5 |1 g0 Y* f+ r6 ^0 z# M
使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。
R7 _$ h1 C! R' o3 @! Z Z( b. P
- s. {! P3 [; Y. F# z- V& u
9 E5 {- I3 Y! P4 x
[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ]
3 s0 J9 f9 |& G- ~
/ h1 J: A- ?+ ~* [. \% {
- } f$ J& J* o9 F9 t" y% r/ h
Liskov替换法则
3 X$ f& x. m! r
4 S( j6 b6 N& E/ s
9 y! J' D( D, d! t' F
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。
5 k5 j0 d: ^1 @& v" w
; v! ?' P& c7 S+ o$ h q
( F# `, z+ R" z; m: V- |+ E
2.例如:
3 G. j* L ]# H- G
# X7 @3 l3 a/ x9 q& _, X
0 X/ q' H5 u: B* u8 |# z* R( E
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)
4 K6 ~% F. Y# U+ o' n! K$ N
$ `8 B8 }6 ^; ?- T! i
, h2 i2 O( C3 I$ \0 Q
但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。
' Q0 Q% `, x b Y7 I
( R. C0 K5 P* e, L/ c5 Y5 ~
( `# @. l6 B i+ y
$ E' D ~! V a+ r( t
" ]- c: U2 _; U5 ~) T# p0 K+ o
4 g% `' p- u3 O" g3 A- h
3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
" ~. ~' F) R, H, c- K ?% a' F
4 ~) M, T1 \& P8 ?
- c3 ` M6 o( T; M6 O8 B
这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
" F* S" R: H7 v( R" T( ^
) A, M9 E2 Z5 t1 G6 \5 z: E
1 m1 t: N7 t. _, F$ I1 V7 i; N" K
>>更多一些面向对象得设计法则(4)
作者:
pxwgih
时间:
2011-12-31 10:36
楼主很棒!
作者:
fred_gavin
时间:
2012-4-10 22:52
谢谢分享!!!
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5