<?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: Object Oriented Architecture As It Should Have Been &#8211; Agile Architecture</title>
	<atom:link href="http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/</link>
	<description>For developers - by developers</description>
	<lastBuildDate>Sun, 24 Apr 2011 11:26:05 +0200</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Tanketorsken&#8230; &#187; OOP er død!</title>
		<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/comment-page-1/#comment-6285</link>
		<dc:creator>Tanketorsken&#8230; &#187; OOP er død!</dc:creator>
		<pubDate>Fri, 08 May 2009 02:28:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.jaoo.dk/?p=154#comment-6285</guid>
		<description>[...] http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architectur... [...]</description>
		<content:encoded><![CDATA[<p>[...] <a href="http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architectur.." rel="nofollow">http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architectur..</a>. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Niclas Hedhman</title>
		<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/comment-page-1/#comment-3471</link>
		<dc:creator>Niclas Hedhman</dc:creator>
		<pubDate>Sat, 10 Jan 2009 05:02:03 +0000</pubDate>
		<guid isPermaLink="false">http://blog.jaoo.dk/?p=154#comment-3471</guid>
		<description>I think I can respond to the &quot;notion of dynamic role/instance association&quot; in Qi4j.

If you mean whether you can assign any behavior to any &#039;object instance&#039; in runtime, then the answer is; &quot;No, we have been there and it is a nightmare to troubleshoot such systems. We appreciate type-safety and predictable structure, which variable instance types doesn&#039;t allow.&quot;

However, we recently added (not yet implemented) &quot;Abilities&quot;, where we have recognized that the behavior/interaction is purely defined by the client context, and we have concluded that the object instance must have a particular &quot;Ability&quot; for it to be able to fulfill the context role. So, the Ability is declared as a PartOf the object instance (composite in our terminology), which allows the ability to have non-public access to the guts of the object instance.

So, if I have a composite type called Person, I can &quot;add&quot; an ability, such as Employable, to such Person at assembly time, which a new subsystem can interact with, without affecting Person&#039;s other contexts. And the Employee role will only interface with the Employable ability of the Person.

A final note, we have gotten a lot of flak for choosing to build on top of Java, and not create a new language instead. What people tend to forget is that it takes a few billion dollars of investment to get a language to the level of Java or dotNet, in terms of tools, acceptance, libraries, knowledge-base and developer training. Such practicalities are often forgotten in academic debates, and we have consciously taken a pragmatic approach of getting our ideas out there now and not in 10-15 years. However, we don&#039;t rule out the possibility of Composite Oriented Programming (COP, nothing to do with Coplien :-)) languages in the future, either from us (the Qi4j team) or from others.</description>
		<content:encoded><![CDATA[<p>I think I can respond to the &#8220;notion of dynamic role/instance association&#8221; in Qi4j.</p>
<p>If you mean whether you can assign any behavior to any &#8216;object instance&#8217; in runtime, then the answer is; &#8220;No, we have been there and it is a nightmare to troubleshoot such systems. We appreciate type-safety and predictable structure, which variable instance types doesn&#8217;t allow.&#8221;</p>
<p>However, we recently added (not yet implemented) &#8220;Abilities&#8221;, where we have recognized that the behavior/interaction is purely defined by the client context, and we have concluded that the object instance must have a particular &#8220;Ability&#8221; for it to be able to fulfill the context role. So, the Ability is declared as a PartOf the object instance (composite in our terminology), which allows the ability to have non-public access to the guts of the object instance.</p>
<p>So, if I have a composite type called Person, I can &#8220;add&#8221; an ability, such as Employable, to such Person at assembly time, which a new subsystem can interact with, without affecting Person&#8217;s other contexts. And the Employee role will only interface with the Employable ability of the Person.</p>
<p>A final note, we have gotten a lot of flak for choosing to build on top of Java, and not create a new language instead. What people tend to forget is that it takes a few billion dollars of investment to get a language to the level of Java or dotNet, in terms of tools, acceptance, libraries, knowledge-base and developer training. Such practicalities are often forgotten in academic debates, and we have consciously taken a pragmatic approach of getting our ideas out there now and not in 10-15 years. However, we don&#8217;t rule out the possibility of Composite Oriented Programming (COP, nothing to do with Coplien <img src='http://blog.jaoo.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ) languages in the future, either from us (the Qi4j team) or from others.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jim Coplien</title>
		<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/comment-page-1/#comment-1330</link>
		<dc:creator>Jim Coplien</dc:creator>
		<pubDate>Sun, 05 Oct 2008 14:11:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.jaoo.dk/?p=154#comment-1330</guid>
		<description>Hej, Rolf -- thanks for the nice writeup on the talk! Let me offer a couple of clarifications on all of the above.

First, regarding refactoring: I don&#039;t think I said that you should avoid it altogether. You should leave code cleaner (mere tydeligt) than you found it, but you should not expect refactoring to rescue you from weak architectural practice. Refactoring is about structural improvements that leave the functionality invariant, and it&#039;s difficult to reason about functional invariance when making coordinated changes across architectural units. But it&#039;s something I do, and that good coders should do, when making changes within architectural units.

More importantly, the core DCI concepts and the name itself come from Trygve Reenskaug, father of MVC. I&#039;ve supported Trygve and provided useful input and feedback on DCI over the years -- and particularly in recent months -- but history should remember him as the patient explorer who brought this idea to life. Sometimes it gets a little difficult to separate who contributed what, but as someone who has worked closely with Trygve on this I want to be clear that the original ideas are his.

The main ideas behind DCI are to support a highly dynamic association between roles and objects that changes with every Use Case scenario; that roles take on the identity (in terms of the binding to self or this) of their associated object when they execute; and that the algorithms derived from end-user Use Cases directly be readable in the source code.

Various languages and frameworks address various of these problems. For example, Scala&#039;s traits cleanly allow one to associate roles with objects and solves the injection problem. Python can very elegantly and directly express the semantics of class composition. C++ can also do the class-gluing in an elegant but static way; it is expressive and efficient, but leads to large configuration management costs in most environments.

Qi4J is an O.K. interim approach to achieve class composition in Java, but it&#039;s not clear whether it in itself supports (or even allows) the DCI notion of dynamic role/instance association. Michael, can you clarify this? 

However, none of these approaches lets me reason about the Use Case algorithm solely in terms of roles. No language solution in itself provides a solution to dynamically map roles to objects, though this easily can be encapsulated in Context objects in most languages. Qi4J&#039;s contribution seems to be limited to a set of annotations that allow a Java programmer to express the kind of semantics one gets with traits in Scala (much as Michael says above), but doesn&#039;t say anything about scenario expression or management.

So we still have work to do. Trygve&#039;s Squeak implementation achieves the full vision.

JaOO was a great event for DCI in that it provided a melting pot for Lars Vonk&#039;s Groovy implementation, Serge Beaumont&#039;s Python implementation, Bill Venners&#039; Scala implementation, some noble attempts in Java by Agata Przybyszewska, the Qi4J input from Michael and Rickard, and lots of other input from lots of other bright people.  It was gratifying that most people really get this -- enough that there were lots of little groups sitting off in their corners at the conference slinging DCI-like code. This is much more than just a programming technique; it bodes broadly for design and for the highest-level patterns of software architecture. It was gratifying that the folks at JaOO got that (well, maybe one or two people didn&#039;t...) Watch for an article series on artima.com where this new little community will give away its ideas for the greater good. We&#039;re having fun and hope more people join us!

(For those who want to learn more about DCI in detail, get the paper from Trygve&#039;s home page at http://folk.uio.no/trygver/2008/commonsense.pdf).

A Ruby implementation, anyone? :-)</description>
		<content:encoded><![CDATA[<p>Hej, Rolf &#8212; thanks for the nice writeup on the talk! Let me offer a couple of clarifications on all of the above.</p>
<p>First, regarding refactoring: I don&#8217;t think I said that you should avoid it altogether. You should leave code cleaner (mere tydeligt) than you found it, but you should not expect refactoring to rescue you from weak architectural practice. Refactoring is about structural improvements that leave the functionality invariant, and it&#8217;s difficult to reason about functional invariance when making coordinated changes across architectural units. But it&#8217;s something I do, and that good coders should do, when making changes within architectural units.</p>
<p>More importantly, the core DCI concepts and the name itself come from Trygve Reenskaug, father of MVC. I&#8217;ve supported Trygve and provided useful input and feedback on DCI over the years &#8212; and particularly in recent months &#8212; but history should remember him as the patient explorer who brought this idea to life. Sometimes it gets a little difficult to separate who contributed what, but as someone who has worked closely with Trygve on this I want to be clear that the original ideas are his.</p>
<p>The main ideas behind DCI are to support a highly dynamic association between roles and objects that changes with every Use Case scenario; that roles take on the identity (in terms of the binding to self or this) of their associated object when they execute; and that the algorithms derived from end-user Use Cases directly be readable in the source code.</p>
<p>Various languages and frameworks address various of these problems. For example, Scala&#8217;s traits cleanly allow one to associate roles with objects and solves the injection problem. Python can very elegantly and directly express the semantics of class composition. C++ can also do the class-gluing in an elegant but static way; it is expressive and efficient, but leads to large configuration management costs in most environments.</p>
<p>Qi4J is an O.K. interim approach to achieve class composition in Java, but it&#8217;s not clear whether it in itself supports (or even allows) the DCI notion of dynamic role/instance association. Michael, can you clarify this? </p>
<p>However, none of these approaches lets me reason about the Use Case algorithm solely in terms of roles. No language solution in itself provides a solution to dynamically map roles to objects, though this easily can be encapsulated in Context objects in most languages. Qi4J&#8217;s contribution seems to be limited to a set of annotations that allow a Java programmer to express the kind of semantics one gets with traits in Scala (much as Michael says above), but doesn&#8217;t say anything about scenario expression or management.</p>
<p>So we still have work to do. Trygve&#8217;s Squeak implementation achieves the full vision.</p>
<p>JaOO was a great event for DCI in that it provided a melting pot for Lars Vonk&#8217;s Groovy implementation, Serge Beaumont&#8217;s Python implementation, Bill Venners&#8217; Scala implementation, some noble attempts in Java by Agata Przybyszewska, the Qi4J input from Michael and Rickard, and lots of other input from lots of other bright people.  It was gratifying that most people really get this &#8212; enough that there were lots of little groups sitting off in their corners at the conference slinging DCI-like code. This is much more than just a programming technique; it bodes broadly for design and for the highest-level patterns of software architecture. It was gratifying that the folks at JaOO got that (well, maybe one or two people didn&#8217;t&#8230;) Watch for an article series on artima.com where this new little community will give away its ideas for the greater good. We&#8217;re having fun and hope more people join us!</p>
<p>(For those who want to learn more about DCI in detail, get the paper from Trygve&#8217;s home page at <a href="http://folk.uio.no/trygver/2008/commonsense.pdf)" rel="nofollow">http://folk.uio.no/trygver/2008/commonsense.pdf)</a>.</p>
<p>A Ruby implementation, anyone? <img src='http://blog.jaoo.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Hunger</title>
		<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/comment-page-1/#comment-1236</link>
		<dc:creator>Michael Hunger</dc:creator>
		<pubDate>Wed, 01 Oct 2008 19:47:43 +0000</pubDate>
		<guid isPermaLink="false">http://blog.jaoo.dk/?p=154#comment-1236</guid>
		<description>There is already QI4J - an existing Java Framework for this type of programming (composite programming). It was developed by Rickard Öberg. 
It is a transitional step to a future language that supports the concepts of composite programming directly (as for instance scala does already in many ways).

Just check it out, there is already a lot of documentation material and release 0.4 is out since two weeks ago.
&lt;a href=&quot;http://qi4j.org&quot; rel=&quot;nofollow&quot;&gt;qi4j.org&lt;/a&gt;

Michael</description>
		<content:encoded><![CDATA[<p>There is already QI4J &#8211; an existing Java Framework for this type of programming (composite programming). It was developed by Rickard Öberg.<br />
It is a transitional step to a future language that supports the concepts of composite programming directly (as for instance scala does already in many ways).</p>
<p>Just check it out, there is already a lot of documentation material and release 0.4 is out since two weeks ago.<br />
<a href="http://qi4j.org" rel="nofollow">qi4j.org</a></p>
<p>Michael</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ulrik Skyt</title>
		<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/comment-page-1/#comment-1230</link>
		<dc:creator>Ulrik Skyt</dc:creator>
		<pubDate>Wed, 01 Oct 2008 17:13:24 +0000</pubDate>
		<guid isPermaLink="false">http://blog.jaoo.dk/?p=154#comment-1230</guid>
		<description>More precisely, the sex comment was like this: 

Agile is like teenage sex - everyone talks about it, very few are actually doing it, and those who do usually don&#039;t do it very well.</description>
		<content:encoded><![CDATA[<p>More precisely, the sex comment was like this: </p>
<p>Agile is like teenage sex &#8211; everyone talks about it, very few are actually doing it, and those who do usually don&#8217;t do it very well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Gjøl</title>
		<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/comment-page-1/#comment-1205</link>
		<dc:creator>Mark Gjøl</dc:creator>
		<pubDate>Tue, 30 Sep 2008 21:22:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.jaoo.dk/?p=154#comment-1205</guid>
		<description>Can anyone sum up what happened at the BoF session afterwards? Sadly I missed it. :(</description>
		<content:encoded><![CDATA[<p>Can anyone sum up what happened at the BoF session afterwards? Sadly I missed it. <img src='http://blog.jaoo.dk/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Agata Przybyszewska</title>
		<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/comment-page-1/#comment-1198</link>
		<dc:creator>Agata Przybyszewska</dc:creator>
		<pubDate>Tue, 30 Sep 2008 20:15:57 +0000</pubDate>
		<guid isPermaLink="false">http://blog.jaoo.dk/?p=154#comment-1198</guid>
		<description>And I strongly disagreed with Jim about java being a toy language - of course you can do it - the construction is perhaps not as elegant ...  Anyway, I am looking forward to reading Jims book!</description>
		<content:encoded><![CDATA[<p>And I strongly disagreed with Jim about java being a toy language &#8211; of course you can do it &#8211; the construction is perhaps not as elegant &#8230;  Anyway, I am looking forward to reading Jims book!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Linda</title>
		<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/comment-page-1/#comment-1196</link>
		<dc:creator>Linda</dc:creator>
		<pubDate>Tue, 30 Sep 2008 18:47:46 +0000</pubDate>
		<guid isPermaLink="false">http://blog.jaoo.dk/?p=154#comment-1196</guid>
		<description>Haha, I wouldn&#039;t have guessed it to be otherwise. After all there is teenage sex and then there is pedophily (if I spell that correctly). Two different things that have different names.</description>
		<content:encoded><![CDATA[<p>Haha, I wouldn&#8217;t have guessed it to be otherwise. After all there is teenage sex and then there is pedophily (if I spell that correctly). Two different things that have different names.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul</title>
		<link>http://blog.jaoo.dk/2008/09/30/object-oriented-architecture-as-it-should-have-been-agile-architecture/comment-page-1/#comment-1194</link>
		<dc:creator>Paul</dc:creator>
		<pubDate>Tue, 30 Sep 2008 17:59:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.jaoo.dk/?p=154#comment-1194</guid>
		<description>&quot;which then makes Jim go on and compare agile with teenage sex - everybody says they’re doing it&quot;

I should just clarify he meant sex BETWEEN teenagers, not set WITH teenagers. Probably worth clarifying that! :)</description>
		<content:encoded><![CDATA[<p>&#8220;which then makes Jim go on and compare agile with teenage sex &#8211; everybody says they’re doing it&#8221;</p>
<p>I should just clarify he meant sex BETWEEN teenagers, not set WITH teenagers. Probably worth clarifying that! <img src='http://blog.jaoo.dk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>

