[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: OO should break when broken(was re: the benefits of immutability)



Quoting Colin Putney <cputney@wiresong.ca>:
> [...] Circle should be the superclass. A subclass should extend its
> superclass, not constrain it. An ellipse is a circle with additional
> capabilities - it can have different radii along each of its dimensions.
> [...]

Let's work on another example.

1. Derive the subtype relations between the types Real, Number, Complex,
   and Integer?

2. Implement the number type hierarchy in your OO language of choice.

3. Based on the insights from the above exercises, should Ellipse be
   inherited from Circle (implying that Ellipse is a subtype of Circle)?

Regards,
  Vesa Karvonen

...

Only read the following hints below after you have given some thought to
the above problems.

See, for example, James O. Coplien's book Multi-Paradigm Design for C++
for further discussion.

Hints:

1.a. For each of the fuctions

       greatest_common_divisor(x,y),
       maximum(x,y), and
       complex_square_root(x),

     consider whether the function is well defined if all of the arguments
     it is given are either Real, Complex or Integer.

1.b. Find the subset relations between the sets Real, Number, Complex and
     Integer.

2. Use the Bridge pattern to separate the behavioral interface hierarchy
   from the implementation hierarchy.

3. Assume you have inherited Ellipse from Circle. Can I write a function
   on Circles that will not work correctly if it is passed an Ellipse?
   Why would it be bad?