On Wed, 16 Mar 2011 08:01:46 -0400, spir <[email protected]> wrote:

composition vs inheritance

I have carefully read the document "Prefer composition to inheritance", from C++ coding standards, at http://www.artima.com/cppsource/codestandards3.html, by Herb Sutter and Andrei Alexandrescu.

In general, I do agree in that composition makes for a simpler scheme, and more flexible. But when writing D code, I constantly step on the same issue that without inheritance and (runtime type) polymorphism, I simply cannot express /very/ common things.
For instance, say I have 3 kinds of Xs X1 X2 X3. I would like to write:

void moveTogether (X[] xs, Vector vector) {
     foreach (x ; xs) {
         lookAround(x);
         x.move(vector);

         if (isX3(x)) {
             writeln(x.motto);
             x.jump();
         }
     }
}

void lookAround (X x) {...}


From the article: "Of course, these are not arguments against inheritance per se. Inheritance affords a great deal of power, including substitutability and/or the ability to override virtual functions."

i.e., use inheritance because your design requires it.

-Steve

Reply via email to