Talk:Software design pattern/Archive 4
| This is an archive of past discussions about Software design pattern. Do not edit the contents of this page. If you wish to start a new discussion or revive an old one, please do so on the current talk page. |
| Archive 1 | Archive 2 | Archive 3 | Archive 4 | Archive 5 |
Fundamental pattern category
I'm not sure about considering encapsulation, inheritance, and exceptions to be design patterns. Encapsulation and inheritance are general directions for structuring code more than they are patterns, re-usable elements of software. They are philosophies more than patterns or blueprints. Patterns (not limited to computer science) must be unanimously recognizable. For example, an architectural design's use of the golden ratio is non-disputable. I've never seen "fundamental patterns" used anywhere outside of that cited college lecture presentation and the book it cites, Barbara Liskov's "Program Development in Java". It strikes me that the author wished to coin a new term; perhaps someone who read it can provide another opinion. My [query] yielded few relevant results. Has the term 'fundamental pattern' gained community acceptance or popular usage? And if so, do—and why do—encapsulation and inheritance qualify? Any thoughts? Also, the page Fundamental pattern lists Proxy pattern, Facade pattern, and Composite pattern; all three of which are listed as structural patterns in this page; and it doesn't list inheritance or encapsulation. dmyersturnbull ⇒ talk 03:59, 4 June 2009 (UTC)
- If there are no objections, I'll place the neologism template:
- This article may document a neologism or protologism in such a manner as to promote it.
- for the reason cited above. Also, if its contradiction to Fundamental pattern is not resolved, I think adding contradict-other is warranted:
- This article appears to contradict the article [[:Fundamental pattern|Fundamental pattern]].
- dmyersturnbull ⇒ talk 06:58, 10 July 2009 (UTC)
I would remove everything referring to "fundamental patterns". They simply don't belong. "Design Patterns" (ISBN-10: 0201633612) is 15 years old and surely one of the seminal works. It's still in print. It catalogs ~15 patterns from factory to vistor. That's what the term normally encompasses and what wikipedia should document.
How to distinguish between a pattern and something like inheritance? There's no direct support for a pattern in any language. That's *why* they're patterns: because many programmers, facing diverse problems in a variety of languages, hit upon similar ways -- patterns -- of addressing them.
I disagree with the other cautionary note, though, that suggests criticism should be integrated into the document. The "other school of thought" should have its own section to allow main section to make its case.
- jklowden ⇒ talk Tue Jul 14 21:36:24 EDT 2009 —Preceding undated comment added 01:37, 15 July 2009 (UTC).
- There are source defining similar concepts. See chapter 2.3.1 of Meta-Compilation for C++ [1] which also provide further references. I believe dmyersturnbull has many excellent points worth pursuing. As more people study a concept deeper understanding is found. Just because an seminal work refers to something doesn't mean a field can not progress beyond it. Other wise the argument would be mute as we would all program in MIX. Bpringlemeir (talk) 01:41, 16 July 2010 (UTC)
- Err, I guess I don't agree with dmyersturnbull (and apparently I can not read). Anyways, the reference above is worth looking at if you are pursuing this. There is literature where people try to dissect the universal nature of a pattern. As with the multiple language example above, an excess of things named patterns can dilute as well. Bpringlemeir (talk) 01:48, 16 July 2010 (UTC)
- "Encapsulation and inheritance are general directions for structuring code..." In other words, patterns?! This looks like the very definition of a pattern! GeneCallahan (talk) — Preceding undated comment added 18:15, 23 December 2014 (UTC)
IVSR
In several design patterns the C# examples have been changed to include the text IVSR, e.g. Mediator pattern. What is IVSR? When searching online I don't get any useful results. Could it be that someone is trying to self promote? If so, it needs to be removed. Otherwise it might be useful to explain what IVSR is. — Preceding unsigned comment added by 46.44.173.1 (talk) 12:02, 24 February 2015 (UTC)
Definition
According to the definition given by the HillSide group, the definition given (at the top of the wiki page) of a design pattern is incorrect: http://hillside.net/patterns/50-patterns-library/patterns/222-design-pattern-definition
Note that the HillSide group stands as the governing body of patterns for the software world. Also note the Richard (Dick) Peter Gabriel (aka RPG) (director of the HillSide group, and also known for "worse is better") has analysed the work of Christopher Alexander (from whence patterns came) exhaustively, one example being RPG's book, "Patterns of Software": http://dreamsongs.com/Books.html
Additional external link
I have added an external link to GoF Design Patterns Open Online Learning (w3sdesign.com). Do you agree? Serv49 (talk) 18:21, 20 October 2016 (UTC)
FOG heavy
Patterns that imply mutable state may be unsuited for functional programming languages, some patterns can be rendered unnecessary in languages that have built-in support for solving the problem they are trying to solve, and object-oriented patterns are not necessarily suitable for non-object-oriented languages.
I find that, as a single sentence, a bit heavy for the lead. — MaxEnt 02:37, 4 November 2016 (UTC)
Why RAII included in Design Pattern?
After reading RAII, it doesn't look like an creational pattern. Can we remove/move it from creation pattern secion?
- I support the removal. RAII is more exactly programming idiom, not a design pattern.--Demonkoryu (talk) 09:53, 8 August 2011 (UTC)
- Support removal. An programming idiom is something less versatile than a software design pattern.--Sae1962 (talk) 08:58, 29 November 2016 (UTC)
Moved the Types section to Talk page.
The Types section has no relevant information and is redundant (having a broken link (4)).
The Classification section includes all relevant information.
See also the above "types of design patterns" vs "classification" section.
The original Types section:
Design patterns reside in the domain of modules and interconnections. At a higher level there are architectural patterns which are larger in scope, usually describing an overall pattern followed by an entire system.[1]
There are many types of design patterns, for instance [2][3]
- Algorithm strategy patterns
- Addressing concerns related to high-level strategies describing how to exploit application characteristics on a computing platform.[clarification needed]
- Computational design patterns
- Addressing concerns related to key computation identification.[4][5]
- Execution patterns
- Which address issues related to lower-level support of application execution, including strategies for executing streams of tasks and for the definition of building blocks to support task synchronization.
- Implementation strategy patterns
- Addressing concerns related to implementing source code to support
- program organization, and
- the common data structures specific to parallel programming.
- Structural design patterns
- Addressing concerns related to global structures of applications being developed.
Vanderjoe (talk) 16:02, 6 September 2017 (UTC)
References
- ^ Martin, Robert C. (2000). "Design Principles and Design Patterns" (PDF).
- ^ https://sourcemaking.com/design_patterns
- ^ "Design Patterns | Object Oriented Design". www.oodesign.com. Retrieved 2017-04-08.
{{cite web}}: Cite has empty unknown parameter:|dead-url=(help) - ^ "Category:Computational Thinking Patterns – Scalable Game Design wiki". sgd.cs.colorado.edu. Retrieved 2015-12-26.
- ^ "Introduction to Software Engineering/Architecture/Design Patterns – Wikibooks, open books for an open world". en.wikibooks.org. Retrieved 2015-12-26.
External links modified
Hello fellow Wikipedians,
I have just modified one external link on Software design pattern. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:
- Added archive https://web.archive.org/web/20080229011119/http://developer.yahoo.com/ypatterns/ to http://developer.yahoo.com/ypatterns/
When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.
This message was posted before February 2018. After February 2018, "External links modified" talk page sections are no longer generated or monitored by InternetArchiveBot. No special action is required regarding these talk page notices, other than regular verification using the archive tool instructions below. Editors have permission to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the RfC before doing mass systematic removals. This message is updated dynamically through the template {{source check}} (last update: 5 June 2024).
- If you have discovered URLs which were erroneously considered dead by the bot, you can report them with this tool.
- If you found an error with any archives or the URLs themselves, you can fix them with this tool.
Cheers.—InternetArchiveBot (Report bug) 07:33, 7 December 2017 (UTC)
Copypaste / plagiarism
I was just reviewing some design patterns from the book Head First: Design Patterns, and noticed that the descriptions on this page (in the pattern list section) are directly taken from there, word for word. Unfortunately I cannot tend to this now, but believe it should be fixed as soon as possible. —Ynhockey (Talk) 15:15, 26 August 2017 (UTC)
- This article was started in 2003 and was well developed by 2009 when the book was published. It is possible that the book copied Wikipedia. ~Kvng (talk) 00:04, 22 September 2018 (UTC)
- Actually, the book was first published in 2004. But I would suspect that the book is quoting directly from the original GoF book or other more authoritative sources anyway. I did a comparison between the 23 design pattern descriptions in the GoF book and the descriptions in the table in the article, and there are a lot of close matches. (I didn't look at any other sources yet.) I'm not sure how much leeway there is wrt close paraphrasing in this context though, since the GoF definitions are pretty short. Ahiijny (talk) 19:55, 13 October 2018 (UTC)
- My subjective impressions:
- 0 = exact match
- 0.1 = very close match
- 0.5 = somewhat different
- 1 = pretty different
- My subjective impressions:
Ahiijny (talk) 19:55, 13 October 2018 (UTC)Category Name GoF Diff Difference from GoF to Wikipedia article Creational Abstract Factory 0 Builder 0.5 changed "so that" to "allowing" and "can create different representations" to "to create various representations" Factory Method 0.1 inserted "single" Prototype 0 + 1 the first 1.5 clauses are an exact match, but everything after that is new Singleton 0 Structural Adapter 0.1 + 1 very close paraphrasing ("Adapter" → "An adapter", "couldn't" → "could not"), but last sentence is new Bridge 0.1 changed "so that" to "allowing" and "can vary" to "to vary" Composite 0 Decorator 0.1 inserted "keeping the same interface" Facade 0 Flyweight 0.1 changed "fine-grained" to "similar" Proxy 0 Behavioral Chain of responsibility 0 Command 0.5 changed "thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations" to "thereby allowing for the parameterization of clients with different requests, and the queuing or logging of requests. It also allows for the support of undoable operations." Interpreter 0 Iterator 0 Mediator 0.1 changed "lets you vary their interaction independently" to "allows their interaction to vary independently" Memento 0.1 changed "so that" to "allowing" and "can be" to "to be" Observer 0.5 changed "so that when one object changes state, all its dependents are notified and updated automatically" to "where a state change in one object results in all its dependents being notified and updated automatically" State 0 Strategy 0 Template method 0 Visitor 0.1 changed "lets you define a new operation" to "lets a new operation be defined"
Pattern List
Blackboard is not a design pattern but an communication strategy I suggest to remove this —Preceding unsigned comment added by 80.148.12.242 (talk) 09:28, 7 April 2011 (UTC)
Link to Entity component system — Preceding unsigned comment added by 80.78.218.36 (talk) 10:05, 16 March 2019 (UTC)
History
The History section ends with the following claim:"Although design patterns have been applied practically for a long time, formalization of the concept of design patterns languished for several years." The reference given does NOT (as far as I can see from Baroni, et al's .pdf) support the claim. Also, the claim is so vague as to be meaningless. Languished when? between 1700 and 1900? Between 1987 and 1991? Note that Kent Beck's home page (cited in Baroni) at http://c2.com/ppr/about/author/kent.html makes a couple of claims that could verify his contention that he spoke about the use of formal design patterns for building software. But it is certainly not peer reviewed and is imho a dubious claim to primacy (see below); is it sufficiently authoritative to be used as a fact? Seems too self-serving to me (no offense intended). The principle problem I have is that, obviously, patterns have been used in software at least since machine language was invented (since a language IS a group of patterns). (and of course hardware contains at its core a repeated pattern of circuits...) So, unless there is careful definition of the term which distinguishes it from language (and a number of other methods/procedures/venues/abstractions) I don't see how you can identify the start of it (surely some of the software development houses used formal design templates prior to 1987!) other than to claim that the GoF 1995 paper is the "recognized" start, in general. I recommend that sentence be deleted. It serves no real purpose, afaiks.216.96.76.54 (talk) 13:11, 20 July 2015 (UTC)
User:216.96.76.54 above is correct to postulate that design patterns are older than mentioned in history section of this page. Edsger Dijkstra writes about them in his 1972 paper 'The Humble Programmer'. Quote: "A by-product of these investigations maybe of much greater practical significance, and is, in fact, the basis of my fourth argument. The by-product was the identification of a number of patterns of abstraction that play a vital role in the whole process of composing programs." 85.76.82.209 (talk) 07:31, 9 August 2019 (UTC)
Title and scope
I feel this article suffers from a lack of definition.
The title suggests that design patterns are a general notion in software development. I have only ever seen them as an practice that is specific to object-oriented software, introduced by Gamma et al.'s book. Some design patterns, such as MVC, existed prior to the book, but I've never seen the idea applied to other types of software. If it has been done, and if the term design pattern is actually applied in such cases, they are certainly the exception.
We do have all kinds of established design patterns in software development that aren't tied to object orientation, such as client-server architecture, multi-tier architecture, dataflow architecture and pipelines, message passing, concurrent programming with shared memory and IPC primitives, software threads, software interrupts, etc. etc., but none of these are actually known by the name design pattern, as far as I know. The present article defines the term as if such things are included, and then goes on to discuss exclusively the specific concept introduced by Gamma et al. This is confusing and inconsistent.
Either the article should limit itself to discussing design patterns as known in object-oriented software development, and the title and introductory paragraph should be changed to reflect that; or it should at least start out by discussing them, before continuing to discuss how design patterns are applied in non-object-oriented software (which the present text doesn't even mention the existence of).
Do you agree? Which approach would you prefer? Rp (talk) 14:11, 11 November 2022 (UTC)
Why is Factory not listed?
It has its own page on wikipedia as being a creational pattern. —Preceding unsigned comment added by 208.127.236.194 (talk) 15:00, 14 August 2009 (UTC)
- A plain factory is usually considered different from a factory method no? Considering it's so important, it seem's reasonable to list all three, or just list factory and have the subtypes listed on its respective wiki page. 82.26.250.60 (talk) 22:26, 6 September 2023 (UTC)
- (Resolved, Factory method now listed)