Skip to main content

You are not logged in. Your edit will be placed in a queue until it is peer reviewed.

We welcome edits that make the post easier to understand and more valuable for readers. Because community members review edits, please try to make the post substantially better than how you found it, for example, by fixing grammar or adding additional resources and hyperlinks.

Required fields*

5
  • In your first example, you correctly say a virtual function means we cannot be assured the code would work. I am not saying you suggested composition, but many people do suggest it to fix this. Assume we have a delegate and ArrayPrinter.CanContinue() calls delegate.CanContinue(). I fail to see how composition would provide better assurances of method safety? I still may not be able to see the source code of the delegate function delagte.CanContinue()? Commented Feb 27, 2012 at 12:28
  • was that last word meant to say "cant"? :) Commented Feb 27, 2012 at 15:24
  • 1
    @user1107474 a delegate is not composition. So I'm unsure why you talk about it. The difference between composition and inheritance (in this case) is that when using inheritance the deriving classes can break the base class if the encapsulation is broken even if the base class is implemented correctly and the base class can't ensure the invariants of it self. Using composition it can because nothing but it self has access Commented Feb 27, 2012 at 15:25
  • would your argument also support delegation being preferred over inheritance? Commented Feb 27, 2012 at 17:37
  • @user1107474 delegation is less akin to inheritance than composition (most compilers actually uses a kind of composition to achieve inheritance). You could say that the strategy is a kind of delegation and when using composition you also use delegation but you can use delegation without composition and that's a completely different debate than this one Commented Feb 27, 2012 at 17:43