Talk:Separation of concerns

encapsulation
I think the use of the term "separation of concerns" to define one of the fundamental goal of (almost) all analysis and design paradigms (not just software) is both interesting and appropriate. I like the general nature of the term and suggest that terms like "encapsulation" are specific attributes of a particular approach to "separation of concerns" in the context of a software design methodology.

I do question, however, the implied equivalence of "encapsulation" and "transparency of operation". And, I suggest that the latter requires explanation. Exactly how does "transparency of operation" relate to "separation of concerns"?

Imaginit (talk) 15:27, 15 April 2010 (UTC)

sentence quibble?
The last part of this sentence, in the first paragraph of the 'implementation' section: "a design pattern like MVC can separate content from presentation and data-processing (model) from content" seems incomplete. I think the desired meaning is, basically, "MVC can separate content from both presentation and data-processing (ie, model)" but the phrasing is rather obscure, no?

I don't want to comment on the above, but I would like to point out that MVC is an architectural pattern not a design pattern Mastmead (talk) 16:33, 31 October 2012 (UTC)

David Parnas reference
The article says that "the term separation of concerns was coined by David Parnas in his paper 'On The Criteria To Be Used in Decomposing Systems into Modules'." However, I could not find the expression in the paper. --Picuinhas 5 July 2005 18:24 (UTC)

Source for early reference
The term "separation of concerns" is used in the 1974 paper from Edsger W. Dijkstra, On the role of scientific thought:

http://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD447.html

Eddie Burris

Disputed: Accuracy, Verifiability and Original Research
This whole article strikes me as original research. Is there a verifiable source for the content of this article? Dijkstra's use of the term to mean separating concerns like the concern for correctness, the concern for performance, the concern for safety, the concern for concurrency etc. bears little resemblance to the article here. Arbitrary features are not concerns--all relevant concerns affect all features. While one can use abstraction, functional decomposition and information hiding as implementation techniques to separate concerns within a language, considering separate concerns in isolation can use entirely different languages for each concern.

This use of separate languages for separate concerns is, in fact, quite common--even though, not always readily apparent. Thus one might deal with the concern for correctness with a high-level language. One might deal with the concern for performance in other languages comprising make-file syntax, command-line switches and pragmas, while the compiler itself addresses the concern for performance by transforming the original program through a series of other internal languages using symbolic manipulation.

Equating the separation of concerns with abstraction, functional decomposition or information hiding, as this article seems to, strikes me as a very limiting misconception.

Bob Badour 17:46, 25 June 2006 (UTC)


 * To further amplify my comments above, I offer this excerpt from another of Dijkstra's papers this time from 1979, My hopes of computing science:
 * My hope became more articulate, when programming emerged as an application area par excellence of the techniques that are well-known because we struggle with the small sizes of our heads as long as we exist. they are roughly of three different forms:


 * 1)      separation of concerns and effective use of abstraction


 * 2)      the design and use of notations, tailored to one's manipulative needs


 * 3)      avoiding case analyses, in particular combinatorially exploding ones.


 * The second point above suggests (to me at least) that separate concerns address different needs and one can tailor one's notations to address those needs separately. Doing so is vastly different from information hiding. Bob Badour 15:52, 26 June 2006 (UTC)


 * It appears Edsger W. Dijkstra coined this term and the concept forms a theme running through many of his papers, some of which I cite here:


 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD02xx/EWD288.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD303.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD316.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD340.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD361.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD389.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD447.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD450.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD454.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD05xx/EWD512.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD05xx/EWD514.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD05xx/EWD526.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD611.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD641.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD07xx/EWD709.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD07xx/EWD716.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD07xx/EWD791.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD09xx/EWD932c.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD09xx/EWD963.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1013.html
 * http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1024.html
 * http://www.cs.utexas.edu/~EWD/transcriptions/EWD12xx/EWD1298.html
 * http://www.cs.utexas.edu/users/EWD/obituary.html


 * The concerns Dijkstra mentions apply to entire systems (even systems of systems -- perhaps even universally) and would concern everyone affected by the system. Thus, when I approach the ATM with my bank card, I am concerned with correctness, performance, availability, concurrency, security, need, relevance, cost etc. I have no concern whatsoever for source code, implementations, design patterns, use cases, any sort of diagram or any grouping of same.


 * Concerns can have different importance and the importance can vary over time. Thus availability of the ATM is less of a concern when stopping at the ATM while passing by than it is when I have no money in my pocket needing something from a store about to close. Correctness, on the other hand, is always an important concern.


 * Sometimes one can break down a concern into other concerns. Thus, a concern for reliability might comprise concerns for correctness, availability and durability as one cannot rely on anything incorrect, unavailable or broken.


 * More than anything else, the Separation of Concerns is an intellectual discipline.


 * The term is in no way limited to object-orientation, to aspect-orientation or to any other buzzword.


 * This article redefines the term from its original meaning and offers no citations for verification. If one has a verifiable source for some redefinition, both the original meaning and the new meaning need mention to avoid POV.


 * Bob Badour 17:59, 26 June 2006 (UTC)

