数学建模社区-数学中国

标题: 一些面向对象得设计法则(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- wLiskov替换法则  * 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  o2.例如:        
" 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 Z1 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 J8 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