数学建模社区-数学中国

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

作者: post08070605    时间: 2009-9-10 22:40
标题: 一些面向对象得设计法则(4)
法则4:Liskov替换法则(LSP)    . o! ~( O# ~9 z4 W6 n. B

0 M$ W1 j8 N9 r$ w
7 W$ b. I2 h% l$ A6 I% I使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。   # X2 {/ w7 `: V( W' f* {% C

$ Z' o& b+ J6 t6 G* G8 c1 a6 e& K* [, j( {$ `# E
 [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects   Of Derived(Sub) Classes Without Knowing It ]                   ! X5 R) p' \5 ~% ~/ Y$ j( {1 Y
* E1 U! n& ?& H0 y5 N+ [! q& }

0 T& p( A. \6 ?( y( G4 RLiskov替换法则    r: m2 b9 ]* B. q7 p+ v  L  C
" r9 ]4 q7 w- l& A9 ^6 G& I7 U

7 a; T  H5 q% o8 |* n* J1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。    8 m3 L3 O' l, `. L

" P% M% l: H# b$ m7 b9 F4 ~" w- F& t9 u4 l& h* t, J; W
2.例如:        ; T9 ?. s4 z+ `( H: m

% k, k7 I- N1 _% V0 i3 Y+ W
8 {8 S, T+ Q( x( E( B1 q, l方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)   # [/ y2 P3 F% A. J1 o/ t
9 h0 Y, ]0 u7 }7 M& [. r! |
; H# b- S& l' {  t
 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 
- w- M! A. [+ o4 F0 `8 G* m' }9 ]/ A; C* e( a
3 j* _; W7 y1 O
) \! u+ R8 S7 ~4 j* \
" C& [0 a; A: K3 X4 ^2 X7 z" s& l: k

6 R, o; B; Z: S4 c, U. c4 [ 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。9 ]6 Q' h/ M  Y' G
2 H& u6 ?+ {0 X3 o2 z
. x/ ^" m% H" m0 h
这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
2 ]' ^' m! \/ t: @! t  g2 R0 M; O4 [& A& G7 t

9 c& y( K; K! q) i5 g) R2 z>>更多一些面向对象得设计法则(4)
作者: pxwgih    时间: 2011-12-31 10:36
楼主很棒!
作者: fred_gavin    时间: 2012-4-10 22:52
谢谢分享!!!




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