<?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 Big Picture</title>
	<atom:link href="http://www.composibility.com/2006/09/19/the-big-picture/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.composibility.com/2006/09/19/the-big-picture/</link>
	<description>IT Solutions should assemble like Lego's.</description>
	<lastBuildDate>Sun, 28 Jan 2007 00:03:33 -0800</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<item>
		<title>By: Erik Scheirer</title>
		<link>http://www.composibility.com/2006/09/19/the-big-picture/comment-page-1/#comment-13</link>
		<dc:creator>Erik Scheirer</dc:creator>
		<pubDate>Tue, 19 Sep 2006 17:03:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.composibility.com/2006/09/19/the-big-picture/#comment-13</guid>
		<description>I would like to agree with my colleague; I have witnessed too many &quot;architects&quot; who feel it is their role to not know anything about the micro-level artifacts. While this is true to some extent, in that the architecture model itself should not be hamstrung too much be the target implementation technology, there are nonetheless other limits that necessarily must be taken into account at the architecture level.

By way of an example of how implementation technology and  language features can impact software architecture, I recently had several days worth of meethings with a room full of designers. The scenario is this: there is a Class A, and B inherits from A (the first subsystem knows only about A&#039;s, and the second knows about A&#039;s and B&#039;s). Some part of the subsystem makes an A object and hands it off to another subsystem. This other thread of execution needs to add some behaviour to the base class type (which is why we need a B type), but we cannot require the folks who make an A to make a B instead, as this would introduce an undesirable dependency between the two subsystems. We also don&#039;t have the cycles to devote to any deep copy either, as we have to keep things lean and mean.

Besides the fundamentally disturbing fact that everyone in the room maintained, for more than two days, that one could have the best of both worlds and simply make an A, hand it off, and make a B out of it *by simple typecasting* (as in B b = (B) a), the implications on the architecture itself was completely missed.

This was solved simply by changing the semantic that a B &#039;isa&#039; A to B &#039;hasa&#039; A, and in fact, being a little more strict, making it a true composition. The point is, the target language was Java, and the two requirements for the design were that the first subsystem had to be as loosely bound to the second subsystem, and that we didn&#039;t have the spare clock cycles for deep copies, etc. While other OO languages do provide mechanisms to handle this better (ObjectiveC, Smalltalk, etc.), in this case, since the implementation language was also a requirement, and not optional, its language features therefore directly impacted what we could or could not do in terms of architecture (in this case compostion instead of inheritance).

So I discovered that I have a bunch of IT managers around me ... ;-]</description>
		<content:encoded><![CDATA[<p>I would like to agree with my colleague; I have witnessed too many &#8220;architects&#8221; who feel it is their role to not know anything about the micro-level artifacts. While this is true to some extent, in that the architecture model itself should not be hamstrung too much be the target implementation technology, there are nonetheless other limits that necessarily must be taken into account at the architecture level.</p>
<p>By way of an example of how implementation technology and  language features can impact software architecture, I recently had several days worth of meethings with a room full of designers. The scenario is this: there is a Class A, and B inherits from A (the first subsystem knows only about A&#8217;s, and the second knows about A&#8217;s and B&#8217;s). Some part of the subsystem makes an A object and hands it off to another subsystem. This other thread of execution needs to add some behaviour to the base class type (which is why we need a B type), but we cannot require the folks who make an A to make a B instead, as this would introduce an undesirable dependency between the two subsystems. We also don&#8217;t have the cycles to devote to any deep copy either, as we have to keep things lean and mean.</p>
<p>Besides the fundamentally disturbing fact that everyone in the room maintained, for more than two days, that one could have the best of both worlds and simply make an A, hand it off, and make a B out of it *by simple typecasting* (as in B b = (B) a), the implications on the architecture itself was completely missed.</p>
<p>This was solved simply by changing the semantic that a B &#8216;isa&#8217; A to B &#8216;hasa&#8217; A, and in fact, being a little more strict, making it a true composition. The point is, the target language was Java, and the two requirements for the design were that the first subsystem had to be as loosely bound to the second subsystem, and that we didn&#8217;t have the spare clock cycles for deep copies, etc. While other OO languages do provide mechanisms to handle this better (ObjectiveC, Smalltalk, etc.), in this case, since the implementation language was also a requirement, and not optional, its language features therefore directly impacted what we could or could not do in terms of architecture (in this case compostion instead of inheritance).</p>
<p>So I discovered that I have a bunch of IT managers around me &#8230; ;-]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
