数学建模社区-数学中国

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

作者: post08070605    时间: 2009-9-10 22:40
标题: 一些面向对象得设计法则(4)
法则4:Liskov替换法则(LSP)    ) ^, y$ a7 Z0 L
. q% z& S; E) f/ [& x) i5 {

% m0 H' ?5 ^4 f+ }. e' B% Z使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。   $ Z9 v- y; \" m: {4 K
6 N, f0 D$ z: h1 F, n8 @3 m5 U; o' d

2 M: _* ^$ L) x9 W9 z [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects   Of Derived(Sub) Classes Without Knowing It ]                   
. C# y7 G1 P- \9 K, o$ P, _) y: q; P9 @
' |# ]% i  @  T# z
Liskov替换法则  / j1 |8 \4 ?6 y( d6 H& D" I
+ }0 S2 Z: w& s# r4 A- U

; N# n+ P* T" Q0 @$ V6 D# C1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。    $ k, `' g9 X1 K& s! U& ]+ C
. \  A. C& w0 W7 P1 ~

8 |8 i0 {- A9 x2 m2.例如:        
! k; J$ {! N5 J! d9 L2 a7 l( S6 v2 }$ Z% X+ l6 [' G, R

% V6 _" [  p' o4 O方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)   
' Y3 X. t  w/ i6 X. e* L* Q' M* }" g  m" P
  [% O' ^) z  p3 o2 ], k
 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 
9 t- \/ [5 M" ^5 t; c3 M5 [
( P! M) w+ g. B$ B0 l4 V! x# l* e- P' Y1 N

* S: ]7 w2 {$ d( A' F8 {! W9 v( m" M
/ a; [% c! I9 {: m, T1 z
 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
. A5 N" F; \/ h" a" E
* e5 B% h# N6 y
( H: c  G, g  f2 o这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
0 B0 h) Q, Y- i9 _& u9 `6 L
. _; ?, x4 V7 j- ^# [' N5 Q# c* ]6 N# N0 J! T3 o
>>更多一些面向对象得设计法则(4)
作者: pxwgih    时间: 2011-12-31 10:36
楼主很棒!
作者: fred_gavin    时间: 2012-4-10 22:52
谢谢分享!!!




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