I found the article very informative. Mr. Badour's criticisms seem muddled.

If his complaint is that the information is original research (i.e., not based on peer-reviewed published research), then his numerous references to Mr. Dijkstra's unpublished, non-peer-reviewed, informal e-mails seem only to exacerbate the problem.

If his point is that neither object-orientation nor aspect-orientation have standing as an intellectual discipline, but are merely buzzwords, then perhaps he can back this idiosyncratic assertion with some citations. I find that any review of, e.g., aspect oriented research shows it has separation of concerns as a primary concern, and thus is entirely relevant to a discussion of Separation of Concerns as a topic in the Wikipedia.

-- June 29, 2006


 * The issues of Original Research and Point of View have very well-defined meanings within the context of Wikipedia. Reliable sources include peer reviewed journals and many other sources as well. The point is the current article has not one single citation to any external source--let alone to a reliable, verifiable source.


 * Whether any particular person finds an article informative is irrelevant to the issues of original research and point of view. I could write an article claiming the separation of concerns relates to separating the clinical treatment of anxiety from the clinical treatment of phobias, and someone might find the article informative -- perhaps even entertaining or even useful in their practice. Since I could provide no verifiable source for the assertion, however, any editor could rightly delete the whole thing.


 * The links I gave above are not to a personal website and are not emails. They are numbered manuscripts published and edited by the University of Texas at Austin Computer Science Department. While many of the manuscripts are informal, some of them have indeed been published under peer review: e.g. EWD450 and EWD709.


 * One could argue that it is wrong to use primary sources. However, there are exceptions to this rule. It would be wrong to cite the Edsger W. Dijkstra Papers, 1948-2002, Archives of American Mathematics, Center for American History, The University of Texas at Austin because it is an unedited archive of primary source documents. However, I cited the E. W. Dijkstra Archive website edited under the supervision of the University of Texas at Austin Computer Science Department. Wikipedia allows historic documents that appear in edited collections that have been published by a reliable publisher.


 * Further, Dijkstra was "a well-known professional researcher writing within his field of expertise." His work has "frequently been published by credible, third-party publications, and he wrote under his own name not a pseudonym." One of the sited sources, EWD340, is Dijkstra's ACM Turing Lecture from 1972. One might stop for a moment to consider what giving an ACM Turing Lecture means with respect to the concerns for reliability, professionalism and recognition.


 * Finally, I am reasonably certain the obituary qualifies as a secondary source.


 * Instead of making claims about what you find in alleged, unnamed reviews, wikipedia expects you to cite verifiable sources: "It is always appropriate to ask other editors to produce their sources. The burden of evidence lies with the editor who has made the edit in question, and any unsourced material may be removed by any editor. However, some editors may object if you remove material without giving people a chance to find a source, particularly when the material is not obviously wrong, absurd, or harmful."


 * I hope the issues now seem much less muddled to you and to any other readers. Please, anyone reading this, consider this your chance to find a verifiable source.


 * Bob Badour 21:20, 9 July 2006 (UTC)


 * The AOSD wiki, I think explains the term very well:
 * http://www.aosd.net/wiki/index.php?title=Glossary#Separation_of_Concerns


 * Yes, Dijkstra did coin the term, but the meaning has now evolved over time to mean both what Dijkstra says and what the article says.


 * So, to summarize. No, this page is not original research.  Yes, this page is missing sources and references.  I just added some.  There are more, I'm sure.  Feel free to add them.


 * Also, I am removing all the disputed categories. If anyone disagrees with me, you are welcome to put them back and explain why they belong there. --Andrew Eisenberg 06:18, 7 August 2006 (UTC)

