数学建模社区-数学中国

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

作者: post08070605    时间: 2009-9-10 22:40
标题: 一些面向对象得设计法则(4)
法则4:Liskov替换法则(LSP)    4 Q1 U0 x7 Y4 e
& V+ {2 M4 C/ l% p+ D

9 K3 n7 Z- Z/ J' j使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。   
! H( ]( H/ e( F/ u3 }% Q9 e
! |1 O$ y: K# I) I4 ?4 x" B  w
# W7 }* u0 j9 ? [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects   Of Derived(Sub) Classes Without Knowing It ]                   ' a0 E% M" w7 }8 d5 R
3 e$ f6 O: H( l, f

  F" i7 G- S' |! y5 \! ^Liskov替换法则  
: `+ |- S- _9 b# |
- b7 B6 U0 u) Y8 g7 v
% e; x1 N* f* t) C& w1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。    
+ ?4 h% W. B7 m9 _) W0 ^
9 u3 p4 K, Z/ j4 M8 F3 V$ c9 u0 V/ ^- r; @0 ~
2.例如:        8 d! Q0 b# z5 D" R% o" d8 q

. s. w* E7 Z( I) @) `8 q) y# d# M: j" V7 s2 H
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)   
! y2 M# j5 l& K# F0 }) x
% L3 K2 |4 {4 w. i2 M
4 ]+ ]6 V9 I1 d5 G7 b 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 
8 W0 \& S7 b( H( x- v4 S! E* W2 a- ], u
( \# V, \! U3 Y; t! x* ^2 u. P

1 O4 ~1 x+ Q9 Y. v6 y) R; I8 T3 f9 R& B# K
& U( ]$ z7 m% L/ f( t8 {7 w% g
 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。2 q; K2 |3 S- R9 R9 C) s# [
  p8 l3 u& L/ h5 o

9 T4 K* h: d8 f7 A1 ~4 ]这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
& J3 ]1 z% F9 X% v3 a8 l5 ]1 E6 |: j- T3 D

7 O9 c# J: i. E& K6 g0 ]0 s>>更多一些面向对象得设计法则(4)
作者: pxwgih    时间: 2011-12-31 10:36
楼主很棒!
作者: fred_gavin    时间: 2012-4-10 22:52
谢谢分享!!!




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