<?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: Intention Revealing Names</title>
	<atom:link href="http://aslamkhan.net/software-development/intention-revealing-names/feed/" rel="self" type="application/rss+xml" />
	<link>http://aslamkhan.net/software-development/intention-revealing-names/</link>
	<description>"There are no limits. There are only plateaus, and you must not stay there, you must go beyond them." - Bruce Lee</description>
	<lastBuildDate>Mon, 08 Mar 2010 12:46:25 -0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Aslam</title>
		<link>http://aslamkhan.net/software-development/intention-revealing-names/comment-page-1/#comment-455</link>
		<dc:creator>Aslam</dc:creator>
		<pubDate>Wed, 23 Apr 2008 11:08:02 +0000</pubDate>
		<guid isPermaLink="false">http://aslamkhan.net/software-development/intention-revealing-names/#comment-455</guid>
		<description>Hi Andrew,

Absolutely true.  That is what I intended by the example but was, perhaps, not explicit.  Hmmm, I should have shown DirectedGraph as a private member of the SocialNetwork class.  That would have made the example a lot clearer.

But be guarded about how the layers of abstraction are structured.  For example, extending SocialNetwork from DirectedGraph may not be good idea because all DirectedGraph operations may not be applicable to SocialNetwork.

If that is the case, then encapsulate DirectedGraph in SocialNetwork and expose the relevant operations using intention revealing names and in the implementation delegate the operation to the DirectedGraph.

Aslam</description>
		<content:encoded><![CDATA[<p>Hi Andrew,</p>
<p>Absolutely true.  That is what I intended by the example but was, perhaps, not explicit.  Hmmm, I should have shown DirectedGraph as a private member of the SocialNetwork class.  That would have made the example a lot clearer.</p>
<p>But be guarded about how the layers of abstraction are structured.  For example, extending SocialNetwork from DirectedGraph may not be good idea because all DirectedGraph operations may not be applicable to SocialNetwork.</p>
<p>If that is the case, then encapsulate DirectedGraph in SocialNetwork and expose the relevant operations using intention revealing names and in the implementation delegate the operation to the DirectedGraph.</p>
<p>Aslam</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrew McVeigh</title>
		<link>http://aslamkhan.net/software-development/intention-revealing-names/comment-page-1/#comment-454</link>
		<dc:creator>Andrew McVeigh</dc:creator>
		<pubDate>Wed, 23 Apr 2008 08:43:16 +0000</pubDate>
		<guid isPermaLink="false">http://aslamkhan.net/software-development/intention-revealing-names/#comment-454</guid>
		<description>There is a tension between implementation reuse and intention revelation.  Case in point -- if you  need a graph cycle detection algorithm, there are many around but phrased in terms of nodes and graphs etc.  But you&#039;ll find very few called &quot;SocialNetwork&quot;.

Perhaps the situation is better solved using layered abstractions, which successively reveal intentions.  E.g. build on the graph library (i.e. use it as the underlying implementation), but call your new layer SocialNetwork and hide the graph structure from clients.

Andrew</description>
		<content:encoded><![CDATA[<p>There is a tension between implementation reuse and intention revelation.  Case in point &#8212; if you  need a graph cycle detection algorithm, there are many around but phrased in terms of nodes and graphs etc.  But you&#8217;ll find very few called &#8220;SocialNetwork&#8221;.</p>
<p>Perhaps the situation is better solved using layered abstractions, which successively reveal intentions.  E.g. build on the graph library (i.e. use it as the underlying implementation), but call your new layer SocialNetwork and hide the graph structure from clients.</p>
<p>Andrew</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stefan Mahs</title>
		<link>http://aslamkhan.net/software-development/intention-revealing-names/comment-page-1/#comment-428</link>
		<dc:creator>Stefan Mahs</dc:creator>
		<pubDate>Wed, 16 Apr 2008 07:48:36 +0000</pubDate>
		<guid isPermaLink="false">http://aslamkhan.net/software-development/intention-revealing-names/#comment-428</guid>
		<description>This is one of my favourite topics.  I was first exposed to the importance of &quot;semantics in design&quot; in the early 1990&#039;s.  In addition to aiding in readability, naming classes and attributes accurately and consistently with business terminology helps to maintain a purer design and avoids inheritance hierarchies that support &quot;technically&quot; common functionality.  If class names make their intent and purpose in life unambiguous then ancestors in the resulting inheritance hierarchy will embody behaviour and properties common to the corresponding business concepts they represent, and the design will be more robust.  This robustness will become critical when it comes to implementing changes to keep the system in line with the changing business.

Stefan</description>
		<content:encoded><![CDATA[<p>This is one of my favourite topics.  I was first exposed to the importance of &#8220;semantics in design&#8221; in the early 1990&#8217;s.  In addition to aiding in readability, naming classes and attributes accurately and consistently with business terminology helps to maintain a purer design and avoids inheritance hierarchies that support &#8220;technically&#8221; common functionality.  If class names make their intent and purpose in life unambiguous then ancestors in the resulting inheritance hierarchy will embody behaviour and properties common to the corresponding business concepts they represent, and the design will be more robust.  This robustness will become critical when it comes to implementing changes to keep the system in line with the changing business.</p>
<p>Stefan</p>
]]></content:encoded>
	</item>
</channel>
</rss>
