数学建模社区-数学中国

标题: 一些面向对象得设计法则(4) [打印本页]

作者: post08070605    时间: 2009-9-10 22:40
标题: 一些面向对象得设计法则(4)
法则4:Liskov替换法则(LSP)    " \/ W6 `8 e2 S

# q+ v# W6 ]% d
/ v0 w- O: O* i使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。   6 r5 {4 p) x# O
; a- Z2 W6 E- a& r
& s1 ^9 }% k# x" a( x# u
 [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects   Of Derived(Sub) Classes Without Knowing It ]                   0 r1 X4 ?+ J1 z

+ J2 y/ r! O; \3 G8 k# Z) C* V7 P2 W5 M  Y! o. B; ^" ]& x* T3 s3 G
Liskov替换法则  
1 L- j; o0 B; ]7 o! ~+ A6 m7 a! o6 L) c9 e2 C0 g3 U& J

; U" H7 S& H  N4 j1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。    
: ?1 g! T$ R2 y8 H, q: T* Q# n# H. a% b3 K
3 x; J* T' i% T. m& c) n  E4 Z
2.例如:        
5 a  p% \$ r3 S& U9 X5 ]+ U* m' t% ^! y0 c% @% }/ h' \

2 C0 R; t" l6 G方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)   
' s  u3 P; ~3 W# F$ j, d
* {+ ?) U. n. o! M. f+ F/ \2 ?4 Q; m5 p: v
! Z1 I8 V7 _' ^6 F6 \ 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 
0 x1 M5 {! Z- d6 E+ ?* j7 L
' y( Y6 F2 m1 I" z5 {$ N6 e% n5 M. i1 Q" A' ~' y

; Z# M5 K3 ]' h: R& f+ w: ~; ~% R% ]: }( H; c( x, x- ^
$ P* a) l$ G2 }
 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
. \7 r# Q  X/ d5 s( m* Y- g7 d8 Z! K. J# f5 ]5 n

, f" ?5 x. W. J+ [这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
% f$ v2 o- i: J* [: A* \" F( z6 k8 y4 d) ?% y5 R) K9 `9 \7 E
5 T, f; ]6 I% I4 X7 G4 F/ }
>>更多一些面向对象得设计法则(4)
作者: pxwgih    时间: 2011-12-31 10:36
楼主很棒!
作者: fred_gavin    时间: 2012-4-10 22:52
谢谢分享!!!




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5