<?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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	>
<channel>
	<title>Comments on: Implementation Exposure Through Inheritance</title>
	<atom:link href="http://enfranchisedmind.com/blog/posts/implementation-exposure-through-inheritance/feed/" rel="self" type="application/rss+xml" />
	<link>http://enfranchisedmind.com/blog/posts/implementation-exposure-through-inheritance/</link>
	<description>programming, politics, &#38; other religious issues</description>
	<lastBuildDate>Sat, 13 Mar 2010 19:36:10 +0000</lastBuildDate>
	
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Enfranchised Mind</title>
		<link>http://enfranchisedmind.com/blog/posts/implementation-exposure-through-inheritance/#comment-31654</link>
		<dc:creator>Enfranchised Mind</dc:creator>
		<pubDate>Mon, 10 Sep 2007 00:25:58 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/archive/2007/02/17/193#comment-31654</guid>
		<description>&lt;strong&gt;Use vr.s Reuse, or The Second Derivitive of Programming...&lt;/strong&gt;

I think I&#8217;ve come to the conclusion that anything Raganwald writes is required reading.  Even when I don&#8217;t agree with what he&#8217;s writing.  As it is with this post on abstraction vr.s abbreviation in programming.  Well, disagree with is...</description>
		<content:encoded><![CDATA[<p><strong>Use vr.s Reuse, or The Second Derivitive of Programming&#8230;</strong></p>
<p>I think I&#8217;ve come to the conclusion that anything Raganwald writes is required reading.  Even when I don&#8217;t agree with what he&#8217;s writing.  As it is with this post on abstraction vr.s abbreviation in programming.  Well, disagree with is&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Enfranchised Mind</title>
		<link>http://enfranchisedmind.com/blog/posts/implementation-exposure-through-inheritance/#comment-31567</link>
		<dc:creator>Enfranchised Mind</dc:creator>
		<pubDate>Mon, 13 Aug 2007 18:10:27 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/archive/2007/02/17/193#comment-31567</guid>
		<description>&lt;strong&gt;Another Person Bit by Java Exposing the Implementation through Inheritance...&lt;/strong&gt;

Brian Pontarelli encounters the same ugliness in the Java API that I talked about back in Implementation Exposure Through Inheritance.
It&#8217;s a good read, and goes into more detail than I did about the most glaring and chafing example: Java&#8217;s...</description>
		<content:encoded><![CDATA[<p><strong>Another Person Bit by Java Exposing the Implementation through Inheritance&#8230;</strong></p>
<p>Brian Pontarelli encounters the same ugliness in the Java API that I talked about back in Implementation Exposure Through Inheritance.<br />
It&#8217;s a good read, and goes into more detail than I did about the most glaring and chafing example: Java&#8217;s&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sandro Magi</title>
		<link>http://enfranchisedmind.com/blog/posts/implementation-exposure-through-inheritance/#comment-31117</link>
		<dc:creator>Sandro Magi</dc:creator>
		<pubDate>Thu, 21 Jun 2007 00:56:46 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/archive/2007/02/17/193#comment-31117</guid>
		<description>This happens simply because these OO languages do not sufficiently distinguish interface from implementation. You may wish to implement the Hashtable interface, but that you inherit the implementation of Hashtable (ie. reuse it) is an implementation detail of Properties, and should not be exposed to client code. Unfortunately, it is since the subtyping relationship of Properties is clearly visible.

For this reason, and others, I strongly object to Java/C#-style inheritance on general principle, and believe future languages should enforce interfaces only; code reuse should occur via alternate mechanisms which are not exposed to clients, such as traits in Scala, or forwarding as in systems with first-class messages.</description>
		<content:encoded><![CDATA[<p>This happens simply because these OO languages do not sufficiently distinguish interface from implementation. You may wish to implement the Hashtable interface, but that you inherit the implementation of Hashtable (ie. reuse it) is an implementation detail of Properties, and should not be exposed to client code. Unfortunately, it is since the subtyping relationship of Properties is clearly visible.</p>
<p>For this reason, and others, I strongly object to Java/C#-style inheritance on general principle, and believe future languages should enforce interfaces only; code reuse should occur via alternate mechanisms which are not exposed to clients, such as traits in Scala, or forwarding as in systems with first-class messages.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andre Pang</title>
		<link>http://enfranchisedmind.com/blog/posts/implementation-exposure-through-inheritance/#comment-3094</link>
		<dc:creator>Andre Pang</dc:creator>
		<pubDate>Mon, 19 Feb 2007 13:05:54 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/archive/2007/02/17/193#comment-3094</guid>
		<description>There&#039;s &lt;code&gt;private&lt;/code&gt; inheritance in C++, but I suspect you know that already :-).  Outside of that, sorry.  Maaaaybe you can hack up something involving Java&#039;s class loaders (and whatever the equivalent in C# is), but I suspect that using an interface and factory is probably a ton easier than that kind of craziness!</description>
		<content:encoded><![CDATA[<p>There&#8217;s <code>private</code> inheritance in C++, but I suspect you know that already :-).  Outside of that, sorry.  Maaaaybe you can hack up something involving Java&#8217;s class loaders (and whatever the equivalent in C# is), but I suspect that using an interface and factory is probably a ton easier than that kind of craziness!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Candide</title>
		<link>http://enfranchisedmind.com/blog/posts/implementation-exposure-through-inheritance/#comment-3061</link>
		<dc:creator>Candide</dc:creator>
		<pubDate>Sun, 18 Feb 2007 16:29:36 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/archive/2007/02/17/193#comment-3061</guid>
		<description>Jules:

Well, if I use Ruby, the advantages I am looking for (e.g. compile-time checks on method signatures) all go away.  So, yes, I do not have the problems, but I also do not have any of the advantages.  PLUS I lose typo checking on my method calls (&lt;code&gt;list.frist&lt;/code&gt; is a popular one for me).

BHurt:

I know.  I was facing this problem and going wishing for type inference the whole time.  And there are those out there who are categorically opposed to inheritance because of these issues -- if you want the same method signature, use interfaces.  I think this is a bit too far: the Number example is a good one, because you can override one method and get the rest for free.</description>
		<content:encoded><![CDATA[<p>Jules:</p>
<p>Well, if I use Ruby, the advantages I am looking for (e.g. compile-time checks on method signatures) all go away.  So, yes, I do not have the problems, but I also do not have any of the advantages.  PLUS I lose typo checking on my method calls (<code>list.frist</code> is a popular one for me).</p>
<p>BHurt:</p>
<p>I know.  I was facing this problem and going wishing for type inference the whole time.  And there are those out there who are categorically opposed to inheritance because of these issues &#8212; if you want the same method signature, use interfaces.  I think this is a bit too far: the Number example is a good one, because you can override one method and get the rest for free.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
