<?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"
	>
<channel>
	<title>Comments on: Smalltalk: How to not Design an API</title>
	<atom:link href="http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/feed/" rel="self" type="application/rss+xml" />
	<link>http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/</link>
	<description>Thoughts on language design, API design, compilers, Smalltalk, and Java technology</description>
	<pubDate>Thu, 20 Nov 2008 19:49:22 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: The Weblog of Peter Ahé &#187; Blog Archive &#187; Correction: Instance Variables are not Public in Smalltalk</title>
		<link>http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-22</link>
		<dc:creator>The Weblog of Peter Ahé &#187; Blog Archive &#187; Correction: Instance Variables are not Public in Smalltalk</dc:creator>
		<pubDate>Wed, 11 Jul 2007 17:32:01 +0000</pubDate>
		<guid isPermaLink="false">http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-22</guid>
		<description>[...] The Weblog of Peter Ahé Thoughts on language design, API design, compilers, Smalltalk, and Java technology      &#171; Smalltalk: How to not Design an API [...]</description>
		<content:encoded><![CDATA[<p>[...] The Weblog of Peter Ahé Thoughts on language design, API design, compilers, Smalltalk, and Java technology      &laquo; Smalltalk: How to not Design an API [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stefan Schulz</title>
		<link>http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-21</link>
		<dc:creator>Stefan Schulz</dc:creator>
		<pubDate>Tue, 10 Jul 2007 09:39:05 +0000</pubDate>
		<guid isPermaLink="false">http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-21</guid>
		<description>Well, the analogy lacks a bit in general. Usually, one does not talk to the mechanic directly but some guy who will delegate the task. Or the mechanic may pick up the work order corresponding to the message "change oil". Etc.
So, yes, "should" is too hard, as it always depends on the business requirements.</description>
		<content:encoded><![CDATA[<p>Well, the analogy lacks a bit in general. Usually, one does not talk to the mechanic directly but some guy who will delegate the task. Or the mechanic may pick up the work order corresponding to the message &#8220;change oil&#8221;. Etc.<br />
So, yes, &#8220;should&#8221; is too hard, as it always depends on the business requirements.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Ahé</title>
		<link>http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-20</link>
		<dc:creator>Peter Ahé</dc:creator>
		<pubDate>Mon, 09 Jul 2007 21:21:15 +0000</pubDate>
		<guid isPermaLink="false">http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-20</guid>
		<description>That Mechanic "should" not implement changeOil is a bit too hard: when I bring my car to the mechanic, I tell him to change the oil.  In effect, I pass the message "change oil" and my car along to the mechanic.  Passing a message is just another way to say call a method.  On the other hand, if I fill out a work order and gave that to my mechanic along with my car, you could say I pass the message "do" along with a work order (Task) and my car.</description>
		<content:encoded><![CDATA[<p>That Mechanic &#8220;should&#8221; not implement changeOil is a bit too hard: when I bring my car to the mechanic, I tell him to change the oil.  In effect, I pass the message &#8220;change oil&#8221; and my car along to the mechanic.  Passing a message is just another way to say call a method.  On the other hand, if I fill out a work order and gave that to my mechanic along with my car, you could say I pass the message &#8220;do&#8221; along with a work order (Task) and my car.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stefan Schulz</title>
		<link>http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-18</link>
		<dc:creator>Stefan Schulz</dc:creator>
		<pubDate>Sun, 08 Jul 2007 15:48:58 +0000</pubDate>
		<guid isPermaLink="false">http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-18</guid>
		<description>True. Maybe, I was thinking to much of static utility classes. Classes should always only define those operations that are necessary for the purpose of its instances. Actually, not even the mechanic should implement a changeOil method, but take a Car object and a Task object that describes the process to change Oil.
Thanks.</description>
		<content:encoded><![CDATA[<p>True. Maybe, I was thinking to much of static utility classes. Classes should always only define those operations that are necessary for the purpose of its instances. Actually, not even the mechanic should implement a changeOil method, but take a Car object and a Task object that describes the process to change Oil.<br />
Thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Ahé</title>
		<link>http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-17</link>
		<dc:creator>Peter Ahé</dc:creator>
		<pubDate>Sun, 08 Jul 2007 09:49:41 +0000</pubDate>
		<guid isPermaLink="false">http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-17</guid>
		<description>Utility classes model real concepts just like other classes.  Having objects defining all operations on them is not a litmus test for "proper" object orientation.  In real life, I take my car to a mechanic to get a change of oil; I do not tell the car to change its oil.  There is no natural reason to have a changeOil method on a Car object, and I shouldn't put it there if the only reason is objects define their own operations.  Similarly, regular expressions aren't necessarily operations defined by a String class.  Regular expressions are concepts themselves.</description>
		<content:encoded><![CDATA[<p>Utility classes model real concepts just like other classes.  Having objects defining all operations on them is not a litmus test for &#8220;proper&#8221; object orientation.  In real life, I take my car to a mechanic to get a change of oil; I do not tell the car to change its oil.  There is no natural reason to have a changeOil method on a Car object, and I shouldn&#8217;t put it there if the only reason is objects define their own operations.  Similarly, regular expressions aren&#8217;t necessarily operations defined by a String class.  Regular expressions are concepts themselves.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stefan Schulz</title>
		<link>http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-16</link>
		<dc:creator>Stefan Schulz</dc:creator>
		<pubDate>Sat, 07 Jul 2007 09:31:35 +0000</pubDate>
		<guid isPermaLink="false">http://digital-sushi.org/entry/smalltalk-how-to-not-design-an-api/#comment-16</guid>
		<description>I agree that the APIs of some programming languages are not what they should be alike. Of course, much of this knowledge comes with applying a language. In Java, for example, it's only Class which is its own reflection accessor, while there are seperate reflection classes for Method, Constructor, Field, etc.
What I am not sure about, you are kind of distincting between object-classes and utility-classes, which is interesting. While objects usually define operations on themselves, utility-classes define operations on others. This sounds like utility-classes are rather operation containers (function libraries?) and no "valid" classes.</description>
		<content:encoded><![CDATA[<p>I agree that the APIs of some programming languages are not what they should be alike. Of course, much of this knowledge comes with applying a language. In Java, for example, it&#8217;s only Class which is its own reflection accessor, while there are seperate reflection classes for Method, Constructor, Field, etc.<br />
What I am not sure about, you are kind of distincting between object-classes and utility-classes, which is interesting. While objects usually define operations on themselves, utility-classes define operations on others. This sounds like utility-classes are rather operation containers (function libraries?) and no &#8220;valid&#8221; classes.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
