Talk:Composite pattern/Archive 1

Why do you have to use such an inherently (reading wise) obfuscated language as PERL for your OOP design pattern example? Why not use something that most sane people use for OOP - something such as JAVA, or Python, or Ruby, or... (ad naseum) Don't get me wrong - PERL is a GREAT (!!) language - it just has the problem where it trips over it's own feet by allowing it's code to be so inherently obfuscated (think the PERL Obfuscation contest - or PERL Poetry)...

I added a Java example. Should this talk page now be cleared? Lathspell 21:25, 16 February 2006 (UTC)

This page needs cleanup. It does not feel very encyclopedic.

added an implementation of the simpler Java-example for ease of reading as opposed to the one given. The old one should probably be removed...

The large code listings of examples are worthless;
 * They're the same thing repeated, if you dont understand it in one language you're not going to understand it in the others. Dont even think about adding more examples. Pseudo code or Java should be sufficient.
 * They dont really show how the pattern maps directly onto code. There should be some explaination or diagrams.

"The composite pattern is an object oriented pendant to algebraic data types." - This is pretentious. Very few people would understand what this means. (I'm not one of them) Eyewax 10:57, 10 April 2007 (UTC)

The structure section is from "Software Patterns by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides", page 165, 19th print. Almost word to word. Picture is a bit different but also almost the same. Jous 10:28, 31 January 2007 (UTC)

Bad design
The design of the component class is bad, at least in the diagram and Java, C++, and Prolog examples. I have hard time reading Perl, so I don't comment on it :) Why does the component interface have methods for adding and removing children? Fetching children might by fine, it can simply return an empty list, but the other too really belong to the composite interface. Doing it the way in the article simply complicates the interfaces (the possibility that add and remove don't do anything) and does not make good use of the type system. I read an argument elsewhere for putting these in component: for "transparency". I don't see what kind of transparency this gives. —The preceding unsigned comment was added by 85.2.29.253 (talk) 08:40, 26 February 2007 (UTC).

I agree. The UML diagram presented here is just _wrong_, from the OO point of view. Component cannot have the getChild, addComponent and removeComponent method, because then Leaf could not inherit Component. mefyl 16:42, 13 April 2007 (UTC) I fixed the UML diagram and the C# code, and flagged the java code as wrong. mefyl 18:12, 13 April 2007 (UTC)

Comment
Observation: long source code listings in half-a-dozen programming languages do not make for a great encyclopedia article. &mdash; Matt Crypto 19:06, 9 June 2007 (UTC)
 * I agree. I suggest cutting it down to the C# example (clear syntax, plus it actually seems to be demonstrating the pattern). The others can be transwikied if desired. --Sneftel 06:37, 14 June 2007 (UTC)

Composite and Decorator
There is similitude between the composite and decorator pattern. The Decorator is more like an extention to the composite pattern.

201.250.191.189 21:13, 30 July 2007 (UTC) Vitucho.

Wrong UML Diagram
In the UML Diagram, the role "+children" is misplaced. The children is not the whole, it is the part. So, the "+children" should be put in the other end of the relationship, together with the interface "Component". 200.103.122.90 15:05, 1 September 2007 (UTC)
 * Please check it. Image:Composite UML class diagram.svg --Trashtoy 03:52, 19 September 2007 (UTC)
 * I replaced the diagram since a week passed. Please confirm that the tooltip (the "ALT" attribute of the IMG element) accurately represents the meaning of the diagram. --Trashtoy 03:00, 26 September 2007 (UTC)

Add C++ Example
I will add a C++ example to the composite design pattern.Because I found there's only one Java based example for the Composite design pattern, while many other design patterns here in WIKI have more than one examples ,please check Visitor,Iterator, Bridge Pattern for example within Wikipedia. —Preceding unsigned comment added by Albert cheng (talk • contribs) 18:02, 24 September 2007 (UTC)
 * This page actually used to have four different language examples, all showing the same thing. Given that the pattern is language-independent, there's little need for multiple language examples. They don't demonstrate anything about the pattern that isn't adequately demonstrated by a single example. It's also problematic because such source code may technically be original research. If you like, I encourage you to post in an area which doesn't have this restriction, such as Wikibooks or Wikiversity, and then link this page to it. --Sneftel 19:31, 24 September 2007 (UTC)
 * I have add an c++ example, i hope it will give the right picture. It would be good to give more c++ example for other pattern, if someone has the knowledge. Im still learning.

(carl) 2008-01-01 (UTC)

Yes, you are right ,Pattern itself is independent from any language, but I think one major purpose of examples here for design pattern series is to let the reader gets better understanding of how pattern works rather than pure theory,especially for those who's new to design pattern.Yes,the example implemented in Java is definitely easy for us to understand who have already know the pattern, but if you think about those who are just newbie of design pattern, this maybe his or her first reference to design pattern, and he or she happens doesn't understand Java well ,thats why we need more than one example. Besides I don't see theres any restriction in Design pattern (computer science) series. For example, there are examples written in Java,C#,Ruby,Visual Prolog and C++ for Bridge design pattern which is the in the same category as Composite design pattern we are discussing here and its works fine for a long time in Bridge pattern. So I think multiple examples here is viable.

Regard! Albert —Preceding unsigned comment added by Albert cheng (talk • contribs) 09:47, 25 September 2007 (UTC)
 * I can understand adding examples for things like Prolog or even Ruby, since those languages have very different syntax from Java/C++. However, within the C/C++ syntax "family", such as C++, Java, C#, and D, it's unlikely that someone who knows one of them would fail to understand code written in another one. As far as beginners to programming go, that's why I suggested moving it to Wikiversity, where it could form part of a larger, more useful tutorial for beginners to design patterns. Here, it seems like the primary effect would be to make the article longer and more difficult to maintain, particularly if the different language examples did not have exactly the same functionality.
 * Nevertheless, I've said my piece. There are definite potential merits to multiple examples, as long as they're properly formed. If you still feel that it would make the article a higher-quality article, I shan't stand in your way. --Sneftel 15:43, 25 September 2007 (UTC)
 * P.S. If you do add the example back, I'd suggest removing the use of shared_ptr. Yes, I love shared_ptr too, but if you're going for "general C++ knowledge" a lot of people who know C++ (or think they do) wouldn't be familiar with Boost. —Preceding unsigned comment added by Sneftel (talk • contribs) 15:53, 25 September 2007 (UTC)

Unfortunately, the example added to the page is not well-formed C++. The main function should be declared as "int main" (or the argument form). In addition, the address-of operator (&) is applied to temporary objects. Even if it was possible to do this, the object would be destructed at the end of the full-expression where it was created, so traversing a composite with such objects would be undefined behavior. These are the most serious errors. Ufretin (talk) 08:57, 10 March 2008 (UTC)
 * This code doesn't even run without seg faulting and the indentation is horrible--Michael miceli (talk) 02:11, 30 March 2008 (UTC)