<?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: Class/Interface Naming Annoyances</title>
	<atom:link href="http://www.maximporges.com/2008/12/24/classinterface-naming-annoyances/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.maximporges.com/2008/12/24/classinterface-naming-annoyances/</link>
	<description>Winning At Yelling</description>
	<lastBuildDate>Wed, 09 Nov 2011 16:13:16 -0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Marc Esher</title>
		<link>http://www.maximporges.com/2008/12/24/classinterface-naming-annoyances/comment-page-1/#comment-333</link>
		<dc:creator>Marc Esher</dc:creator>
		<pubDate>Mon, 12 Jan 2009 18:56:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.maximporges.com/?p=253#comment-333</guid>
		<description>fair enough. that&#039;s actually a pretty good example-in-reverse.&lt;br/&gt;&lt;br/&gt;thanks max!</description>
		<content:encoded><![CDATA[<p>fair enough. that&#8217;s actually a pretty good example-in-reverse.</p>
<p>thanks max!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Maxim Porges</title>
		<link>http://www.maximporges.com/2008/12/24/classinterface-naming-annoyances/comment-page-1/#comment-332</link>
		<dc:creator>Maxim Porges</dc:creator>
		<pubDate>Mon, 12 Jan 2009 18:46:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.maximporges.com/?p=253#comment-332</guid>
		<description>Well, it&#039;s been a long time since I named anything &quot;Abstract/I&quot;, so to request a recent example of an old strategy kind of cancels itself out. :)&lt;br/&gt;&lt;br/&gt;But seriously... I don&#039;t know if this has caused actual pain, it&#039;s just totally redundant to name something AbstractXXX or IXXX when the language provides keywords describing the situation. My perspective is that polymorphism makes it possible for you to use an object based upon its public interface, and not care about whether the implementation you are dealing with is Abstract or an implementation of an actual Interface. So, naming things in this fashion to make you think about their implementation when it is irrelevant is a code smell IMO.&lt;br/&gt;&lt;br/&gt;For example, we have an analytics application at Highwinds, and it works with various types of data points. The base data point object is called DataPoint, and it does stuff and exposes data. When using DataPoint, I don&#039;t care if it is an abstract base class, an Interface, or a concrete class - it&#039;s totally irrelevant. There are extensions in to FileDataPoint and RegionDataPoint and DmaDataPoint, but the system deals with all of them as DataPoints just the same. At the moment, DataPoint is concrete, but I could refactor its concept to an Abstract class or Interface at any time, which would have absolutely no bearing on the code that operates on these objects so long as the public interface stayed the same. So, forcing the name to be refactored when one of these changes is made is just extra work that provides zero benefit and confuses everybody, since they used to work with DataPoint, but now they have to learn about AbstractDataPoint or IDataPoint instead. &lt;br/&gt;&lt;br/&gt;Makes no sense to me, but that&#039;s just my opinion.&lt;br/&gt;&lt;br/&gt;- max</description>
		<content:encoded><![CDATA[<p>Well, it&#8217;s been a long time since I named anything &#8220;Abstract/I&#8221;, so to request a recent example of an old strategy kind of cancels itself out. :)</p>
<p>But seriously&#8230; I don&#8217;t know if this has caused actual pain, it&#8217;s just totally redundant to name something AbstractXXX or IXXX when the language provides keywords describing the situation. My perspective is that polymorphism makes it possible for you to use an object based upon its public interface, and not care about whether the implementation you are dealing with is Abstract or an implementation of an actual Interface. So, naming things in this fashion to make you think about their implementation when it is irrelevant is a code smell IMO.</p>
<p>For example, we have an analytics application at Highwinds, and it works with various types of data points. The base data point object is called DataPoint, and it does stuff and exposes data. When using DataPoint, I don&#8217;t care if it is an abstract base class, an Interface, or a concrete class &#8211; it&#8217;s totally irrelevant. There are extensions in to FileDataPoint and RegionDataPoint and DmaDataPoint, but the system deals with all of them as DataPoints just the same. At the moment, DataPoint is concrete, but I could refactor its concept to an Abstract class or Interface at any time, which would have absolutely no bearing on the code that operates on these objects so long as the public interface stayed the same. So, forcing the name to be refactored when one of these changes is made is just extra work that provides zero benefit and confuses everybody, since they used to work with DataPoint, but now they have to learn about AbstractDataPoint or IDataPoint instead. </p>
<p>Makes no sense to me, but that&#8217;s just my opinion.</p>
<p>- max</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marc Esher</title>
		<link>http://www.maximporges.com/2008/12/24/classinterface-naming-annoyances/comment-page-1/#comment-331</link>
		<dc:creator>Marc Esher</dc:creator>
		<pubDate>Mon, 12 Jan 2009 18:03:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.maximporges.com/?p=253#comment-331</guid>
		<description>Can you think of some recent examples where your (old) decision to use &quot;Abstract/I&quot; has caused you pain?</description>
		<content:encoded><![CDATA[<p>Can you think of some recent examples where your (old) decision to use &#8220;Abstract/I&#8221; has caused you pain?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Maxim Porges</title>
		<link>http://www.maximporges.com/2008/12/24/classinterface-naming-annoyances/comment-page-1/#comment-327</link>
		<dc:creator>Maxim Porges</dc:creator>
		<pubDate>Wed, 31 Dec 2008 04:03:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.maximporges.com/?p=253#comment-327</guid>
		<description>Hey Cliff, good to hear from you.&lt;br/&gt;&lt;br/&gt;Yeah, I still use &quot;BaseXXX&quot; pretty regularly. Somehow I think that defeats my argument, but stylistic choices are rarely logical... :)&lt;br/&gt;&lt;br/&gt;Happy New Year!&lt;br/&gt;&lt;br/&gt;- max</description>
		<content:encoded><![CDATA[<p>Hey Cliff, good to hear from you.</p>
<p>Yeah, I still use &#8220;BaseXXX&#8221; pretty regularly. Somehow I think that defeats my argument, but stylistic choices are rarely logical&#8230; :)</p>
<p>Happy New Year!</p>
<p>- max</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cliff Meyers</title>
		<link>http://www.maximporges.com/2008/12/24/classinterface-naming-annoyances/comment-page-1/#comment-326</link>
		<dc:creator>Cliff Meyers</dc:creator>
		<pubDate>Wed, 31 Dec 2008 00:02:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.maximporges.com/?p=253#comment-326</guid>
		<description>I&#039;ve went back and forth on this a little bit myself and after reading this I&#039;ve concluded that I agree with you.  I still use &quot;Base&quot; for base classes that I extend (a la Spring&#039;s old JUnit 3.x testing classes) but I think I&#039;m ready to bury &quot;I&quot;/&quot;Abstract&quot; from now on!</description>
		<content:encoded><![CDATA[<p>I&#8217;ve went back and forth on this a little bit myself and after reading this I&#8217;ve concluded that I agree with you.  I still use &#8220;Base&#8221; for base classes that I extend (a la Spring&#8217;s old JUnit 3.x testing classes) but I think I&#8217;m ready to bury &#8220;I&#8221;/&#8221;Abstract&#8221; from now on!</p>
]]></content:encoded>
	</item>
</channel>
</rss>

