数学建模社区-数学中国

标题: 一些面向对象得设计法则(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/ s9 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- |+ E2.例如:        3 G. j* L  ]# H- G

# X7 @3 l3 a/ x9 q& _, X0 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' F4 ~) 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