Removal
I removed the 'Real Life Examples' Section. It talks about artificial concerns and such like that aren't referenced in the main article and is just plain confusing. I don't know the subject well enough to write a section but I really think a 'Real Life Examples' section could be very handy, if someone can think of a related analogy 212.56.97.238 16:44, 31 January 2007 (UTC)

Whoops. Forgot to login. That was me. NatashaUK 16:45, 31 January 2007 (UTC)

Lumping or Splitting
Every time there is a change in human affairs, it usually involves lumping or splitting. I learned this very early in life and saw the concept repeated as programming principles: "coupling and cohesion", "orthogonality", "DRY (don't repeat yourself)", "normalization", "etc.", and now "Separation of Concerns". Is there some fundamental principle that everyone is overlooking? Is SoC orthogonal in a meta-sense?
 * --jwalling 01:56, 5 February 2007 (UTC)

Copyright violation
I removed some text that's a direct copy from another Wiki (http://www.aosd.net/wiki/index.php?title=Glossary#Separation_of_Concerns). That wiki has CC-licensed text and "users own their edits" too. I was going to email the webmaster asking for permission to use the text, but thought it would be better to find similar language in a book or to paraphrase it. Unfortunately, it's already simple and straightforward and I can't come up with a good way to rephrase it without making it incorrect. I'll check through any books I have referring to SoC, but please help in replacing this text with a verifiable source. Thanks! mordel (talk) 14:05, 12 February 2008 (UTC)

Isn't this just a fancy “consultant” name for “modularization”
The title says it all. —Preceding unsigned comment added by 88.77.138.219 (talk) 00:54, 10 March 2009 (UTC)

No. Decomposing a program or system into modules is a technique concerned with the representation of source on one hand, and deployable parts on the other. That is, it is about packaging, or the syntax (using the term loosely) of how the system is represented. Separation of concerns is about really about the interdependencies that arise within the system from how the features for the system are conceived. That is, it is about formulation, or well-definedness and soundness. Modularization may be motivated by SOC, but it may also be pursued informally and for other reasons. Many of those interested in the subject are informed by mathematics; "consultant" could be a disparaging term in this context. Dijkstra himself seems to have preferred explicit formal reasoning in writing programs, over appeals to intuition. — Preceding unsigned comment added by 75.189.231.100 (talk) 16:06, 24 December 2011 (UTC)

The beginning of article
The beginning of article is confusing. It states, that "(SoC) is the process of breaking a computer program into distinct features that overlap in functionality as little as possible."

This is not true. SoC is a paradigm/methodolgy to break a _problem_ into distinct, funktionally non overlapping features, from where a computer program can be constructed by composition mechansm of the programming language. SoC itself is a programming paradigm and in case of AOP (fex. AspectJ, java AOP extension) a methodolgy.

Paradigm part is (indirectly) stated in Hürsch et al (1995) paper, http://eprints.kfupm.edu.sa/64610/. They also state, that SoC is a driving engineering principle at conceptual level. Dont really knowm if they mean classic engineering or software engineering. Propably the former.

In AOP and AspectJ, this has been established as a methodology.

This should be discussed and rewritten.

K4hv1 (talk) 11:29, 28 April 2009 (UTC)

