Ooh, thank you Greg! Currying explained in C#, just days after I was trying to explain it to a colleague, and was still trying to understand it practically.
> -----Original Message----- > From: Discussion of advanced .NET topics. [mailto:ADVANCED- > [EMAIL PROTECTED] On Behalf Of Greg Young > Sent: 21 November 2007 08:32 PM > To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM > Subject: Re: [ADVANCED-DOTNET] Liskov substitution principle > > C is a best practice ... It is much more clear to name it double ... > but for all of this code I think the inheritance model is a terrible > fit ... I prefer http://diditwith.net/2007/08/15/TheArtOfCurrying.aspx > > Cheers, > > Greg > > > On Nov 21, 2007 9:35 AM, Abhijit Gadkari <[EMAIL PROTECTED]> > wrote: > > Correct me if I am wrong, this is what I understood > > > > > > > > A. If you override, do it because you want to extend the existing > > functionality but not to replace the existing functionality from the > base > > class > > > > > > > > B. override will break the substitution > > > > > > > > C. Avoid functional polymorphism for example, as suggested renaming > Add (int > > one) to times2 or double. Or so to say don't use same name / > signature > > override that will confuse the client > > > > > > > > D. Avoid magic number / hack in override method / function > > > > > > > > > > > > On Nov 21, 2007 4:57 AM, Mark Nicholls <[EMAIL PROTECTED]> > wrote: > > > > > On Tue, 20 Nov 2007 13:36:41 -0500, Abhijit Gadkari > > > <[EMAIL PROTECTED]> wrote: > > > > > > >I was doing some code review. I saw something interesting - Liskov > > > >implementation. [for more info, check out > > > >http://en.wikipedia.org/wiki/Liskov_substitution_principle] > > > > > > > >Here is the sample implementation of the same. > > > > > > > >namespace ToTest > > > >{ > > > > class Liskov > > > > { > > > > public Liskov() > > > > { > > > > //do nothing > > > > } > > > > > > > > public virtual int Add(int one,int two) > > > > { > > > > return one + two; > > > > } > > > > } > > > > > > > > class DerievedLiskov :Liskov > > > > { > > > > public DerievedLiskov() > > > > { > > > > //do nothing > > > > } > > > > > > > > /// <summary> > > > > /// <para>to add the number to itself.For Example - > Add(4,0) will > > > >result 8</para> > > > > /// </summary> > > > > /// <param name="one"></param> > > > > /// <param name="two"></param> > > > > /// <returns></returns> > > > > public override int Add(int one, int two) > > > > { > > > > if (two == 0) > > > > { > > > > return one + one; > > > > } > > > > else > > > > { > > > > return base.Add(one, two); > > > > } > > > > } > > > > > > > > public int Add(int one) > > > > { > > > > return one + one; > > > > } > > > > } > > > >} > > > > > > > >Now, I know there is no validation here. But the point is about > > > >substitution principle. Here we have Add method in the base class. > An > > > >override in derived class will substitute it. > > > > > > yes....but the problem is what does the client code expect to > happen when > > > it calls "Add(int one, int two)"....on a liskov object.... > > > > > > now if the client just expects no more than the signature i.e. you > pass 2 > > > ints and get one back...then the substitution is technically > 'correct'.... > > > > > > but I expect the client code would expect much more than this.... > > > > > > if it were me I would expect the result to be the sum of the two > > > parameters passed....clearly the override does not do this...so > > > substitution is actually broken, and the code is incorrect, the > compiler > > > doesn't warn you, because it doesn't know...but basically it is at > best > > > bad practice and at worse a bug. > > > > > > > > > > > > > >SO if we want to change the behavior of Add method such that it > will > > > >accept only one integer and will return the result as int added to > itself > > > >[i.e. 3+3=6],we have two options as coded in the DerievedLiskov. > Which > > > one > > > >is beter from oo design point? > > > > > > > > > > so from an OO perspective the override is bad/wrong...it breaks > (any > > > sensible interpretation of the) substitution. > > > > > > the additional method 'Add' is a much better solution...but I would > call > > > it 'double' or 'times2'. > > > > > > >Thanks. > > > > > > > >Abhi > > > > > > > >=================================== > > > >This list is hosted by DevelopMentor(R) http://www.develop.com > > > > > > > >View archives and manage your subscription(s) at > > > http://discuss.develop.com > > > > > > =================================== > > > This list is hosted by DevelopMentor(R) http://www.develop.com > > > > > > View archives and manage your subscription(s) at > > > http://discuss.develop.com > > > > > > > > > > > -- > > -- > > Abhijit Gadkari > > Enterprise Architect > > Santa Ana,CA-92705 > > blog:http://soaas.blogspot.com/ > > > > > > =================================== > > This list is hosted by DevelopMentor(R) http://www.develop.com > > > > View archives and manage your subscription(s) at > http://discuss.develop.com > > > > > > -- > Studying for the Turing test > > =================================== > This list is hosted by DevelopMentorR http://www.develop.com > > View archives and manage your subscription(s) at > http://discuss.develop.com =================================== This list is hosted by DevelopMentorĀ® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com