<?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: Latest Article &#8211; Why Interfaces In ColdFusion Are Irrelevant</title>
	<atom:link href="http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/feed/" rel="self" type="application/rss+xml" />
	<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/</link>
	<description>devnulled provides news, tips, resources, and articles about various topics that software developers and engineers enjoy.</description>
	<lastBuildDate>Sat, 14 Aug 2010 20:52:17 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
	<item>
		<title>By: Shimju David</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-410194</link>
		<dc:creator>Shimju David</dc:creator>
		<pubDate>Sat, 15 Mar 2008 11:22:31 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-410194</guid>
		<description>I think Interfaces are very handy for Software Architects who manages large application with consists of multiple developers. 
He can create the Core  application framework (controller CFCs and models CFCS - DAO, Gateways) by creating Interface CFCs with complete documentation and pass them to developers. 
Developers can later write the logic on their CFC which implements the Interface CFCs written by Architect. 
That way Interfaces enforce the developers not to deviate from the coding rules and modeling style proposed by Software Architect.</description>
		<content:encoded><![CDATA[<p>I think Interfaces are very handy for Software Architects who manages large application with consists of multiple developers.<br />
He can create the Core  application framework (controller CFCs and models CFCS &#8211; DAO, Gateways) by creating Interface CFCs with complete documentation and pass them to developers.<br />
Developers can later write the logic on their CFC which implements the Interface CFCs written by Architect.<br />
That way Interfaces enforce the developers not to deviate from the coding rules and modeling style proposed by Software Architect.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Christopher Vigliotti&#8217;s Blog &#187; Blog Archive &#187; New To ColdFusion 8 : cfinterface</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-176470</link>
		<dc:creator>Christopher Vigliotti&#8217;s Blog &#187; Blog Archive &#187; New To ColdFusion 8 : cfinterface</dc:creator>
		<pubDate>Thu, 02 Aug 2007 13:29:29 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-176470</guid>
		<description>[...] Despite this article and some of the comments made in response to this post I&#8217;ve been interested in learning design patterns and can now do so using ColdFusion! Looks like a great language just got better. [...]</description>
		<content:encoded><![CDATA[<p>[...] Despite this article and some of the comments made in response to this post I&#8217;ve been interested in learning design patterns and can now do so using ColdFusion! Looks like a great language just got better. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vince Bonfanti</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-56431</link>
		<dc:creator>Vince Bonfanti</dc:creator>
		<pubDate>Sun, 14 Jan 2007 19:25:28 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-56431</guid>
		<description>Hi Brandon,

I thought it better to respond via a blog entry, rather than a lengthy comment here on your blog:

http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=151A320B-6EBB-122A-9D45157E58B8EE29

I hope to follow-up with a response to the issue you raise regarding overriding and function signatures, but it&#039;ll probably be next weekend before I have the time.

This is a good discussion and I&#039;m glad you started it, since it&#039;s forced me to think more deeply about my position on this topic and how to present it to a wider audience. (I&#039;d also like to be very clear that my arguments against your position are technical and not personal, and I hope you haven&#039;t taken offense where none is intended.)

Regards.</description>
		<content:encoded><![CDATA[<p>Hi Brandon,</p>
<p>I thought it better to respond via a blog entry, rather than a lengthy comment here on your blog:</p>
<p><a href="http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=151A320B-6EBB-122A-9D45157E58B8EE29" rel="nofollow">http://blog.newatlanta.com/ind.....7E58B8EE29</a></p>
<p>I hope to follow-up with a response to the issue you raise regarding overriding and function signatures, but it&#8217;ll probably be next weekend before I have the time.</p>
<p>This is a good discussion and I&#8217;m glad you started it, since it&#8217;s forced me to think more deeply about my position on this topic and how to present it to a wider audience. (I&#8217;d also like to be very clear that my arguments against your position are technical and not personal, and I hope you haven&#8217;t taken offense where none is intended.)</p>
<p>Regards.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brandon Harper</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-55106</link>
		<dc:creator>Brandon Harper</dc:creator>
		<pubDate>Thu, 11 Jan 2007 00:42:51 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-55106</guid>
		<description>Vince:

My specific point in the article is that the main advantage of interfaces is being able to check and ensure that contracts are followed at compile time rather than runtime.  This is technically infeasible within a dynamic language.  It&#039;s going to only throw the error at runtime no matter how you bake the implementation of interfaces.

The other counter arguments about interface support which were not covered in my article (on purpose) also can already be done.  IE-- multi inheritance is also available via mixins and you can write your own implementations of interfaces which are very similar to what an interface implementation would do.

I disagree with &quot;If you reject interfaces, then you should reject CFCs for the same reasons&quot;. I don&#039;t think it&#039;s an arbitrary line at all.  There is nothing about OOP that /requires/ an OO language to have interfaces, yet an OO language does require many other things all of which CFC&#039;s already support.  As long as you meet some of the basic reqirements of OOP such as classes, objects, inheritance, polymorphism, encpasulation, abstraction, etc., you have an OO language.  Not implementing interfaces does not mean you should reject CFC&#039;s.

The whole point being that an implementing an interface within a dynamic language does not solve the fundamental problem which interfaces are designed to solve (see my first paragraph in this response).  While an interface tag would provide an implementation of an abstraction, the only way to ensure a contract is followed is by throwing a runtime exception, which in most cases would have happened anyway if the contract weren&#039;t being followed.

If what you said about the implementation of CFC&#039;s is true, then why are there not implementations of interfaces in any other dynamically typed OO language?  (Though I assume there&#039;s one out there somewhere that probably does have interfaces, but none that I&#039;m aware of).</description>
		<content:encoded><![CDATA[<p>Vince:</p>
<p>My specific point in the article is that the main advantage of interfaces is being able to check and ensure that contracts are followed at compile time rather than runtime.  This is technically infeasible within a dynamic language.  It&#8217;s going to only throw the error at runtime no matter how you bake the implementation of interfaces.</p>
<p>The other counter arguments about interface support which were not covered in my article (on purpose) also can already be done.  IE&#8211; multi inheritance is also available via mixins and you can write your own implementations of interfaces which are very similar to what an interface implementation would do.</p>
<p>I disagree with &#8220;If you reject interfaces, then you should reject CFCs for the same reasons&#8221;. I don&#8217;t think it&#8217;s an arbitrary line at all.  There is nothing about OOP that /requires/ an OO language to have interfaces, yet an OO language does require many other things all of which CFC&#8217;s already support.  As long as you meet some of the basic reqirements of OOP such as classes, objects, inheritance, polymorphism, encpasulation, abstraction, etc., you have an OO language.  Not implementing interfaces does not mean you should reject CFC&#8217;s.</p>
<p>The whole point being that an implementing an interface within a dynamic language does not solve the fundamental problem which interfaces are designed to solve (see my first paragraph in this response).  While an interface tag would provide an implementation of an abstraction, the only way to ensure a contract is followed is by throwing a runtime exception, which in most cases would have happened anyway if the contract weren&#8217;t being followed.</p>
<p>If what you said about the implementation of CFC&#8217;s is true, then why are there not implementations of interfaces in any other dynamically typed OO language?  (Though I assume there&#8217;s one out there somewhere that probably does have interfaces, but none that I&#8217;m aware of).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vince Bonfanti</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-55084</link>
		<dc:creator>Vince Bonfanti</dc:creator>
		<pubDate>Wed, 10 Jan 2007 21:59:21 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-55084</guid>
		<description>Brandon: your arguments against interfaces can be used to argue against the complete implementation of CFCs in CFML. All of the features that classes provide in other object-oriented languages--encapsulation, type safety, etc.--can be easily defeated in CFCs due to the dynamic nature of CFML.

I can easily take the most important sentence of your summary and simply replace &quot;interfaces&quot; with &quot;classes&quot; and it&#039;s the same argument:

&quot;Any implementation of (classes) in the CFML language would essentially only represent a difference in semantics to other ways already available to implement (class)-like objects without providing the (encapsulation, type-safety, etc.) that (classes) should provide.&quot;

This was the point of my blog entry from a while ago entitled, &quot;Is CFML already Java-lite?&quot;, a point that almost everyone missed: every argument against interfaces is essentially an argument against CFCs in general. If you reject interfaces, then you should reject CFCs for the same reasons. Otherwise, you&#039;re simply drawing an arbitray line.</description>
		<content:encoded><![CDATA[<p>Brandon: your arguments against interfaces can be used to argue against the complete implementation of CFCs in CFML. All of the features that classes provide in other object-oriented languages&#8211;encapsulation, type safety, etc.&#8211;can be easily defeated in CFCs due to the dynamic nature of CFML.</p>
<p>I can easily take the most important sentence of your summary and simply replace &#8220;interfaces&#8221; with &#8220;classes&#8221; and it&#8217;s the same argument:</p>
<p>&#8220;Any implementation of (classes) in the CFML language would essentially only represent a difference in semantics to other ways already available to implement (class)-like objects without providing the (encapsulation, type-safety, etc.) that (classes) should provide.&#8221;</p>
<p>This was the point of my blog entry from a while ago entitled, &#8220;Is CFML already Java-lite?&#8221;, a point that almost everyone missed: every argument against interfaces is essentially an argument against CFCs in general. If you reject interfaces, then you should reject CFCs for the same reasons. Otherwise, you&#8217;re simply drawing an arbitray line.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brandon Harper</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-55052</link>
		<dc:creator>Brandon Harper</dc:creator>
		<pubDate>Wed, 10 Jan 2007 17:38:59 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-55052</guid>
		<description>Sam:

Just read your comment after replying to Vince-- looks like we agree on the point of mixins covering multiple inheritance.  

Overall the point of the article is that I wanted to cover the technical side of why I don&#039;t think interfaces are a good idea since I hadn&#039;t seen anyone else mention it (at the runtime implementation level), and it&#039;s one of many reasons why I&#039;m against their implementation.  I do still think the primary reason for interfaces is for contracts, but yes, they do also allow multiple inheritance.</description>
		<content:encoded><![CDATA[<p>Sam:</p>
<p>Just read your comment after replying to Vince&#8211; looks like we agree on the point of mixins covering multiple inheritance.  </p>
<p>Overall the point of the article is that I wanted to cover the technical side of why I don&#8217;t think interfaces are a good idea since I hadn&#8217;t seen anyone else mention it (at the runtime implementation level), and it&#8217;s one of many reasons why I&#8217;m against their implementation.  I do still think the primary reason for interfaces is for contracts, but yes, they do also allow multiple inheritance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brandon Harper</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-55050</link>
		<dc:creator>Brandon Harper</dc:creator>
		<pubDate>Wed, 10 Jan 2007 17:32:25 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-55050</guid>
		<description>Vince:

Yep you&#039;re right, it looks like the extends attribute was unintentionally omitted while I was reformatting the source code for print.  Good catch.  I need to go back and fix that in the blog entry as well.

I also concur with not being able to do multiple inheritance.  Personally I&#039;ve never been stifled in ColdFusion by not being able to do multiple inheritance, and you can always do the ColdFusion version of mixins instead.  I guess I haven&#039;t seen much chatter about people bemoaning CFC&#039;s because they don&#039;t support it, but I&#039;m sure someone wishes it were around.

I know that Python has some sort of limited support of multiple inheritance and I believe mixins are also the   answer in Ruby-- do you know if there are there any other dynamic languages beyond these which properly support multiple inheritance?  I&#039;m actually kind of curious about that.   Multiple inheritance has always struck me as something that you shouldn&#039;t use very often, and when you do, you&#039;d better know what you&#039;re doing for sure.</description>
		<content:encoded><![CDATA[<p>Vince:</p>
<p>Yep you&#8217;re right, it looks like the extends attribute was unintentionally omitted while I was reformatting the source code for print.  Good catch.  I need to go back and fix that in the blog entry as well.</p>
<p>I also concur with not being able to do multiple inheritance.  Personally I&#8217;ve never been stifled in ColdFusion by not being able to do multiple inheritance, and you can always do the ColdFusion version of mixins instead.  I guess I haven&#8217;t seen much chatter about people bemoaning CFC&#8217;s because they don&#8217;t support it, but I&#8217;m sure someone wishes it were around.</p>
<p>I know that Python has some sort of limited support of multiple inheritance and I believe mixins are also the   answer in Ruby&#8211; do you know if there are there any other dynamic languages beyond these which properly support multiple inheritance?  I&#8217;m actually kind of curious about that.   Multiple inheritance has always struck me as something that you shouldn&#8217;t use very often, and when you do, you&#8217;d better know what you&#8217;re doing for sure.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brandon Harper</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-55047</link>
		<dc:creator>Brandon Harper</dc:creator>
		<pubDate>Wed, 10 Jan 2007 17:07:52 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-55047</guid>
		<description>Brian:

Good point about the error being thrown anytime you access the component rather than when you call a particular missing method.   I think my only counterpoint that I could make to that would be that you should in theory catch this sort of exception with proper unit and integration testing, but there isn&#039;t such a thing as perfect code or testing either.

I can&#039;t say I would /never/ use them if they were there, but at the same time at a macro/theory level I don&#039;t feel that there is really an optimal way to implement them within a language which isn&#039;t type checked.  Overall, I personally think that adding interfaces to a dynamic language is a very slippery slope for a lot of reasons.</description>
		<content:encoded><![CDATA[<p>Brian:</p>
<p>Good point about the error being thrown anytime you access the component rather than when you call a particular missing method.   I think my only counterpoint that I could make to that would be that you should in theory catch this sort of exception with proper unit and integration testing, but there isn&#8217;t such a thing as perfect code or testing either.</p>
<p>I can&#8217;t say I would /never/ use them if they were there, but at the same time at a macro/theory level I don&#8217;t feel that there is really an optimal way to implement them within a language which isn&#8217;t type checked.  Overall, I personally think that adding interfaces to a dynamic language is a very slippery slope for a lot of reasons.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sam</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-55044</link>
		<dc:creator>Sam</dc:creator>
		<pubDate>Wed, 10 Jan 2007 16:49:49 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-55044</guid>
		<description>Brandon, 

I do agree with your conclusion that interfaces in CF are basically pointless (aside from the sound advice to depend on interfaces, not implementations), but I&#039;m not sure I agree with how you arrived there.

You mention a couple of times that &quot;the main purpose of an interface is to ensure that an object follows a contract.&quot;  For me, the main purpose of an interface is to allow a pseudo-multiple inheritance - basically, you get the benefits of substitutability without the benefits of reusability.  In that regard, it is pointless to have interfaces, since we already have the benefit of reusability for multiple inheritance via mixin, and we have no use for substitutability since we are dynamically typed (unless, someone makes the (in my opinion) mistake of typing the arguments to their functions).</description>
		<content:encoded><![CDATA[<p>Brandon, </p>
<p>I do agree with your conclusion that interfaces in CF are basically pointless (aside from the sound advice to depend on interfaces, not implementations), but I&#8217;m not sure I agree with how you arrived there.</p>
<p>You mention a couple of times that &#8220;the main purpose of an interface is to ensure that an object follows a contract.&#8221;  For me, the main purpose of an interface is to allow a pseudo-multiple inheritance &#8211; basically, you get the benefits of substitutability without the benefits of reusability.  In that regard, it is pointless to have interfaces, since we already have the benefit of reusability for multiple inheritance via mixin, and we have no use for substitutability since we are dynamically typed (unless, someone makes the (in my opinion) mistake of typing the arguments to their functions).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vince Bonfanti</title>
		<link>http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/comment-page-1/#comment-55033</link>
		<dc:creator>Vince Bonfanti</dc:creator>
		<pubDate>Wed, 10 Jan 2007 16:02:51 +0000</pubDate>
		<guid isPermaLink="false">http://devnulled.com/content/2007/01/latest-article-why-interfaces-in-coldfusion-are-irrelevant/#comment-55033</guid>
		<description>Hi Brandon,

In the example in the article, should&#039;t the CFCOMPONENT tag of Bar.cfc include the EXTENDS=&quot;Foo&quot; attribute? Otherwise, what&#039;s the point of Foo?

If so, then there&#039;s a limitation of of your pseudo-interface technique: CFML only support single inheritance. Therefore, you can&#039;t have a CFC implement multiple interfaces, nor can you have a class both extend a concrete (non-interface) CFC and also implement one or more interfaces.

The implementation of interfaces in BlueDragon 7.0 allows a CFC to implement multiple interfaces, and allows a CFC to extend a concrete CFC and also implement one or more interfaces.

Vince</description>
		<content:encoded><![CDATA[<p>Hi Brandon,</p>
<p>In the example in the article, should&#8217;t the CFCOMPONENT tag of Bar.cfc include the EXTENDS=&#8221;Foo&#8221; attribute? Otherwise, what&#8217;s the point of Foo?</p>
<p>If so, then there&#8217;s a limitation of of your pseudo-interface technique: CFML only support single inheritance. Therefore, you can&#8217;t have a CFC implement multiple interfaces, nor can you have a class both extend a concrete (non-interface) CFC and also implement one or more interfaces.</p>
<p>The implementation of interfaces in BlueDragon 7.0 allows a CFC to implement multiple interfaces, and allows a CFC to extend a concrete CFC and also implement one or more interfaces.</p>
<p>Vince</p>
]]></content:encoded>
	</item>
</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->