Merger proposal
I proposed that Core concern and Concern (computer science) be merged into this article, primarily because I didn't understand the context until I read all three articles. If merged, I think it'll provide the reader with context, as opposed to the confused state of the current articles. --Robin (talk) 17:51, 25 August 2009 (UTC)
 * Core concern should definitely be merged with Concern (computer science). It's too short and gives no useful information beyond saying that a core concern is an important one. I've got to look over the IBM stuff linked at Concern (computer science) to see if it has some merit on its own beyond being a WP:DICTDEF needed to understand this article. Pcap ping  19:59, 25 August 2009 (UTC)
 * By the way, core concern is linked from Cross-cutting concern, where it's needed to explain the notion. It it's merged only with Concern (computer science), there's no biggie. If its merged here, it's more troublesome, as it's not needed here, so it there's not much reason to define it in the lead... Pcap ping  20:06, 25 August 2009 (UTC)


 * Oppose : Topics are worth of their own article. They can be referenced. --Camilo Sanchez (talk) 19:24, 18 November 2010 (UTC)


 * Support. Concern (computer science) contains a one-paragraph definition followed by an explanation of separation of concerns. It seems that separation of concerns is the context in which concern is notable. --Pnm (talk) 00:16, 5 December 2010 (UTC)
 * Oppose... Yeah, a bit terse in one case, but otherwise Okay. DOING THE WORK, then redirection of the short page OK by me. // Fra nkB 23:25, 15 May 2011 (UTC)
 * Posted this comment today, closing discussion: By Fabartus, 15 May 2011: Merge proposal failed of interest, vote count in reasonable amount of time; today documented the tagging event discussion, history by commenting out. // Fra nkB 23:25, 15 May 2011 (UTC)

Motivation
The first sentence of this article should have two things: MisterSheik (talk) 23:24, 8 August 2010 (UTC)
 * Description: A brief description of what separation of concerns is
 * Motivation: A brief description of why it is important.

Partial Classes as Counterexample?
The section on partial classes seems an odd thing to include as it is not necessarily a good example of separating concerns, and is often a counterexample (the motivating example might be considered as such). A well designed class is supposed to represent a separated concern; further dividing it into partial classes suggests that there are more classes at play, as per Single responsibility principle. Far from separating concerns, partial classes can mess up the presentation of related concerns.

PietMoor (talk) 12:22, 17 July 2012 (UTC)

Agreed. The example of using partial classes to cut some features that a client hasn't paid for is ridiculous and completely unrealistic as well. 109.130.29.156 (talk) 12:47, 17 May 2015 (UTC)

Origin
From [Thousandth of an inch], it'd seem that the term also has some usage in mechanics, although i couldn't find a ref thru a quick net-search. It'd be interesting to see wehther Dijkstra actually imported the concet from antoher field to CS. --J Etienne, 17/6/13 — Preceding unsigned comment added by 152.77.24.38 (talk) 07:31, 17 June 2013 (UTC)

Behavioral concerns
This article states that modularity "is achieved by encapsulating INFORMATION inside a section of code that has a well-defined interface". This is a limited perspective, because a program (and software) is something that EXECUTES; a program IS behavior, and HAS (or operates on) data. There may be modulatory of data, but modularity of a PROGRAM means entails well-interfaced modules of BEHAVIOR. A program is not a collection of "smart data", but consists of a SYSTEM of data/objects and the behaviors of the SYSTEM. Objects may properly contain methods that act on the object as an atomic unit, but it does not make sense to slice up SYSTEM behaviors along DATA boundaries.

There may be concerns of the data, and concerns of the behavior of the system, but the two are not the same, and data is not what a program IS. In fact, data and system behavior are themselves two separate concerns, and SOC thus encourages them to be expressed separately. The DCI paradigm focuses on this ability (see the "Data Context Interaction" wiki page).

The article also defines a concern as "a set of INFORMATION that affects the code". Though not incorrect, this does paint a more data-centric view of software, and thus a more general word may be more appropriate (e.g. aspect, issue, topic). — Preceding unsigned comment added by Shkaboinka (talk • contribs) 11:28, 14 November 2015 (UTC)

SoC
Is SoC really a well known and used acronym? I have never seen this used before 71.127.210.99 (talk) 02:09, 10 July 2022 (UTC)

Facebook 175.100.14.220 (talk) 14:43, 31 May 2023 (UTC)