Re: Design Problem Aggregation

From: Michael Rauscher (michlmann_at_gmx.de)
Date: 05/10/04


Date: Mon, 10 May 2004 19:19:58 +0200

Hi,

Merlin schrieb:
> Hi
>
> Imagine the following classes (A class diagram will help)
>
> BASE, A, B, C, D, E, F, G.
>
>
> A, B, C, D, G inherit from BASE.
>
> E, F inherit from D.
>
> Class E has a member (aggregation by value) of type A.
> Class F has a member (aggregation by value) of type B.
>
>
> Class G has a member that is container that can accept objects of type
> D. As D is the base class of E and F we can add to the container
> objects of type E or F. I have made the container type safe in this
> way.
>
> I wanted G to be a collection of objects of type A or B but never C so
> I introduced an abstract class D and made the container of that type
> so it would only accept objects of base type D. However, although this
> looks ok, I am not happy with the extra work it has created.
> As I need to access the interface to A and B, I need to repeat all
> that interface in E and F. A and B have many member functions and I
> dont want to rewrite all that interface in E and F and delegate the
> calls to the aggregate.
>
> The solution where I provide a member function in classes E and F to
> return the aggregate seems wrong as its exposing a private data
> member.
>
> How can I change my design to make it better and flexible?

Why not simply inherit A and B from D?

Bye
Michael



Relevant Pages

  • Re: Design Problem Aggregation
    ... >Class E has a member of type A. ... As D is the base class of E and F we can add to the container ... >that interface in E and F. A and B have many member functions and I ... This is called the Interface Segregation Principle. ...
    (comp.object)
  • Re: Design Problem Aggregation
    ... Something else also has to inherit from A or else B is an identity set ... > Class H has a member of type C. ... As G is the base class of H and I we can add to the container ... > that interface in H and I. C and E have many member functions and I ...
    (comp.object)
  • Re: Design Problem Aggregation
    ... > A, B, C, D, G inherit from BASE. ... > Class E has a member of type A. ... > Class G has a member that is container that can accept objects of type ... > that interface in E and F. A and B have many member functions and I ...
    (comp.object)
  • Re: Design Problem Aggregation
    ... Classes A, D, F, G, J inherit from BASE. ... Class H has a member of type C. ... Class J has a member that is container that can accept objects of type ... As I need to access the interface to C and E, ...
    (comp.object)
  • Design Problem Aggregation
    ... A, B, C, D, G inherit from BASE. ... Class E has a member (aggregation by value) of type A. ... Class G has a member that is container that can accept objects of type ...
    (comp.object)