<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: The Open/Closed/Open Principle</title>
	<atom:link href="http://www.threeriversinstitute.org/blog/?feed=rss2&#038;p=242" rel="self" type="application/rss+xml" />
	<link>http://www.threeriversinstitute.org/blog/?p=242</link>
	<description>Thoughts on programming</description>
	<lastBuildDate>Thu, 29 Jul 2010 21:19:43 -0400</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: The Open/Closed Principle: Concerns about Change in Software Design</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-2022</link>
		<dc:creator>The Open/Closed Principle: Concerns about Change in Software Design</dc:creator>
		<pubDate>Fri, 19 Mar 2010 20:46:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-2022</guid>
		<description>[...] Special thanks to Kent Beck for the enlightening inspiration! [...]</description>
		<content:encoded><![CDATA[<p>[...] Special thanks to Kent Beck for the enlightening inspiration! [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shane Courtrille</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-1368</link>
		<dc:creator>Shane Courtrille</dc:creator>
		<pubDate>Thu, 24 Sep 2009 15:57:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-1368</guid>
		<description>This to me kind of fits with Ayende&#039;s view of Concepts &amp; Features @ http://ayende.com/Blog/archive/2009/03/06/application-structure-concepts-amp-features.aspx.  

Revolutionary changes are concepts where as ordinary changes are features.</description>
		<content:encoded><![CDATA[<p>This to me kind of fits with Ayende&#8217;s view of Concepts &amp; Features @ <a href="http://ayende.com/Blog/archive/2009/03/06/application-structure-concepts-amp-features.aspx" rel="nofollow">http://ayende.com/Blog/archive/2009/03/06/application-structure-concepts-amp-features.aspx</a>.  </p>
<p>Revolutionary changes are concepts where as ordinary changes are features.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Toby&#8217;s Epril &#187; Blog Archive &#187; JUnit 4.7과 OCP</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-1096</link>
		<dc:creator>Toby&#8217;s Epril &#187; Blog Archive &#187; JUnit 4.7과 OCP</dc:creator>
		<pubDate>Wed, 05 Aug 2009 00:11:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-1096</guid>
		<description>[...]  [...]</description>
		<content:encoded><![CDATA[<p>[...]  [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James Abley</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-1054</link>
		<dc:creator>James Abley</dc:creator>
		<pubDate>Fri, 24 Jul 2009 14:25:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-1054</guid>
		<description>Kent, this seems like the best place to leave a comment about your search collaborative editing tools in Eclipse.

http://etherpad.com/

Web-based, but has some nice features. I guess having access to Google Wave will similarly give you a rich stream of ideas about how you might want this to work.</description>
		<content:encoded><![CDATA[<p>Kent, this seems like the best place to leave a comment about your search collaborative editing tools in Eclipse.</p>
<p><a href="http://etherpad.com/" rel="nofollow">http://etherpad.com/</a></p>
<p>Web-based, but has some nice features. I guess having access to Google Wave will similarly give you a rich stream of ideas about how you might want this to work.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Morten</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-901</link>
		<dc:creator>Morten</dc:creator>
		<pubDate>Sat, 11 Jul 2009 21:41:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-901</guid>
		<description>As Rick mentioned above, it sounds just like refactoring. Some features needs major refactoring to implement in exisiting code, others dont. The purpose of the open/closed principles is to minimize the amount of refactoring needed. But your code is just a model, not a concrete mapping of the users actual needs. (In fact the users words are just mappings of the needs)

The model will change, and break, just as the users needs will change. All we can hope to do is to manage change. Open-closed principle is just a principle, but sometimes you have to break principles to go forward. Sometimes you have to leave your comfort zone.</description>
		<content:encoded><![CDATA[<p>As Rick mentioned above, it sounds just like refactoring. Some features needs major refactoring to implement in exisiting code, others dont. The purpose of the open/closed principles is to minimize the amount of refactoring needed. But your code is just a model, not a concrete mapping of the users actual needs. (In fact the users words are just mappings of the needs)</p>
<p>The model will change, and break, just as the users needs will change. All we can hope to do is to manage change. Open-closed principle is just a principle, but sometimes you have to break principles to go forward. Sometimes you have to leave your comfort zone.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Large and Small Scale Refactoring &#171; Paul Dyson&#8217;s Blog</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-765</link>
		<dc:creator>Large and Small Scale Refactoring &#171; Paul Dyson&#8217;s Blog</dc:creator>
		<pubDate>Thu, 25 Jun 2009 16:53:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-765</guid>
		<description>[...] and Small Scale&#160;Refactoring  Reading Kent Beck&#8217;s post about Ordinary and Extraordinary Design reminded me of a long-running discussion on a long-running project about what refactoring is for [...]</description>
		<content:encoded><![CDATA[<p>[...] and Small Scale&nbsp;Refactoring  Reading Kent Beck&#8217;s post about Ordinary and Extraordinary Design reminded me of a long-running discussion on a long-running project about what refactoring is for [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Remy Chi Jian Suen</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-741</link>
		<dc:creator>Remy Chi Jian Suen</dc:creator>
		<pubDate>Mon, 22 Jun 2009 18:37:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-741</guid>
		<description>Kent, if you have inquiries about the Cola shared editor, please post them to the eclipse.technology.ecf newsgroup or the ecf-dev mailing list.

Technically speaking, a user should be able to cut/copy/paste text but the integrity of the document may be lost as I&#039;m not sure if the conflict resolution algorithm currently takes batch operations into account. However, if only one user is editing the document, he or she is free to perform batch deletion or insertion operations.

Currently, you can only edit one document at a time though we hope to address that with &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=238966&quot; rel=&quot;nofollow&quot;&gt;bug 238966&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>Kent, if you have inquiries about the Cola shared editor, please post them to the eclipse.technology.ecf newsgroup or the ecf-dev mailing list.</p>
<p>Technically speaking, a user should be able to cut/copy/paste text but the integrity of the document may be lost as I&#8217;m not sure if the conflict resolution algorithm currently takes batch operations into account. However, if only one user is editing the document, he or she is free to perform batch deletion or insertion operations.</p>
<p>Currently, you can only edit one document at a time though we hope to address that with <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238966" rel="nofollow">bug 238966</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rafael Peixoto de Azevedo</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-739</link>
		<dc:creator>Rafael Peixoto de Azevedo</dc:creator>
		<pubDate>Mon, 22 Jun 2009 17:16:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-739</guid>
		<description>High quality system designs are based on modular and expressive abstractions.

Modularity is a design quality a syntactical level.
A design&#039;s abstraction is a module if its internal implementation and external context are coupled only through the specification of its responsibilities.

Modular designs enable local implementation change and global reuse in new contexts.
Modularity enables locality and reusability and facilitates human minds to engineer highly complex and adaptable systems.

Expressiveness is a design quality at semantic level.
A design&#039;s abstraction is expressive if its specification represents a domain concept.

Expressive designs can easily articulate the system&#039;s abstractions to clearly express the relevant concepts, problems and solutions. Expressiveness facilitates understanding and communication that enable human minds to engineer relevant and valid solutions.

Identifying, representing and separating concerns
is the key guiding principle for our design process.
It bridges syntax and semantics to define abstractions and assign responsibilities
that compose and decompose modular and expressive designs.

When our world view or design objectives are radically changed,
new concerns emerge as relevant.
Due to their central role in our design process,
the new related concepts, problems and solutions 
can only be expressed after the new concerns are also represented
and separated in the design.

That is when the Open-Closed Principle usually breaks at some scope.
The &quot;revolution&quot; requires a major refactoring
before continuing &quot;evolutive&quot; design based on iterations and increments.</description>
		<content:encoded><![CDATA[<p>High quality system designs are based on modular and expressive abstractions.</p>
<p>Modularity is a design quality a syntactical level.<br />
A design&#8217;s abstraction is a module if its internal implementation and external context are coupled only through the specification of its responsibilities.</p>
<p>Modular designs enable local implementation change and global reuse in new contexts.<br />
Modularity enables locality and reusability and facilitates human minds to engineer highly complex and adaptable systems.</p>
<p>Expressiveness is a design quality at semantic level.<br />
A design&#8217;s abstraction is expressive if its specification represents a domain concept.</p>
<p>Expressive designs can easily articulate the system&#8217;s abstractions to clearly express the relevant concepts, problems and solutions. Expressiveness facilitates understanding and communication that enable human minds to engineer relevant and valid solutions.</p>
<p>Identifying, representing and separating concerns<br />
is the key guiding principle for our design process.<br />
It bridges syntax and semantics to define abstractions and assign responsibilities<br />
that compose and decompose modular and expressive designs.</p>
<p>When our world view or design objectives are radically changed,<br />
new concerns emerge as relevant.<br />
Due to their central role in our design process,<br />
the new related concepts, problems and solutions<br />
can only be expressed after the new concerns are also represented<br />
and separated in the design.</p>
<p>That is when the Open-Closed Principle usually breaks at some scope.<br />
The &#8220;revolution&#8221; requires a major refactoring<br />
before continuing &#8220;evolutive&#8221; design based on iterations and increments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rick DeNatale</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-734</link>
		<dc:creator>Rick DeNatale</dc:creator>
		<pubDate>Mon, 22 Jun 2009 15:36:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-734</guid>
		<description>I can&#039;t help but think that this is the normal refactoring process, maybe on a longer time-scale.

The paradigm which represents &quot;normal science&quot; or &quot;the current design/framework&quot; represents technical debt, which becomes more and more apparent as new facts, or requirements, which don&#039;t fit the paradigm are uncovered.

So the paradigm shift is a refactoring of the old paradigm to incorporate the new facts/requirements whether they be a new wire protocol or data from physics experiments where relativity comes into play.</description>
		<content:encoded><![CDATA[<p>I can&#8217;t help but think that this is the normal refactoring process, maybe on a longer time-scale.</p>
<p>The paradigm which represents &#8220;normal science&#8221; or &#8220;the current design/framework&#8221; represents technical debt, which becomes more and more apparent as new facts, or requirements, which don&#8217;t fit the paradigm are uncovered.</p>
<p>So the paradigm shift is a refactoring of the old paradigm to incorporate the new facts/requirements whether they be a new wire protocol or data from physics experiments where relativity comes into play.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Kavadias</title>
		<link>http://www.threeriversinstitute.org/blog/?p=242&#038;cpage=1#comment-733</link>
		<dc:creator>John Kavadias</dc:creator>
		<pubDate>Mon, 22 Jun 2009 15:20:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=242#comment-733</guid>
		<description>Nice post! Nice comment from Mr Williams too. Very succint.

Re: Kuhn, I think he also observed that maverick or unfashionable ideas (&quot;wild ideas&quot; proposed by &quot;crackpots&quot;) may also be around for quite some time and struggle along in parallel with the mainstream, which is pursued as the most successful theory/framework of the day.

When the mainstream stalls, old as well as new &quot;wild ideas&quot; are (re-)examined in the search for a way to progress.

So as well as new crackpot ideas, when engaging in revolutionary design, we also look for previously existing niche or &quot;less popular&quot; or simply different ideas and approaches.

Perhaps their merits and breadth of application are poorly appreciated/known by the mainstream.
[ Example: new (computer) science becoming more accessible with documentation and implementation (like ratpack parsers making more natural DSLs easier to build). ]

Perhaps the ideas are understood, but were considered too high an exploration-cost or investment before now (archipelagos of designs in your island metaphor).

And for a bit of cheek and humour:

Ordinary design is about accreting to the design, and simple Darwinian evolution (slow evolution through small variations of valued characteristics).

Revolutionary design is about r?evolving the design. To r?evolve is to dramatically evolve (punctuated evolution?) and potentially turn (around, or to a new perspective, or on its head) the design.</description>
		<content:encoded><![CDATA[<p>Nice post! Nice comment from Mr Williams too. Very succint.</p>
<p>Re: Kuhn, I think he also observed that maverick or unfashionable ideas (&#8220;wild ideas&#8221; proposed by &#8220;crackpots&#8221;) may also be around for quite some time and struggle along in parallel with the mainstream, which is pursued as the most successful theory/framework of the day.</p>
<p>When the mainstream stalls, old as well as new &#8220;wild ideas&#8221; are (re-)examined in the search for a way to progress.</p>
<p>So as well as new crackpot ideas, when engaging in revolutionary design, we also look for previously existing niche or &#8220;less popular&#8221; or simply different ideas and approaches.</p>
<p>Perhaps their merits and breadth of application are poorly appreciated/known by the mainstream.<br />
[ Example: new (computer) science becoming more accessible with documentation and implementation (like ratpack parsers making more natural DSLs easier to build). ]</p>
<p>Perhaps the ideas are understood, but were considered too high an exploration-cost or investment before now (archipelagos of designs in your island metaphor).</p>
<p>And for a bit of cheek and humour:</p>
<p>Ordinary design is about accreting to the design, and simple Darwinian evolution (slow evolution through small variations of valued characteristics).</p>
<p>Revolutionary design is about r?evolving the design. To r?evolve is to dramatically evolve (punctuated evolution?) and potentially turn (around, or to a new perspective, or on its head) the design.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
