数学建模社区-数学中国

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

作者: post08070605    时间: 2009-9-10 22:40
标题: 一些面向对象得设计法则(4)
法则4:Liskov替换法则(LSP)    
5 b# r! z" a5 ^+ m$ a: X
, L6 L- @; m5 ^! ^0 t7 b% V6 k- V0 L# A* \
使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。   
5 ~  N7 {& N6 n+ W! \. i. S! x9 U. k, r9 Z
7 Y- f0 k# Z2 j- _# a8 c
 [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects   Of Derived(Sub) Classes Without Knowing It ]                   2 o7 t& a% F. ~. R* s# a9 ]# q, _* U

/ _! S5 m6 ]9 }; v/ j
+ b% I4 w& u6 V8 o- fLiskov替换法则  . w7 @  N: N/ S! s2 F. G
, f# R+ S4 [* z/ u
% w  {- j5 d/ B( a3 ^) `! n. Y
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。    
) N+ P+ k# a$ c6 I, s. W" y! Z& j9 }# n: y0 D! D
! _6 X2 f1 f. o
2.例如:        
8 Z# t9 v$ o7 a% j9 \! f4 H5 S/ D. \6 z1 Z! U) \9 V

2 c' l  x, f  E( M5 h0 K) j方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)   
" A& D9 b) o4 ^8 h7 L# ~0 ~7 O4 v: y- j! G) d. M- R" r
, G2 H- L5 i: b5 J
 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 
5 |8 J: m6 N, R: p0 O4 h# ]: J8 i1 [' V, Z7 }- }4 Z
, n( \3 O, \* \: ~8 w, E
. ]/ Y1 g- \% [4 {9 i

1 v2 {, k* S3 q1 g. V. k
* m% {4 N! N* l2 ?! ^/ N) U5 D 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
) n. J& W8 l$ m" L* T4 v* ?: u+ `8 H
+ ~0 _, {, n" R% b- a% l" q
这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。% w7 l- f$ x6 ~( y# }

+ a' Z7 R& c# ~1 K) ~; U" j2 P3 G; [+ G2 x0 V. Z9 U2 S, t$ ^
>>更多一些面向对象得设计法则(4)
作者: pxwgih    时间: 2011-12-31 10:36
楼主很棒!
作者: fred_gavin    时间: 2012-4-10 22:52
谢谢分享!!!




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