数学建模社区-数学中国

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

作者: post08070605    时间: 2009-9-10 22:40
标题: 一些面向对象得设计法则(4)
法则4:Liskov替换法则(LSP)    & G) I: `7 O' v5 `  T. B3 X  Q
% M& N" c8 q! H3 S

4 e/ `$ H/ M: r7 Z0 t5 i1 r' Y使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。   
- h. {# w$ h' \1 F7 ?* P
$ V8 b8 @7 W* l( n5 n0 c7 W/ k4 s2 `! Z# Q4 l4 D* x
 [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects   Of Derived(Sub) Classes Without Knowing It ]                   
2 g% o3 o5 g  [! q) [3 j2 _$ t( D8 Y6 ~- x$ E

2 v# v( h5 K9 y( TLiskov替换法则  3 t9 \5 `8 E' |( t/ W6 Y2 a
7 y2 g  V$ x3 m
" H- \% S; X# b" k; N
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。    . t: b( v* D! \5 S* W. f
% \1 O# o5 K4 t& X& z' S
+ h9 f7 _/ F5 G  k. c6 R; a
2.例如:        ' z. K* l% l2 T( e- P  j- m9 t

- f) p6 i7 f: w5 S
0 L6 d- f/ C4 t: H1 A! A, l方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)   . j2 `# t/ V2 R6 m' S1 H0 |% V

7 b* {- I" a  @" C3 @7 F+ A9 @2 u6 L) I3 L) D# W9 y( n  L
 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 # j% n! e9 n' u% u) Z
4 D' O6 u- E$ w6 {

+ L$ D: A" L1 [) z* `
3 Q3 x8 O7 h$ q& a, l
7 e& P! G' o8 _/ d  D( w4 b& H( L, Z
 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
3 z6 O+ A- `/ s4 ^. i- L
1 n# R" b. Z3 C" w
. f: a; V/ u  s# c$ h3 g这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
( J% i* F& ?/ H6 Q* B1 x5 Z6 j  G' @: e! b; i9 T
& Y/ ?# C0 x* c# T" l: x
>>更多一些面向对象得设计法则(4)
作者: pxwgih    时间: 2011-12-31 10:36
楼主很棒!
作者: fred_gavin    时间: 2012-4-10 22:52
谢谢分享!!!




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