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 DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to