数学建模社区-数学中国

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

作者: post08070605    时间: 2009-9-10 22:40
标题: 一些面向对象得设计法则(4)
法则4:Liskov替换法则(LSP)    * f+ i) z; o& g- Y# F$ a

0 _) ~, z- t# ^, f2 C: L$ j- u  T- n% m+ y( W
使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。   2 x; v' I# ^: D4 G

( Z- g( G+ Q- R" V' q7 r9 K# k2 S# D  s  k  u
 [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects   Of Derived(Sub) Classes Without Knowing It ]                   ( K' v/ E6 q+ y6 B0 |% ?
) A4 o) g9 g" s/ ^6 U8 l( T1 j2 H! W
2 K/ D1 i5 Y* B# M3 ^) B, @
Liskov替换法则  
4 m' s% T5 P% f3 b  [7 l/ ?0 F
7 I* m: T& ]( V3 m0 y* b  o* _9 s9 Q( g0 z; T2 s
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。    
4 Z* G. u2 @* `* v0 J8 j3 \2 N, @6 `+ d* F2 [5 G
+ T: D, j* ^4 |! t! ?' @  {1 g/ K
2.例如:        
* T; k- P$ g* S9 g( M( z( N9 |: X: _2 d9 u, h

! j/ ^) b' H+ a; H* r) _( V方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)   
: W. m# a) x7 y
) C" f" K! w8 N( H; E/ k* f5 a& J4 m- a) G4 c
 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 * k8 ^" {3 Q! R; f

. a) ]- \4 A, j( P# Z) N
& y8 X" V, B& H9 G- h
4 u/ m4 D0 w" `7 u( {2 @& s3 ~4 J! T
7 B1 Y+ k1 _4 D2 }% G/ ^' [2 M
0 ?/ Q1 J' v3 s. _ 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。. G, X4 O; q% |% t, D! k- b( d" Z' m* [
7 R+ J0 j4 ^: r3 I$ J, C& W% f- O* @

; q# W6 ]3 \3 [9 X5 c, W这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
& Y, b% I$ ^' R0 |3 c* H# d, I9 q1 G: z) V

3 N* X! u' k, L2 p. V7 ]. K8 G>>更多一些面向对象得设计法则(4)
作者: pxwgih    时间: 2011-12-31 10:36
楼主很棒!
作者: fred_gavin    时间: 2012-4-10 22:52
谢谢分享!!!




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