<?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 for abstratt&#039;s blog</title>
	<atom:link href="http://abstratt.com/blog/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://abstratt.com/blog</link>
	<description>We have one obsession: stopping people from writing so much code</description>
	<lastBuildDate>Thu, 12 Jan 2012 07:22:21 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by What is the focus of analysis: problem or solution? &#171; Vincent Hanniet * IT Modernization</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-2229</link>
		<dc:creator>What is the focus of analysis: problem or solution? &#171; Vincent Hanniet * IT Modernization</dc:creator>
		<pubDate>Thu, 12 Jan 2012 07:22:21 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-2229</guid>
		<description>[...] post is my shifted comment on Rafael&#8217;s post &amp; discussion. Rafael talks about analysis vs design in the software life-cycle, where problem is the requirement [...]</description>
		<content:encoded><![CDATA[<p>[...] post is my shifted comment on Rafael&#8217;s post &amp; discussion. Rafael talks about analysis vs design in the software life-cycle, where problem is the requirement [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Myths that give model-driven development a bad name by Jim Logan</title>
		<link>http://abstratt.com/blog/2010/02/06/myths-that-give-model-driven-development-a-bad-name/comment-page-1/#comment-2008</link>
		<dc:creator>Jim Logan</dc:creator>
		<pubDate>Wed, 30 Nov 2011 20:29:27 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=168#comment-2008</guid>
		<description>@rafael: I love what you said: &quot;without MDD, domain-savvy developers need to deal with technical stuff they don’t (want to) understand, and more technical developers need to deal with domain-related stuff they would rather not think about.&quot;</description>
		<content:encoded><![CDATA[<p>@rafael: I love what you said: &#8220;without MDD, domain-savvy developers need to deal with technical stuff they don’t (want to) understand, and more technical developers need to deal with domain-related stuff they would rather not think about.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MDD meets TDD: mapping requirements as model test cases by Andreas Leue</title>
		<link>http://abstratt.com/blog/2011/08/29/modeling-requirements-the-pragmatic-way-or-when-xunit-meets-xuml/comment-page-1/#comment-2001</link>
		<dc:creator>Andreas Leue</dc:creator>
		<pubDate>Fri, 11 Nov 2011 23:48:05 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=633#comment-2001</guid>
		<description>Hi Rafael,
I left a longer comment at MDSN
Andreas

http://www.modeldrivensoftware.net/profiles/blogs/mdd-meets-tdd-mapping-requirements-as-model-test-cases</description>
		<content:encoded><![CDATA[<p>Hi Rafael,<br />
I left a longer comment at MDSN<br />
Andreas</p>
<p><a href="http://www.modeldrivensoftware.net/profiles/blogs/mdd-meets-tdd-mapping-requirements-as-model-test-cases" rel="nofollow">http://www.modeldrivensoftware.net/profiles/blogs/mdd-meets-tdd-mapping-requirements-as-model-test-cases</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MDD meets TDD (part II): Code Generation by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/10/31/mdd-meets-tdd-code-generation/comment-page-1/#comment-1999</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 08 Nov 2011 03:41:08 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=685#comment-1999</guid>
		<description>Hmm, that would suggest your actual_ and expected_ templates don&#039;t have the same suffix (like &quot;actual_pojo_enumeration&quot; and expected_pojo_enumeration&quot;).

I just went through this and go stuck as well, but with a different error:

&lt;code&gt;
Internal error (java.lang.IllegalArgumentException: Can&#039;t find template pojoEnumeration.st; context is [actual_pojo_enumeration]; group hierarchy is [my_tests])
&lt;/code&gt;

but that was because I forgot to declare the template ancestor:

&lt;code&gt;
group my_tests : pojo_struct;
&lt;/code&gt;

Please make sure your template starts with that. I just updated the example code for the template accordingly.

The final goal of the exercise is to produce no errors, IOW, something like this:

&lt;code&gt;
Model compiled successfuly in 0.147s
Code generation tested successfuly in 0.51s
&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>Hmm, that would suggest your actual_ and expected_ templates don&#8217;t have the same suffix (like &#8220;actual_pojo_enumeration&#8221; and expected_pojo_enumeration&#8221;).</p>
<p>I just went through this and go stuck as well, but with a different error:</p>
<p><code><br />
Internal error (java.lang.IllegalArgumentException: Can't find template pojoEnumeration.st; context is [actual_pojo_enumeration]; group hierarchy is [my_tests])<br />
</code></p>
<p>but that was because I forgot to declare the template ancestor:</p>
<p><code><br />
group my_tests : pojo_struct;<br />
</code></p>
<p>Please make sure your template starts with that. I just updated the example code for the template accordingly.</p>
<p>The final goal of the exercise is to produce no errors, IOW, something like this:</p>
<p><code><br />
Model compiled successfuly in 0.147s<br />
Code generation tested successfuly in 0.51s<br />
</code></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Can you tell this is 100% generated code? by MDD meets TDD (part II): Code Generation &#124; abstratt&#039;s blog</title>
		<link>http://abstratt.com/blog/2011/10/31/can-you-tell-this-is-100-generated-code-from-a-uml-model/comment-page-1/#comment-1998</link>
		<dc:creator>MDD meets TDD (part II): Code Generation &#124; abstratt&#039;s blog</dc:creator>
		<pubDate>Tue, 08 Nov 2011 03:37:19 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=707#comment-1998</guid>
		<description>[...] like it too. That is how we got the spanking new version of the POJO target platform to work (see post describing it and the actual project) &#8211; we actually wrote the test cases first before writing [...]</description>
		<content:encoded><![CDATA[<p>[...] like it too. That is how we got the spanking new version of the POJO target platform to work (see post describing it and the actual project) &#8211; we actually wrote the test cases first before writing [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 11 Dogmas of Model-Driven Development by Ken Lyle</title>
		<link>http://abstratt.com/blog/2011/09/28/11-dogmas-of-model-driven-development/comment-page-1/#comment-1997</link>
		<dc:creator>Ken Lyle</dc:creator>
		<pubDate>Mon, 07 Nov 2011 23:49:04 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=697#comment-1997</guid>
		<description>Very nice.  I like it even better with Steven Kelly&#039;s refinements.</description>
		<content:encoded><![CDATA[<p>Very nice.  I like it even better with Steven Kelly&#8217;s refinements.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MDD meets TDD (part II): Code Generation by Ken Lyle</title>
		<link>http://abstratt.com/blog/2011/10/31/mdd-meets-tdd-code-generation/comment-page-1/#comment-1996</link>
		<dc:creator>Ken Lyle</dc:creator>
		<pubDate>Mon, 07 Nov 2011 23:42:33 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=685#comment-1996</guid>
		<description>Hey Rafael,  Thanks for this.

So, is &quot;No tests found for my_tests&quot; the &quot;correct&quot; answer, at the end of this exercise?</description>
		<content:encoded><![CDATA[<p>Hey Rafael,  Thanks for this.</p>
<p>So, is &#8220;No tests found for my_tests&#8221; the &#8220;correct&#8221; answer, at the end of this exercise?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Testing code generation templates &#8211; brainstorming by MDD meets TDD (part II): Code Generation &#124; abstratt&#039;s blog</title>
		<link>http://abstratt.com/blog/2011/08/01/testing-code-generation-templates/comment-page-1/#comment-1993</link>
		<dc:creator>MDD meets TDD (part II): Code Generation &#124; abstratt&#039;s blog</dc:creator>
		<pubDate>Thu, 03 Nov 2011 15:26:46 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=619#comment-1993</guid>
		<description>[...] may have seen our plan for testing code generation before. We are glad to report that that plan has materialized and code generation tests are now supported [...]</description>
		<content:encoded><![CDATA[<p>[...] may have seen our plan for testing code generation before. We are glad to report that that plan has materialized and code generation tests are now supported [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MDD meets TDD: mapping requirements as model test cases by MDD meets TDD (part II): Code Generation &#124; abstratt&#039;s blog</title>
		<link>http://abstratt.com/blog/2011/08/29/modeling-requirements-the-pragmatic-way-or-when-xunit-meets-xuml/comment-page-1/#comment-1983</link>
		<dc:creator>MDD meets TDD (part II): Code Generation &#124; abstratt&#039;s blog</dc:creator>
		<pubDate>Tue, 01 Nov 2011 06:43:59 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=633#comment-1983</guid>
		<description>[...] at Abstratt we are big believers of model-driven development and automated testing. I wrote here a couple of months ago about how one could represent requirements as test cases for executable [...]</description>
		<content:encoded><![CDATA[<p>[...] at Abstratt we are big believers of model-driven development and automated testing. I wrote here a couple of months ago about how one could represent requirements as test cases for executable [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Can you tell this is 100% generated code? by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/10/31/can-you-tell-this-is-100-generated-code-from-a-uml-model/comment-page-1/#comment-1982</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 01 Nov 2011 04:26:55 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=707#comment-1982</guid>
		<description>Thanks for your reply, Andrey. Very good point about using double. 

Re: thread safety - one could assume thread safety is ensured by some other means (say, service level). The code generated here (the &quot;POJO&quot; target platform) is intentionally simple and ignores non-essential/non-functional concerns. The same thing explains the use of a static slot to keep all instances, which has no role in a real-world application.</description>
		<content:encoded><![CDATA[<p>Thanks for your reply, Andrey. Very good point about using double. </p>
<p>Re: thread safety &#8211; one could assume thread safety is ensured by some other means (say, service level). The code generated here (the &#8220;POJO&#8221; target platform) is intentionally simple and ignores non-essential/non-functional concerns. The same thing explains the use of a static slot to keep all instances, which has no role in a real-world application.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Can you tell this is 100% generated code? by Andrey Loskutov</title>
		<link>http://abstratt.com/blog/2011/10/31/can-you-tell-this-is-100-generated-code-from-a-uml-model/comment-page-1/#comment-1981</link>
		<dc:creator>Andrey Loskutov</dc:creator>
		<pubDate>Mon, 31 Oct 2011 15:17:20 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=707#comment-1981</guid>
		<description>Let&#039;s see:
 - the code is not thread safe
 - uses global static instances map 
 - uses double arithmetics for financial data 

ergo =&gt; I would NOT hire the developer who wrote it :-(</description>
		<content:encoded><![CDATA[<p>Let&#8217;s see:<br />
 &#8211; the code is not thread safe<br />
 &#8211; uses global static instances map<br />
 &#8211; uses double arithmetics for financial data </p>
<p>ergo =&gt; I would NOT hire the developer who wrote it <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 11 Dogmas of Model-Driven Development by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/09/28/11-dogmas-of-model-driven-development/comment-page-1/#comment-1966</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Wed, 05 Oct 2011 05:43:28 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=697#comment-1966</guid>
		<description>Jeroen, 

The trivial mappings I refer to is exactly the kind of transformation model-driven tools perform. They may seem complicated to a non-technical user, but for developers that know how to do it, they are utterly boring and repetitive. Automation, by taking care of the non-intellectually challenging work, allows developers to focus on getting the domain model right, which is what matters most anyways.

Does that make sense now?</description>
		<content:encoded><![CDATA[<p>Jeroen, </p>
<p>The trivial mappings I refer to is exactly the kind of transformation model-driven tools perform. They may seem complicated to a non-technical user, but for developers that know how to do it, they are utterly boring and repetitive. Automation, by taking care of the non-intellectually challenging work, allows developers to focus on getting the domain model right, which is what matters most anyways.</p>
<p>Does that make sense now?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 11 Dogmas of Model-Driven Development by Jeroen van den Bos</title>
		<link>http://abstratt.com/blog/2011/09/28/11-dogmas-of-model-driven-development/comment-page-1/#comment-1965</link>
		<dc:creator>Jeroen van den Bos</dc:creator>
		<pubDate>Mon, 03 Oct 2011 13:57:50 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=697#comment-1965</guid>
		<description>Why do you state that implementation should be a &quot;trivial mapping&quot;? Perhaps I misunderstand your point, but sometimes the power of a model-driven solution is in the intermediate transformations it performs going from model to implementation, shielding the modeler from these complicated and often domain-specific details.</description>
		<content:encoded><![CDATA[<p>Why do you state that implementation should be a &#8220;trivial mapping&#8221;? Perhaps I misunderstand your point, but sometimes the power of a model-driven solution is in the intermediate transformations it performs going from model to implementation, shielding the modeler from these complicated and often domain-specific details.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 11 Dogmas of Model-Driven Development by Pedro J. Molina</title>
		<link>http://abstratt.com/blog/2011/09/28/11-dogmas-of-model-driven-development/comment-page-1/#comment-1959</link>
		<dc:creator>Pedro J. Molina</dc:creator>
		<pubDate>Thu, 29 Sep 2011 21:56:32 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=697#comment-1959</guid>
		<description>SoC rules! Amen! };-)</description>
		<content:encoded><![CDATA[<p>SoC rules! Amen! };-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 11 Dogmas of Model-Driven Development by Axel Guckelsberger</title>
		<link>http://abstratt.com/blog/2011/09/28/11-dogmas-of-model-driven-development/comment-page-1/#comment-1958</link>
		<dc:creator>Axel Guckelsberger</dc:creator>
		<pubDate>Thu, 29 Sep 2011 15:44:20 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=697#comment-1958</guid>
		<description>Thanks for sharing.</description>
		<content:encoded><![CDATA[<p>Thanks for sharing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 11 Dogmas of Model-Driven Development by Nikola Tankovic</title>
		<link>http://abstratt.com/blog/2011/09/28/11-dogmas-of-model-driven-development/comment-page-1/#comment-1957</link>
		<dc:creator>Nikola Tankovic</dc:creator>
		<pubDate>Thu, 29 Sep 2011 11:05:25 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=697#comment-1957</guid>
		<description>Excellent summary! A true separation of concerns!</description>
		<content:encoded><![CDATA[<p>Excellent summary! A true separation of concerns!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 11 Dogmas of Model-Driven Development by Federico Tomassetti</title>
		<link>http://abstratt.com/blog/2011/09/28/11-dogmas-of-model-driven-development/comment-page-1/#comment-1956</link>
		<dc:creator>Federico Tomassetti</dc:creator>
		<pubDate>Thu, 29 Sep 2011 09:51:34 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=697#comment-1956</guid>
		<description>Great post, I fully agree.</description>
		<content:encoded><![CDATA[<p>Great post, I fully agree.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 11 Dogmas of Model-Driven Development by Steven Kelly</title>
		<link>http://abstratt.com/blog/2011/09/28/11-dogmas-of-model-driven-development/comment-page-1/#comment-1955</link>
		<dc:creator>Steven Kelly</dc:creator>
		<pubDate>Thu, 29 Sep 2011 09:17:31 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=697#comment-1955</guid>
		<description>Good set, although clearly only focused on enterprise software.

I&#039;d disagree with III and VII, although it&#039;s probably just a question of how you&#039;ve expressed them.

&quot;III – What makes a language good for implementation makes it suboptimal for modeling, and vice-versa.&quot;

A good Domain-Specific Modeling Language is great for implementing in. Implementing just means &quot;what you need to do to write one more application&quot;. Of course there are generators and frameworks under the hood of a DSML, but that&#039;s true also for languages that you&#039;re considering &#039;implementation languages&#039;.

I wonder if a truer version would be &quot;what makes a language good for a particular domain is what makes it suboptimal as a general purpose language, and vice versa&quot;.

&quot;VII – No modeling language is more understandable to end-users than a running application (or prototype).&quot;

I&#039;d disagree. A good model of structure, states or UI flow allows you to see the whole application at once, whereas using the application means you have to spend extra time pushing the buttons, and only see a small piece at once. That&#039;s why we provide documentation to end users, often showing structure or flowcharts.

Clearly though the ideal is the combination of both. I&#039;d argue that such a combination is also the best thing for the developer, so he can go quickly from adding a bit in the model to testing that in the running application.</description>
		<content:encoded><![CDATA[<p>Good set, although clearly only focused on enterprise software.</p>
<p>I&#8217;d disagree with III and VII, although it&#8217;s probably just a question of how you&#8217;ve expressed them.</p>
<p>&#8220;III – What makes a language good for implementation makes it suboptimal for modeling, and vice-versa.&#8221;</p>
<p>A good Domain-Specific Modeling Language is great for implementing in. Implementing just means &#8220;what you need to do to write one more application&#8221;. Of course there are generators and frameworks under the hood of a DSML, but that&#8217;s true also for languages that you&#8217;re considering &#8216;implementation languages&#8217;.</p>
<p>I wonder if a truer version would be &#8220;what makes a language good for a particular domain is what makes it suboptimal as a general purpose language, and vice versa&#8221;.</p>
<p>&#8220;VII – No modeling language is more understandable to end-users than a running application (or prototype).&#8221;</p>
<p>I&#8217;d disagree. A good model of structure, states or UI flow allows you to see the whole application at once, whereas using the application means you have to spend extra time pushing the buttons, and only see a small piece at once. That&#8217;s why we provide documentation to end users, often showing structure or flowcharts.</p>
<p>Clearly though the ideal is the combination of both. I&#8217;d argue that such a combination is also the best thing for the developer, so he can go quickly from adding a bit in the model to testing that in the running application.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 11 Dogmas of Model-Driven Development by Pierre-Charles David</title>
		<link>http://abstratt.com/blog/2011/09/28/11-dogmas-of-model-driven-development/comment-page-1/#comment-1954</link>
		<dc:creator>Pierre-Charles David</dc:creator>
		<pubDate>Thu, 29 Sep 2011 07:32:43 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=697#comment-1954</guid>
		<description>You might want to name these principles something else that &quot;dogmas&quot;; that name evoques strong beliefs held by people even if they contradict facts. Indeed, Wikipedia says: &quot;Dogma is the established belief or doctrine held by a religion [...]. It is authoritative and not to be disputed, doubted, or diverged from, by the practitioners or believers.&quot; Is that the idea you want to convey?

How about simply &quot;11 principles of MDD&quot;, or &quot;11 lessons learned from MDD&quot; (if you justify them from concrete experience)?</description>
		<content:encoded><![CDATA[<p>You might want to name these principles something else that &#8220;dogmas&#8221;; that name evoques strong beliefs held by people even if they contradict facts. Indeed, Wikipedia says: &#8220;Dogma is the established belief or doctrine held by a religion [...]. It is authoritative and not to be disputed, doubted, or diverged from, by the practitioners or believers.&#8221; Is that the idea you want to convey?</p>
<p>How about simply &#8220;11 principles of MDD&#8221;, or &#8220;11 lessons learned from MDD&#8221; (if you justify them from concrete experience)?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by Scott Finnie</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1949</link>
		<dc:creator>Scott Finnie</dc:creator>
		<pubDate>Sun, 25 Sep 2011 15:20:21 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1949</guid>
		<description>Thanks for the plug Rafael :-)</description>
		<content:encoded><![CDATA[<p>Thanks for the plug Rafael <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1946</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Fri, 23 Sep 2011 06:42:00 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1946</guid>
		<description>Thanks, Scott, enjoyed reading your related post:

http://www.roperia.com/article/362/analysis-and-design-vs-description-and-translation</description>
		<content:encoded><![CDATA[<p>Thanks, Scott, enjoyed reading your related post:</p>
<p><a href="http://www.roperia.com/article/362/analysis-and-design-vs-description-and-translation" rel="nofollow">http://www.roperia.com/article/362/analysis-and-design-vs-description-and-translation</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by Scott Finnie</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1945</link>
		<dc:creator>Scott Finnie</dc:creator>
		<pubDate>Thu, 22 Sep 2011 21:27:30 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1945</guid>
		<description>Coming late to the party, but one of my favourite topics...

@rafael: like you, my introduction to OO modelling was through Rumbaugh et al.  At the time, the proposal that &quot;analysis = understand problem, design = specify solution&quot; held intuitive appeal.  However I always seemed to get caught up in unfruitful debate: there was always some element that someone maintained was &#039;analysis&#039; whilst another was equally adamant it was &#039;design&#039;.

And then I was introduced to Shlaer-Mellor.  It bent my mind.  It took a while for the neurons to reconfigure themselves - and unlearn several years of accepted wisdom.

But the approach brought stunning clarity to the interminable debates of &quot;analysis vs. design&quot;, &quot;problem vs. solution&quot;, &quot;high level vs. detail&quot; and such like.  In SM you&#039;re either modelling a problem domain (&quot;analysis&quot;) or defining the bridges between domains (&quot;design&quot;).  

Precision pervades.  So domain models are precise, executable, and thus amenable to highly automated translation.

In fact I&#039;ve stopped using the terms &quot;analysis&quot; and &quot;design&quot; because they&#039;re so loaded with baggage.  Instead I use &quot;description&quot; (modelling) and &quot;translation&quot;.  I&#039;ve used those for 10 years now and find them as useful now as I did then.</description>
		<content:encoded><![CDATA[<p>Coming late to the party, but one of my favourite topics&#8230;</p>
<p>@rafael: like you, my introduction to OO modelling was through Rumbaugh et al.  At the time, the proposal that &#8220;analysis = understand problem, design = specify solution&#8221; held intuitive appeal.  However I always seemed to get caught up in unfruitful debate: there was always some element that someone maintained was &#8216;analysis&#8217; whilst another was equally adamant it was &#8216;design&#8217;.</p>
<p>And then I was introduced to Shlaer-Mellor.  It bent my mind.  It took a while for the neurons to reconfigure themselves &#8211; and unlearn several years of accepted wisdom.</p>
<p>But the approach brought stunning clarity to the interminable debates of &#8220;analysis vs. design&#8221;, &#8220;problem vs. solution&#8221;, &#8220;high level vs. detail&#8221; and such like.  In SM you&#8217;re either modelling a problem domain (&#8220;analysis&#8221;) or defining the bridges between domains (&#8220;design&#8221;).  </p>
<p>Precision pervades.  So domain models are precise, executable, and thus amenable to highly automated translation.</p>
<p>In fact I&#8217;ve stopped using the terms &#8220;analysis&#8221; and &#8220;design&#8221; because they&#8217;re so loaded with baggage.  Instead I use &#8220;description&#8221; (modelling) and &#8220;translation&#8221;.  I&#8217;ve used those for 10 years now and find them as useful now as I did then.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MDD meets TDD: mapping requirements as model test cases by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/08/29/modeling-requirements-the-pragmatic-way-or-when-xunit-meets-xuml/comment-page-1/#comment-1935</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 30 Aug 2011 15:48:21 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=633#comment-1935</guid>
		<description>Another thing is that no matter the technical architecture of the application, both model and tests will continue to be much simpler to understand than the implementation code, because at the model level we ignore the technical architecture (you won&#039;t see implementation concerns such as database technology, transactions etc). You sure could achieve that with an implementation oriented language (see DDD), but it is not as natural.</description>
		<content:encoded><![CDATA[<p>Another thing is that no matter the technical architecture of the application, both model and tests will continue to be much simpler to understand than the implementation code, because at the model level we ignore the technical architecture (you won&#8217;t see implementation concerns such as database technology, transactions etc). You sure could achieve that with an implementation oriented language (see DDD), but it is not as natural.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MDD meets TDD: mapping requirements as model test cases by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/08/29/modeling-requirements-the-pragmatic-way-or-when-xunit-meets-xuml/comment-page-1/#comment-1934</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 30 Aug 2011 15:29:03 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=633#comment-1934</guid>
		<description>I think it is a relevant question, Damien, and one that I was actually expecting. 

For one, the example model is very simple, so it is not like it requires more features that you won&#039;t find in ordinary programming languages. If it dealt with associations, state transitions, events, things that UML supports natively but need to be emulated in programming languages, that would be more evident.

But after all modeling and programming (in Java or assembly) are just different tones of the same gradient, so if you ignore the nuances (like the intended use cases), it is hard to see any differences between them.</description>
		<content:encoded><![CDATA[<p>I think it is a relevant question, Damien, and one that I was actually expecting. </p>
<p>For one, the example model is very simple, so it is not like it requires more features that you won&#8217;t find in ordinary programming languages. If it dealt with associations, state transitions, events, things that UML supports natively but need to be emulated in programming languages, that would be more evident.</p>
<p>But after all modeling and programming (in Java or assembly) are just different tones of the same gradient, so if you ignore the nuances (like the intended use cases), it is hard to see any differences between them.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MDD meets TDD: mapping requirements as model test cases by Damien Cassou</title>
		<link>http://abstratt.com/blog/2011/08/29/modeling-requirements-the-pragmatic-way-or-when-xunit-meets-xuml/comment-page-1/#comment-1932</link>
		<dc:creator>Damien Cassou</dc:creator>
		<pubDate>Tue, 30 Aug 2011 11:29:13 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=633#comment-1932</guid>
		<description>I&#039;m sorry my question has nothing to do with the topic of the post:

what in your examples is specific to modeling and would be different when programming?

I still don&#039;t understand the difference between modeling and programming.</description>
		<content:encoded><![CDATA[<p>I&#8217;m sorry my question has nothing to do with the topic of the post:</p>
<p>what in your examples is specific to modeling and would be different when programming?</p>
<p>I still don&#8217;t understand the difference between modeling and programming.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on MDD meets TDD: mapping requirements as model test cases by Testing Requirements &#171; Dark Views</title>
		<link>http://abstratt.com/blog/2011/08/29/modeling-requirements-the-pragmatic-way-or-when-xunit-meets-xuml/comment-page-1/#comment-1931</link>
		<dc:creator>Testing Requirements &#171; Dark Views</dc:creator>
		<pubDate>Tue, 30 Aug 2011 07:53:22 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=633#comment-1931</guid>
		<description>[...] rafael.chaves&#8217;s blog post &#8220;Modeling requirements the pragmatic way (or When xUML meets xUnit)&#8221; for a more detailed introduction to the idea. Rate this:  Share this:Like this:LikeBe the [...]</description>
		<content:encoded><![CDATA[<p>[...] rafael.chaves&#8217;s blog post &#8220;Modeling requirements the pragmatic way (or When xUML meets xUnit)&#8221; for a more detailed introduction to the idea. Rate this:  Share this:Like this:LikeBe the [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Testing code generation templates &#8211; brainstorming by Walter Mourão</title>
		<link>http://abstratt.com/blog/2011/08/01/testing-code-generation-templates/comment-page-1/#comment-1916</link>
		<dc:creator>Walter Mourão</dc:creator>
		<pubDate>Thu, 04 Aug 2011 16:30:16 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=619#comment-1916</guid>
		<description>Hi Rafael.
Andromda works in a similar way... the cartridges are tested running a project and comparing the generated files against a set of existing files.

Cheers,

Walter</description>
		<content:encoded><![CDATA[<p>Hi Rafael.<br />
Andromda works in a similar way&#8230; the cartridges are tested running a project and comparing the generated files against a set of existing files.</p>
<p>Cheers,</p>
<p>Walter</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1914</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Wed, 03 Aug 2011 15:46:01 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1914</guid>
		<description>@Stephen

To clarify what I mean by &quot;problem&quot; vs. &quot;solution&quot;:

Problem: a need a customer (expert in the problem domain) has and needs addressed by a new system. 

Solution: a solution to a customer problem to be defined by a &quot;developer&quot; (expert in software).

I do see a lot of value in classifying activities on whether they help elaborate or further refine and clarify the problem statement, or whether they help address the problem with a (computer-based) solution. 

S/M&#039;s (or MBD&#039;s, or xUML) OOA seems to blur the distinction between problem and solution by covering both (deepening problem understanding, and building a partial solution that focuses on the problem space and ignores the computing space), but I still believe that does not change the fact they are two different things.</description>
		<content:encoded><![CDATA[<p>@Stephen</p>
<p>To clarify what I mean by &#8220;problem&#8221; vs. &#8220;solution&#8221;:</p>
<p>Problem: a need a customer (expert in the problem domain) has and needs addressed by a new system. </p>
<p>Solution: a solution to a customer problem to be defined by a &#8220;developer&#8221; (expert in software).</p>
<p>I do see a lot of value in classifying activities on whether they help elaborate or further refine and clarify the problem statement, or whether they help address the problem with a (computer-based) solution. </p>
<p>S/M&#8217;s (or MBD&#8217;s, or xUML) OOA seems to blur the distinction between problem and solution by covering both (deepening problem understanding, and building a partial solution that focuses on the problem space and ignores the computing space), but I still believe that does not change the fact they are two different things.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1913</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Wed, 03 Aug 2011 15:36:17 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1913</guid>
		<description>@Andriy

You may be right for DSL-based modeling, but for Shlaer/Mellor, Lahman&#039;s MBD and Executable UML, I don&#039;t think so (and that is what triggered this post). In those approaches, understanding of the problem (as much as requirements gathering can) precedes OOA and is out of scope as a discrete activity. OOA starts right off the bat with *addressing* (solving) the customer problem - in terms of the problem space, but it is still &quot;solution&quot;. Deepening/refinement of the understanding of the problem happens implicitly as the OOA model is built, much like a designer (or even a developer) that is given incomplete requirements has also to further the understanding of the problem (an issue that executable modeling helps mitigate) in order to complete their work (which is solution centric).</description>
		<content:encoded><![CDATA[<p>@Andriy</p>
<p>You may be right for DSL-based modeling, but for Shlaer/Mellor, Lahman&#8217;s MBD and Executable UML, I don&#8217;t think so (and that is what triggered this post). In those approaches, understanding of the problem (as much as requirements gathering can) precedes OOA and is out of scope as a discrete activity. OOA starts right off the bat with *addressing* (solving) the customer problem &#8211; in terms of the problem space, but it is still &#8220;solution&#8221;. Deepening/refinement of the understanding of the problem happens implicitly as the OOA model is built, much like a designer (or even a developer) that is given incomplete requirements has also to further the understanding of the problem (an issue that executable modeling helps mitigate) in order to complete their work (which is solution centric).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by Andriy Levytskyy</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1912</link>
		<dc:creator>Andriy Levytskyy</dc:creator>
		<pubDate>Wed, 03 Aug 2011 12:20:51 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1912</guid>
		<description>I would say the focus is the problem :) , but I agree with Stephen Mellor that combination of understanding (problem) and proposing (solution) is applied recursively _at each layer in the system_ and each development phase, be it analysis, design, etc..

In case of an executable modeling, there is a difference between problem analysis and conceptual solution. The result of the former is  ontology models and understanding the problem - these are not executable.The former is input for DSLs and model interpreter development. The latter drives a solution model specification in the executable DSL. When another problem needs to be solved in the same domain (hence domain analysis is not needed), first the problem needs to be understood (analysis) and then a conceptual solution modeled.</description>
		<content:encoded><![CDATA[<p>I would say the focus is the problem <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  , but I agree with Stephen Mellor that combination of understanding (problem) and proposing (solution) is applied recursively _at each layer in the system_ and each development phase, be it analysis, design, etc..</p>
<p>In case of an executable modeling, there is a difference between problem analysis and conceptual solution. The result of the former is  ontology models and understanding the problem &#8211; these are not executable.The former is input for DSLs and model interpreter development. The latter drives a solution model specification in the executable DSL. When another problem needs to be solved in the same domain (hence domain analysis is not needed), first the problem needs to be understood (analysis) and then a conceptual solution modeled.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Testing code generation templates &#8211; brainstorming by Kalle Launiala</title>
		<link>http://abstratt.com/blog/2011/08/01/testing-code-generation-templates/comment-page-1/#comment-1910</link>
		<dc:creator>Kalle Launiala</dc:creator>
		<pubDate>Tue, 02 Aug 2011 21:20:13 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=619#comment-1910</guid>
		<description>Hi,

I&#039;ll specify a &quot;alteration of thought&quot; for starters. In case of structured-generator scenarios, the intense refactoring of generators may apply, and you don&#039;t actually care for generating the alike output.

In case of such dynamic generation methodologies, what you care for testing is the final code that is full result of the generated code.

I&#039;m currently in process of demonstrating software definition requirements through design level abstraction.

The funky stuff happens with performance level requirements; I am demonstrating also software-development generic building block &quot;operation&quot; that has parameters and result value (both optional).

Properly generated every software can be made by such blocks. 

Now combined with performance level requirements, some higher-level operations are in &quot;test build&quot; injected with assertions that will watchdog the required performance to actual performance.

This will on the other hand also provide means for recording the actual data that goes through the operation chain.

If your architecture allows and you have decent amount of testing data (that you can simply record from &quot;test recorder injected generated code&quot;) or in some architectures (such as event-sourced architectures) you can simply rerun all the cases through altered generators.


This will of course rely mostly on full-chain tests (in from service layer, assertions on what goes to database), but if you get those tests for &quot;almost free&quot; its a good start.

Now I haven&#039;t looked to your generation model, but I&#039;d assume that as you&#039;re doing heavy generating already, I assume you can do the injection alike as we can.


So sorry for dodging the question to provide alternatie solution, but in addition of testing the generations, if you can also get relatively cheap way of testing the &quot;final application&quot;, it supports the proving that generators work as intended.

Cheers,

Kalle Launiala</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>I&#8217;ll specify a &#8220;alteration of thought&#8221; for starters. In case of structured-generator scenarios, the intense refactoring of generators may apply, and you don&#8217;t actually care for generating the alike output.</p>
<p>In case of such dynamic generation methodologies, what you care for testing is the final code that is full result of the generated code.</p>
<p>I&#8217;m currently in process of demonstrating software definition requirements through design level abstraction.</p>
<p>The funky stuff happens with performance level requirements; I am demonstrating also software-development generic building block &#8220;operation&#8221; that has parameters and result value (both optional).</p>
<p>Properly generated every software can be made by such blocks. </p>
<p>Now combined with performance level requirements, some higher-level operations are in &#8220;test build&#8221; injected with assertions that will watchdog the required performance to actual performance.</p>
<p>This will on the other hand also provide means for recording the actual data that goes through the operation chain.</p>
<p>If your architecture allows and you have decent amount of testing data (that you can simply record from &#8220;test recorder injected generated code&#8221;) or in some architectures (such as event-sourced architectures) you can simply rerun all the cases through altered generators.</p>
<p>This will of course rely mostly on full-chain tests (in from service layer, assertions on what goes to database), but if you get those tests for &#8220;almost free&#8221; its a good start.</p>
<p>Now I haven&#8217;t looked to your generation model, but I&#8217;d assume that as you&#8217;re doing heavy generating already, I assume you can do the injection alike as we can.</p>
<p>So sorry for dodging the question to provide alternatie solution, but in addition of testing the generations, if you can also get relatively cheap way of testing the &#8220;final application&#8221;, it supports the proving that generators work as intended.</p>
<p>Cheers,</p>
<p>Kalle Launiala</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Testing code generation templates &#8211; brainstorming by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/08/01/testing-code-generation-templates/comment-page-1/#comment-1909</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 02 Aug 2011 15:28:07 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=619#comment-1909</guid>
		<description>Thanks, Aaron.</description>
		<content:encoded><![CDATA[<p>Thanks, Aaron.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Testing code generation templates &#8211; brainstorming by Aaron Digulla</title>
		<link>http://abstratt.com/blog/2011/08/01/testing-code-generation-templates/comment-page-1/#comment-1908</link>
		<dc:creator>Aaron Digulla</dc:creator>
		<pubDate>Tue, 02 Aug 2011 13:24:40 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=619#comment-1908</guid>
		<description>Some comments:

I keep the expected results in files in the project. This has two advantages:

1. Those files are usually pretty large (&gt; 10 lines) and keeping that inline in the test code would make the source unreadable.

2. I don&#039;t have to escape the test results making them easier to read in the &quot;default editor&quot;.

The main drawback is that JUnit has no notion of &quot;compare String to file content&quot;. My solution is a readText() method that takes a file name and optionally an encoding (UTF-8 is the default) and then, I use

expectedFile = new File( &quot;expected/....&quot; );
actualFile = new File( &quot;tmp/....&quot; );
String expected = readText( expectedFile );
String actual = readText( actualFile );

if( !expected.equals (actual) ) {
    assertEquals( 
        expectedFile + &quot;\n&quot; + expected,
        actualFile + &quot;\n&quot; + actual
    );
}

This way, I have the file names in the test comparison.

All tests write their output to actualFile so I can open those in a &quot;default editor&quot;, too.

I haven&#039;t yet figured out a way to automatically test with some parameters; that depends on how &quot;suitable&quot; your model elements are for automatic generation in tests.

To solve this for &quot;cumbersome&quot; model elements, I have test data factories which create me suitable complex model mocks.</description>
		<content:encoded><![CDATA[<p>Some comments:</p>
<p>I keep the expected results in files in the project. This has two advantages:</p>
<p>1. Those files are usually pretty large (&gt; 10 lines) and keeping that inline in the test code would make the source unreadable.</p>
<p>2. I don&#8217;t have to escape the test results making them easier to read in the &#8220;default editor&#8221;.</p>
<p>The main drawback is that JUnit has no notion of &#8220;compare String to file content&#8221;. My solution is a readText() method that takes a file name and optionally an encoding (UTF-8 is the default) and then, I use</p>
<p>expectedFile = new File( &#8220;expected/&#8230;.&#8221; );<br />
actualFile = new File( &#8220;tmp/&#8230;.&#8221; );<br />
String expected = readText( expectedFile );<br />
String actual = readText( actualFile );</p>
<p>if( !expected.equals (actual) ) {<br />
    assertEquals(<br />
        expectedFile + &#8220;\n&#8221; + expected,<br />
        actualFile + &#8220;\n&#8221; + actual<br />
    );<br />
}</p>
<p>This way, I have the file names in the test comparison.</p>
<p>All tests write their output to actualFile so I can open those in a &#8220;default editor&#8221;, too.</p>
<p>I haven&#8217;t yet figured out a way to automatically test with some parameters; that depends on how &#8220;suitable&#8221; your model elements are for automatic generation in tests.</p>
<p>To solve this for &#8220;cumbersome&#8221; model elements, I have test data factories which create me suitable complex model mocks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by Vincent Hanniet</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1907</link>
		<dc:creator>Vincent Hanniet</dc:creator>
		<pubDate>Tue, 02 Aug 2011 12:37:54 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1907</guid>
		<description>Hi Rafael,
My comments are a bit too long and maybe a bit off-side. I put them in a post on my blog: http://vhanniet.wordpress.com/2011/08/02/what-is-the-focus-of-analysis-problem-or-solution/
Anyway: very good question and nice comments!</description>
		<content:encoded><![CDATA[<p>Hi Rafael,<br />
My comments are a bit too long and maybe a bit off-side. I put them in a post on my blog: <a href="http://vhanniet.wordpress.com/2011/08/02/what-is-the-focus-of-analysis-problem-or-solution/" rel="nofollow">http://vhanniet.wordpress.com/2011/08/02/what-is-the-focus-of-analysis-problem-or-solution/</a><br />
Anyway: very good question and nice comments!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1905</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Sun, 31 Jul 2011 17:21:47 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1905</guid>
		<description>@Stephen Thanks for coming by and commenting!

I agree there is nothing about your example that would make it not suitable to be handled in the executable model, as it is clearly addressable in terms of the problem space. I often struggle with the concept of non-functional requirements, and I tend to tie them to crosscutting concerns in the computing space, and for requirements like the one you suggested, I tend to come up/look for functional requirements that would serve the same purpose (the NFR being a rationale for them).</description>
		<content:encoded><![CDATA[<p>@Stephen Thanks for coming by and commenting!</p>
<p>I agree there is nothing about your example that would make it not suitable to be handled in the executable model, as it is clearly addressable in terms of the problem space. I often struggle with the concept of non-functional requirements, and I tend to tie them to crosscutting concerns in the computing space, and for requirements like the one you suggested, I tend to come up/look for functional requirements that would serve the same purpose (the NFR being a rationale for them).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by Stephen Mellor</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1904</link>
		<dc:creator>Stephen Mellor</dc:creator>
		<pubDate>Sun, 31 Jul 2011 17:04:28 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1904</guid>
		<description>Rafael,

Model compilers are available for five-figure US$ amounts from (eg) Mentor Graphics, which, compared to half-a-year&#039;s salary is a steal.

OlivaNova has a different model.  They sell translations based on a high-water mark.  That is, if you generate 10000 lines of code, you pay a certain amount.  If you retranslate and produce 12000, you pay for the additional 2000 lines.  Subsequent generations of less than 12000 lines are free.  Until you go over that high-water mark.</description>
		<content:encoded><![CDATA[<p>Rafael,</p>
<p>Model compilers are available for five-figure US$ amounts from (eg) Mentor Graphics, which, compared to half-a-year&#8217;s salary is a steal.</p>
<p>OlivaNova has a different model.  They sell translations based on a high-water mark.  That is, if you generate 10000 lines of code, you pay a certain amount.  If you retranslate and produce 12000, you pay for the additional 2000 lines.  Subsequent generations of less than 12000 lines are free.  Until you go over that high-water mark.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by Stephen Mellor</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1903</link>
		<dc:creator>Stephen Mellor</dc:creator>
		<pubDate>Sun, 31 Jul 2011 16:58:50 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1903</guid>
		<description>My thanks to Ed Seidewitz for pointing me to this blog AND the G+ comments to which I cannot add.

I have learned, through years of teaching, that the hardest task is get a student to &quot;unlearn&quot; certain ideas that inhibit the addition of new ideas to their tree of knowledge.  For example, the title for this essay asserts  that &quot;analysis,&quot; &quot;problem,&quot; and &quot;solution&quot; constitute some branches of the (software engineering) tree of knowledge, as held by the author.

The author does a great job of grafting executable modeling onto the analysis/design/solution/refinement tree, but the very question assumes there is a meaningful (and useful!) answer to the question.  There is not.

Consider this statement in the context of executable modeling: &quot;Of course, other aspects of the solution, concerned with non-functional requirements or somehow tied with the target computing environment, are still left to be addressed during design.&quot;  Note the assumption that there is a meaning of the word &quot;design.&quot;

Now consider, as an example, a credit card company that requires that customers and merchants be billed and paid for each transaction.  I would suggest that one non-functional requirement is that the customer not be inundated by bills (and that the merchant be paid as late as we can get away with :)  Yet I would expect that to be addressed in the (executable) model of the credit-card subject matter with the addition of the concept of billing cycles, not treated as a a &quot;design detail.&quot;

Moreover, I would suggest that no amount of &quot;refinement&quot; will invent a database (or SOA or client-server or ... )  Rather, these implementation technologies are invented separately, and they have their own &quot;performance&quot; &quot;non-functional requirements.&quot;

Consequently, the final, central observation made by the author that &quot;... to answer the question [Is the purpose of an analysis model understanding the problem or proposing a solution?], the answer is both...&quot; is 100% correct, in my, executable modeling, view.

This combination of understanding and proposing is applied recursively _at each layer in the system_.  You can find a complete description in a long-forgotten paper at ooatool.com/docs/SMMethod96.pdf</description>
		<content:encoded><![CDATA[<p>My thanks to Ed Seidewitz for pointing me to this blog AND the G+ comments to which I cannot add.</p>
<p>I have learned, through years of teaching, that the hardest task is get a student to &#8220;unlearn&#8221; certain ideas that inhibit the addition of new ideas to their tree of knowledge.  For example, the title for this essay asserts  that &#8220;analysis,&#8221; &#8220;problem,&#8221; and &#8220;solution&#8221; constitute some branches of the (software engineering) tree of knowledge, as held by the author.</p>
<p>The author does a great job of grafting executable modeling onto the analysis/design/solution/refinement tree, but the very question assumes there is a meaningful (and useful!) answer to the question.  There is not.</p>
<p>Consider this statement in the context of executable modeling: &#8220;Of course, other aspects of the solution, concerned with non-functional requirements or somehow tied with the target computing environment, are still left to be addressed during design.&#8221;  Note the assumption that there is a meaning of the word &#8220;design.&#8221;</p>
<p>Now consider, as an example, a credit card company that requires that customers and merchants be billed and paid for each transaction.  I would suggest that one non-functional requirement is that the customer not be inundated by bills (and that the merchant be paid as late as we can get away with <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Yet I would expect that to be addressed in the (executable) model of the credit-card subject matter with the addition of the concept of billing cycles, not treated as a a &#8220;design detail.&#8221;</p>
<p>Moreover, I would suggest that no amount of &#8220;refinement&#8221; will invent a database (or SOA or client-server or &#8230; )  Rather, these implementation technologies are invented separately, and they have their own &#8220;performance&#8221; &#8220;non-functional requirements.&#8221;</p>
<p>Consequently, the final, central observation made by the author that &#8220;&#8230; to answer the question [Is the purpose of an analysis model understanding the problem or proposing a solution?], the answer is both&#8230;&#8221; is 100% correct, in my, executable modeling, view.</p>
<p>This combination of understanding and proposing is applied recursively _at each layer in the system_.  You can find a complete description in a long-forgotten paper at ooatool.com/docs/SMMethod96.pdf</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1902</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Sun, 31 Jul 2011 16:31:30 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1902</guid>
		<description>@Ed / @Mike - It is a shame, but I have had no exposure to Shlaer/Mellor whatsoever. That is why Lahman&#039;s view was news to me. My OO modeling (self-)education started with Coad/Yourdon OOA/OOD, then Rumbaugh (OMT), then a bit of UML. My interest in Executable UML started when I learned about action semantics in UML 1.5 (back in 2003), and other than the UML specs, all I had got until very recently was Mellor/Balcer&#039;s book. Lahman&#039;s is just my second book on the subject.

@Mike

&quot;To do this you will need a Software Architecture implemented in a Model Compiler and these are not easy and not cheap.&quot;

I&#039;d like to help changing that. I believe for information management systems, the same standard architectures are used by many, so there is a good opportunity for reuse/sharing the cost. Do you think an off-the-shelf model compiler is not feasible? 

On it not being easy, what do you see as the main difficulties?</description>
		<content:encoded><![CDATA[<p>@Ed / @Mike &#8211; It is a shame, but I have had no exposure to Shlaer/Mellor whatsoever. That is why Lahman&#8217;s view was news to me. My OO modeling (self-)education started with Coad/Yourdon OOA/OOD, then Rumbaugh (OMT), then a bit of UML. My interest in Executable UML started when I learned about action semantics in UML 1.5 (back in 2003), and other than the UML specs, all I had got until very recently was Mellor/Balcer&#8217;s book. Lahman&#8217;s is just my second book on the subject.</p>
<p>@Mike</p>
<p>&#8220;To do this you will need a Software Architecture implemented in a Model Compiler and these are not easy and not cheap.&#8221;</p>
<p>I&#8217;d like to help changing that. I believe for information management systems, the same standard architectures are used by many, so there is a good opportunity for reuse/sharing the cost. Do you think an off-the-shelf model compiler is not feasible? </p>
<p>On it not being easy, what do you see as the main difficulties?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by Mike Finn</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1901</link>
		<dc:creator>Mike Finn</dc:creator>
		<pubDate>Sun, 31 Jul 2011 10:43:09 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1901</guid>
		<description>Hi Rafael,

I’m a Shlaer-Mellor believer, although my own particular version is much evolved.

I concur with your view on Lahman’s book.

You say - “That is the first time I have seen this position defended by an expert” which surprises me since a core message of S-M/xUML over the last 25 years is to keep the Design out of the Analysis and Analysis out the design.

I’m happy you used the word Translation instead of Transformation because they are not the same process.

However, don’t get too carried away with it all - “you may get a fully specified solution after locking a customer and a modeler in a boardroom for just a day”.

To do this you will need a Software Architecture implemented in a Model Compiler and these are not easy and not cheap.


Regards,
Mike</description>
		<content:encoded><![CDATA[<p>Hi Rafael,</p>
<p>I’m a Shlaer-Mellor believer, although my own particular version is much evolved.</p>
<p>I concur with your view on Lahman’s book.</p>
<p>You say &#8211; “That is the first time I have seen this position defended by an expert” which surprises me since a core message of S-M/xUML over the last 25 years is to keep the Design out of the Analysis and Analysis out the design.</p>
<p>I’m happy you used the word Translation instead of Transformation because they are not the same process.</p>
<p>However, don’t get too carried away with it all &#8211; “you may get a fully specified solution after locking a customer and a modeler in a boardroom for just a day”.</p>
<p>To do this you will need a Software Architecture implemented in a Model Compiler and these are not easy and not cheap.</p>
<p>Regards,<br />
Mike</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by Ed Seidewitz</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1900</link>
		<dc:creator>Ed Seidewitz</dc:creator>
		<pubDate>Sat, 30 Jul 2011 22:20:20 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1900</guid>
		<description>Actually, I think it was actually earlier when I made the call to Steve -- the OOA book came out in 1988 -- but we didn&#039;t actually meet until &#039;93. Time sure flies! It was definitely a work ahead of its time.</description>
		<content:encoded><![CDATA[<p>Actually, I think it was actually earlier when I made the call to Steve &#8212; the OOA book came out in 1988 &#8212; but we didn&#8217;t actually meet until &#8217;93. Time sure flies! It was definitely a work ahead of its time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What is the focus of analysis: problem or solution? by Ed Seidewitz</title>
		<link>http://abstratt.com/blog/2011/07/30/what-is-the-goal-of-ooa-problem-or-solution/comment-page-1/#comment-1899</link>
		<dc:creator>Ed Seidewitz</dc:creator>
		<pubDate>Sat, 30 Jul 2011 22:17:17 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=595#comment-1899</guid>
		<description>Rafael --

You (and others who may have read my posts elsewhere) know that I am, of course, an executable modeling believer! :-)

As such, let me say that I think you have characterized exceedingly well the concept of &quot;analysis&quot; in executable modeling approaches, and for Shlear-Mellor heritage approaches in particular. For those who are interested, in addition to the books you mention, I would still highly recommend Sally Shlaer and Stephen Mellor&#039;s original books Object-Oriented Systems Analysis and Object Lifecycles. The notation and terminology may be a bit dated, but they are still well worth the read.

(Indeed, I first met Steve Mellor in 1993 because I enjoyed reading Object-Oriented Analysis so much that I tracked down his phone number and gave him a call to tell him how much I liked it!)

-- Ed</description>
		<content:encoded><![CDATA[<p>Rafael &#8211;</p>
<p>You (and others who may have read my posts elsewhere) know that I am, of course, an executable modeling believer! <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>As such, let me say that I think you have characterized exceedingly well the concept of &#8220;analysis&#8221; in executable modeling approaches, and for Shlear-Mellor heritage approaches in particular. For those who are interested, in addition to the books you mention, I would still highly recommend Sally Shlaer and Stephen Mellor&#8217;s original books Object-Oriented Systems Analysis and Object Lifecycles. The notation and terminology may be a bit dated, but they are still well worth the read.</p>
<p>(Indeed, I first met Steve Mellor in 1993 because I enjoyed reading Object-Oriented Analysis so much that I tracked down his phone number and gave him a call to tell him how much I liked it!)</p>
<p>&#8211; Ed</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Ted on a Round-Trip &#8211; butonic.de</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1896</link>
		<dc:creator>Ted on a Round-Trip &#8211; butonic.de</dc:creator>
		<pubDate>Thu, 21 Jul 2011 17:56:02 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1896</guid>
		<description>[...] recently stumbled upon abstratt&#8217;s blog post on Anti-patterns in code generation and could not resist the call for comments. My response got a little bit longer so I am posting it [...]</description>
		<content:encoded><![CDATA[<p>[...] recently stumbled upon abstratt&#8217;s blog post on Anti-patterns in code generation and could not resist the call for comments. My response got a little bit longer so I am posting it [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Upcoming presentation on code generation and executable models @ VIJUG by Vincent Hanniet</title>
		<link>http://abstratt.com/blog/2011/05/21/upcoming-presentation-on-code-generation-and-executable-models-vijug/comment-page-1/#comment-1802</link>
		<dc:creator>Vincent Hanniet</dc:creator>
		<pubDate>Tue, 24 May 2011 11:01:02 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=391#comment-1802</guid>
		<description>Hi Rafael,
In France JUGs, mainly Java developers, usually don&#039;t like code generation. Just as if it spoils their developer skills. I&#039;m curious if it&#039;s the same elsewhere. Please let me know!</description>
		<content:encoded><![CDATA[<p>Hi Rafael,<br />
In France JUGs, mainly Java developers, usually don&#8217;t like code generation. Just as if it spoils their developer skills. I&#8217;m curious if it&#8217;s the same elsewhere. Please let me know!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Help wanted: Converting closure-based iterators into plain loops by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/05/15/converting-closure-based-iterators-into-plain-loops/comment-page-1/#comment-1798</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Mon, 16 May 2011 05:42:00 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=516#comment-1798</guid>
		<description>Thanks for mentioning lambdaj, Bernhard, very interesting, if for a different reason: I want to support similar operations in TextUML, so lambdaj is a good source of inspiration. 

But I wiil still need to be able to generate ordinary iteration code based on for/ifs, i.e. the generated code should run on standard Java without 3rd-party libraries.</description>
		<content:encoded><![CDATA[<p>Thanks for mentioning lambdaj, Bernhard, very interesting, if for a different reason: I want to support similar operations in TextUML, so lambdaj is a good source of inspiration. </p>
<p>But I wiil still need to be able to generate ordinary iteration code based on for/ifs, i.e. the generated code should run on standard Java without 3rd-party libraries.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Help wanted: Converting closure-based iterators into plain loops by Bernhard</title>
		<link>http://abstratt.com/blog/2011/05/15/converting-closure-based-iterators-into-plain-loops/comment-page-1/#comment-1797</link>
		<dc:creator>Bernhard</dc:creator>
		<pubDate>Mon, 16 May 2011 05:15:46 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=516#comment-1797</guid>
		<description>How about this:
http://code.google.com/p/lambdaj/
also this might be interesting:

http://code.google.com/p/infomancers-collections/wiki/Introduction
as it allows you to write Iterable&#039;s very fast by writing it like a producer although Iterable&#039;s data is usually pulled instead of pushed.</description>
		<content:encoded><![CDATA[<p>How about this:<br />
<a href="http://code.google.com/p/lambdaj/" rel="nofollow">http://code.google.com/p/lambdaj/</a><br />
also this might be interesting:</p>
<p><a href="http://code.google.com/p/infomancers-collections/wiki/Introduction" rel="nofollow">http://code.google.com/p/infomancers-collections/wiki/Introduction</a><br />
as it allows you to write Iterable&#8217;s very fast by writing it like a producer although Iterable&#8217;s data is usually pulled instead of pushed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Pitching AlphaSimple by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/18/pitching-alphasimple/comment-page-1/#comment-1795</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Thu, 12 May 2011 06:50:08 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=395#comment-1795</guid>
		<description>Took a look at Bonita Open Solutions. I don&#039;t think they are in the same area. BOS has impact on runtime, AlphaSimple is a development time only tool (prototyping and code generation).</description>
		<content:encoded><![CDATA[<p>Took a look at Bonita Open Solutions. I don&#8217;t think they are in the same area. BOS has impact on runtime, AlphaSimple is a development time only tool (prototyping and code generation).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Pitching AlphaSimple by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/18/pitching-alphasimple/comment-page-1/#comment-1794</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Wed, 11 May 2011 15:28:45 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=395#comment-1794</guid>
		<description>Hi Vincent,

Actually, AlphaSimple generates a generic UI for users to interact with the prototype. Did you &lt;a href=&quot;http://alphasimple.com/project/show/26&quot; rel=&quot;nofollow&quot;&gt;see that&lt;/a&gt;?  (a BA or end user would be given a URI that showed the left pane only)

If you didn&#039;t see it, that would show the pitch slides could give a bit more info on the &quot;how&quot;. I tried intentionally to focus on benefits and not on the technicalities, but I guess I went too far.

I am for using UI mockups, they do have a valid purpose, but I don&#039;t think they are effective in getting the details in the requirements right, nor help significantly with the solution, which are the areas AlphaSimple means to serve.

Re: BonitaSoft, I will need some time to read about it before replying.

Thanks again for your help!</description>
		<content:encoded><![CDATA[<p>Hi Vincent,</p>
<p>Actually, AlphaSimple generates a generic UI for users to interact with the prototype. Did you <a href="http://alphasimple.com/project/show/26" rel="nofollow">see that</a>?  (a BA or end user would be given a URI that showed the left pane only)</p>
<p>If you didn&#8217;t see it, that would show the pitch slides could give a bit more info on the &#8220;how&#8221;. I tried intentionally to focus on benefits and not on the technicalities, but I guess I went too far.</p>
<p>I am for using UI mockups, they do have a valid purpose, but I don&#8217;t think they are effective in getting the details in the requirements right, nor help significantly with the solution, which are the areas AlphaSimple means to serve.</p>
<p>Re: BonitaSoft, I will need some time to read about it before replying.</p>
<p>Thanks again for your help!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Pitching AlphaSimple by Vincent Hanniet</title>
		<link>http://abstratt.com/blog/2011/04/18/pitching-alphasimple/comment-page-1/#comment-1793</link>
		<dc:creator>Vincent Hanniet</dc:creator>
		<pubDate>Wed, 11 May 2011 10:46:55 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=395#comment-1793</guid>
		<description>Hi Rafael,
&quot;User view&quot;:
From a user standpoint I&#039;d like to work on the GUI. That is often the more meaningful way to &quot;touch&quot; the news application. And it&#039;s surprising not to be able to do it as AlphaSimple home page tell &quot;Simply design the domain model... and the user interface is ready to test&quot;. I so understand that the way the GUI is designed is not reachable by users... Hum...
And also, working on UI mockups with users
is a way to work on business needs (at least for the front-end).

How do you compare AlphaSimple to, say, bonitasoft (http://www.bonitasoft.com/)?


My thought for today: Simple business with simple solutions is not that simple! ;D
Sounds good. I will twitt it!
Go on Rafael!</description>
		<content:encoded><![CDATA[<p>Hi Rafael,<br />
&#8220;User view&#8221;:<br />
From a user standpoint I&#8217;d like to work on the GUI. That is often the more meaningful way to &#8220;touch&#8221; the news application. And it&#8217;s surprising not to be able to do it as AlphaSimple home page tell &#8220;Simply design the domain model&#8230; and the user interface is ready to test&#8221;. I so understand that the way the GUI is designed is not reachable by users&#8230; Hum&#8230;<br />
And also, working on UI mockups with users<br />
is a way to work on business needs (at least for the front-end).</p>
<p>How do you compare AlphaSimple to, say, bonitasoft (<a href="http://www.bonitasoft.com/" rel="nofollow">http://www.bonitasoft.com/</a>)?</p>
<p>My thought for today: Simple business with simple solutions is not that simple! ;D<br />
Sounds good. I will twitt it!<br />
Go on Rafael!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Pitching AlphaSimple by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/18/pitching-alphasimple/comment-page-1/#comment-1792</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Wed, 11 May 2011 07:33:06 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=395#comment-1792</guid>
		<description>Hi Vincent, thanks for stopping by and taking the time to comment.

On business domain vs. technical requirements:

AlphaSimple is strongly biased towards business domain requirements, and for a good reason. They are the kind of requirements developers need the most help with BAs and users, they are very communication intensive. Nailing those down as early as possible is key for the project success.

In my view, technical requirements pose less of a challenge. Developers are familiar with them (as they occur repeatedly across domains), and solutions are well understood. Even though AlphaSimple doesn&#039;t help with eliciting or validating technical requirements, it does provide an efficient approach for addressing them (with code generation). I do mention that when presenting it, maybe should have something in that regard on a slide.

On goals of AlphaSimple: note taken, will try to improve that.

On AlphaSimple being a prototyping tool. Yup, that is currently the fact that is currently available/promoted. We are working hard on the side of the equation: building (generating) the application code from a solid model.

&quot;Where is the “user” view?&quot;

Sorry, not sure I understand this question. Are you talking about the user interface of the application? If so, at this point that is out of scope, and users can use tools like Balsamiq for sorting that out.

Thanks again for the feedback, Vincent, really appreciated.</description>
		<content:encoded><![CDATA[<p>Hi Vincent, thanks for stopping by and taking the time to comment.</p>
<p>On business domain vs. technical requirements:</p>
<p>AlphaSimple is strongly biased towards business domain requirements, and for a good reason. They are the kind of requirements developers need the most help with BAs and users, they are very communication intensive. Nailing those down as early as possible is key for the project success.</p>
<p>In my view, technical requirements pose less of a challenge. Developers are familiar with them (as they occur repeatedly across domains), and solutions are well understood. Even though AlphaSimple doesn&#8217;t help with eliciting or validating technical requirements, it does provide an efficient approach for addressing them (with code generation). I do mention that when presenting it, maybe should have something in that regard on a slide.</p>
<p>On goals of AlphaSimple: note taken, will try to improve that.</p>
<p>On AlphaSimple being a prototyping tool. Yup, that is currently the fact that is currently available/promoted. We are working hard on the side of the equation: building (generating) the application code from a solid model.</p>
<p>&#8220;Where is the “user” view?&#8221;</p>
<p>Sorry, not sure I understand this question. Are you talking about the user interface of the application? If so, at this point that is out of scope, and users can use tools like Balsamiq for sorting that out.</p>
<p>Thanks again for the feedback, Vincent, really appreciated.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Pitching AlphaSimple by Vincent Hanniet</title>
		<link>http://abstratt.com/blog/2011/04/18/pitching-alphasimple/comment-page-1/#comment-1788</link>
		<dc:creator>Vincent Hanniet</dc:creator>
		<pubDate>Sat, 07 May 2011 09:12:23 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=395#comment-1788</guid>
		<description>Hi Rafael,
Some comments:
- requirements are not only business requirements. How do you manage technical or enterprise requirements? (e.g. security, performance, urbanization...)? Everything that is not directly related with the business domain... But matters!
- the pitch deck talks about why and goals of AlphaSimple, not about AlphaSimple itself. So at the end we don&#039;t know what it is exactly
- I went on http://alphasimple.com and didn&#039;t find what is in the pitch. Found a technical prototyping tool. Fine but: what if I want to build the real application? Where is the &quot;user&quot; view?

I fully adhere to the mission: to bring model-driven development to the masses. Still to precise what part of the mission AlphaSimple fulfills.</description>
		<content:encoded><![CDATA[<p>Hi Rafael,<br />
Some comments:<br />
- requirements are not only business requirements. How do you manage technical or enterprise requirements? (e.g. security, performance, urbanization&#8230;)? Everything that is not directly related with the business domain&#8230; But matters!<br />
- the pitch deck talks about why and goals of AlphaSimple, not about AlphaSimple itself. So at the end we don&#8217;t know what it is exactly<br />
- I went on <a href="http://alphasimple.com" rel="nofollow">http://alphasimple.com</a> and didn&#8217;t find what is in the pitch. Found a technical prototyping tool. Fine but: what if I want to build the real application? Where is the &#8220;user&#8221; view?</p>
<p>I fully adhere to the mission: to bring model-driven development to the masses. Still to precise what part of the mission AlphaSimple fulfills.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Model-driven Development with Executable UML models by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/02/06/model-driven-development-with-executable-uml-models/comment-page-1/#comment-1781</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Wed, 27 Apr 2011 15:03:43 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=211#comment-1781</guid>
		<description>@Damien I&#039;d like to hear about Andreas&#039; experience as well, but I will pitch in on this one.

Have you read the &lt;a href=&quot;http://www.omg.org/mda/mda_files/MDA_Guide_Version1-0.pdf&quot; rel=&quot;nofollow&quot;&gt;MDA Guide&lt;/a&gt;? It&#039;s short, and it is oldish, but still is my #1 reference for MDD:

The MDA Guide talks about &quot;markings&quot; and &quot;additional information&quot;, which are things external to the PIM that allow driving transformations. 

Speaking more concretely, imagine that a tool that automatically renders diagrams (views) from models. This view will imply choices on what is included and what is left out. Imagine that those choices are configurable. For instance:

- based on the kinds of elements: only classes and relationships, or include attributes, but not operations, or only state machines. 

- based on stereotypes: only classes marked as &lt;&lt;Entity&gt;&gt; (and their related &lt;&lt;ValueObject&gt;&gt;), or only elements from packages marked as &lt;&lt;Business&gt;&gt;;

- based on the PIM: only elements of packages named &quot;*.business.*&quot;, or something very particular such as everything directly related to the &quot;Order&quot; class.

IOW, one can define views that are useful for a particular viewpoint and yet don&#039;t have to be tightly coupled with the model at hand, so they will continue to be valid as the model evolves.

Similar strategies can be applied when generating code (the &quot;views&quot; apply architectural patterns in that case, driving code generation).</description>
		<content:encoded><![CDATA[<p>@Damien I&#8217;d like to hear about Andreas&#8217; experience as well, but I will pitch in on this one.</p>
<p>Have you read the <a href="http://www.omg.org/mda/mda_files/MDA_Guide_Version1-0.pdf" rel="nofollow">MDA Guide</a>? It&#8217;s short, and it is oldish, but still is my #1 reference for MDD:</p>
<p>The MDA Guide talks about &#8220;markings&#8221; and &#8220;additional information&#8221;, which are things external to the PIM that allow driving transformations. </p>
<p>Speaking more concretely, imagine that a tool that automatically renders diagrams (views) from models. This view will imply choices on what is included and what is left out. Imagine that those choices are configurable. For instance:</p>
<p>- based on the kinds of elements: only classes and relationships, or include attributes, but not operations, or only state machines. </p>
<p>- based on stereotypes: only classes marked as &lt;&lt;Entity&gt;&gt; (and their related &lt;&lt;ValueObject&gt;&gt;), or only elements from packages marked as &lt;&lt;Business&gt;&gt;;</p>
<p>- based on the PIM: only elements of packages named &#8220;*.business.*&#8221;, or something very particular such as everything directly related to the &#8220;Order&#8221; class.</p>
<p>IOW, one can define views that are useful for a particular viewpoint and yet don&#8217;t have to be tightly coupled with the model at hand, so they will continue to be valid as the model evolves.</p>
<p>Similar strategies can be applied when generating code (the &#8220;views&#8221; apply architectural patterns in that case, driving code generation).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Model-driven Development with Executable UML models by Damien Cassou</title>
		<link>http://abstratt.com/blog/2011/02/06/model-driven-development-with-executable-uml-models/comment-page-1/#comment-1780</link>
		<dc:creator>Damien Cassou</dc:creator>
		<pubDate>Wed, 27 Apr 2011 06:32:09 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=211#comment-1780</guid>
		<description>@Andreas: I don&#039;t really see how this could work. You would have one view for each different stackeholder&#039;s role? Who takes care of maintaining these views? Do you have real case studies in which this is done?</description>
		<content:encoded><![CDATA[<p>@Andreas: I don&#8217;t really see how this could work. You would have one view for each different stackeholder&#8217;s role? Who takes care of maintaining these views? Do you have real case studies in which this is done?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Pesquisa sobre modelagem e geração de código by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/10/pesquisa-sobre-modelagem-e-geracao-de-codigo/comment-page-1/#comment-1777</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 26 Apr 2011 09:14:36 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=435#comment-1777</guid>
		<description>Thanks, RO, I am planning to do it at some point. Cheers,

Rafael</description>
		<content:encoded><![CDATA[<p>Thanks, RO, I am planning to do it at some point. Cheers,</p>
<p>Rafael</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Model-driven Development with Executable UML models by Andreas Graf</title>
		<link>http://abstratt.com/blog/2011/02/06/model-driven-development-with-executable-uml-models/comment-page-1/#comment-1776</link>
		<dc:creator>Andreas Graf</dc:creator>
		<pubDate>Tue, 26 Apr 2011 05:32:43 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=211#comment-1776</guid>
		<description>Re: Multiple documentations. Not really a problem, this is one of the reasons we are using models: Different views on the model. Either by direct tool support or m2m transformation.</description>
		<content:encoded><![CDATA[<p>Re: Multiple documentations. Not really a problem, this is one of the reasons we are using models: Different views on the model. Either by direct tool support or m2m transformation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Pesquisa sobre modelagem e geração de código by RO</title>
		<link>http://abstratt.com/blog/2011/04/10/pesquisa-sobre-modelagem-e-geracao-de-codigo/comment-page-1/#comment-1775</link>
		<dc:creator>RO</dc:creator>
		<pubDate>Tue, 26 Apr 2011 01:01:41 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=435#comment-1775</guid>
		<description>I hope you&#039;ll publish a translation of this document. It&#039;s very interesting!

Since I&#039;m fluent in Spanish (&quot;portugues mal falado&quot;) ;-) I was able to read it fairly easily, and confirmed that Chrome&#039;s translation was pretty good. Unfortunately, it can&#039;t touch the graphs (since they&#039;re images), and that&#039;s where much of the valuable info is found.</description>
		<content:encoded><![CDATA[<p>I hope you&#8217;ll publish a translation of this document. It&#8217;s very interesting!</p>
<p>Since I&#8217;m fluent in Spanish (&#8220;portugues mal falado&#8221;) <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  I was able to read it fairly easily, and confirmed that Chrome&#8217;s translation was pretty good. Unfortunately, it can&#8217;t touch the graphs (since they&#8217;re images), and that&#8217;s where much of the valuable info is found.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by Andreas Leue</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1768</link>
		<dc:creator>Andreas Leue</dc:creator>
		<pubDate>Tue, 12 Apr 2011 13:44:46 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1768</guid>
		<description>Hm. That&#039;s actually a good question.

At present I have no scientific proven answer, only observations and educated guesses.

Our experience roots in insurance, banking, logistics and trading business (inventory management). In the projects I&#039;ve seen, the vast majority of operations is &quot;data shuffling&quot;, &quot;CRUD++&quot;, i.e. really just creating, searching, rearranging, combining, filtering, aggregating data.

The associated operations are (more or less) straightforward, and thereby it&#039;s not necessary to mention them explicitly in the PIM (it&#039;s a quite different story in the PSM). There (in the PIM) the behaviour is implicitly assumed to belong to stereotypes or characterized by properties, so there&#039; simply no need to mention them explicitly. Even more, this behaviour cannot be captured simply as methods at the model class, since this model class maps to 10 or 20 associated technical classes, and the methods do belong there, not to the PIM-class. E.g. &quot;create&quot; is not a method at the PIM class, it is a method at the factory class in the PSM or below. The PIM will only contain method &quot;snippets&quot;, like validation formulas etc.

I&#039;d say (just a guess) about 78% of behaviour can be captured that way (or simply derived from strutural properties, like a tight bidirectional 1:+ composition association).

The rest falls into basically two categories. The first category is &quot;advanced data shuffling&quot;. By that, I mean things like multistep-transactions (&quot;wizards&quot;), where things are selected, filtered, temporarily stored, rearranged etc. plus a bit calculations. But not really much. Concerning this category, our system is under development. We&#039;re constantly *decreasing* it, looking for ways to better express it, since it &quot;feels wrong&quot; to describe it programmatically. Or at least factor out technical aspects. Like exception handling, since yes, things can go wrong, but business users don&#039;t throw exceptions - only interpreters and VMs do that. So in the PIM I just want to express assertions, conditions, invariants. The model interpreter/compiler has to take care of what to do if these fail (and there are many possibilites, after all).

Therefore, yes, at present a procedural language is still needed, but I wouldn&#039;t seek to improve it, but to eliminate it instead. And yes, I wouldn&#039;t mind to have a good and general action language in UML, but I wouldn&#039;t say it too loud, since it opens the floodgates of coding, and by doing that we will never reach the &quot;next generation language&quot;.

Finally, in all projects there&#039;s a third category which will always require programming. These are core algorithms, like a simulation or optimisation or like financial math. But this category is not a problem to me, I don&#039;t see the need to model it in UML; probably the data it operates on, but not the algorihm itself.</description>
		<content:encoded><![CDATA[<p>Hm. That&#8217;s actually a good question.</p>
<p>At present I have no scientific proven answer, only observations and educated guesses.</p>
<p>Our experience roots in insurance, banking, logistics and trading business (inventory management). In the projects I&#8217;ve seen, the vast majority of operations is &#8220;data shuffling&#8221;, &#8220;CRUD++&#8221;, i.e. really just creating, searching, rearranging, combining, filtering, aggregating data.</p>
<p>The associated operations are (more or less) straightforward, and thereby it&#8217;s not necessary to mention them explicitly in the PIM (it&#8217;s a quite different story in the PSM). There (in the PIM) the behaviour is implicitly assumed to belong to stereotypes or characterized by properties, so there&#8217; simply no need to mention them explicitly. Even more, this behaviour cannot be captured simply as methods at the model class, since this model class maps to 10 or 20 associated technical classes, and the methods do belong there, not to the PIM-class. E.g. &#8220;create&#8221; is not a method at the PIM class, it is a method at the factory class in the PSM or below. The PIM will only contain method &#8220;snippets&#8221;, like validation formulas etc.</p>
<p>I&#8217;d say (just a guess) about 78% of behaviour can be captured that way (or simply derived from strutural properties, like a tight bidirectional 1:+ composition association).</p>
<p>The rest falls into basically two categories. The first category is &#8220;advanced data shuffling&#8221;. By that, I mean things like multistep-transactions (&#8220;wizards&#8221;), where things are selected, filtered, temporarily stored, rearranged etc. plus a bit calculations. But not really much. Concerning this category, our system is under development. We&#8217;re constantly *decreasing* it, looking for ways to better express it, since it &#8220;feels wrong&#8221; to describe it programmatically. Or at least factor out technical aspects. Like exception handling, since yes, things can go wrong, but business users don&#8217;t throw exceptions &#8211; only interpreters and VMs do that. So in the PIM I just want to express assertions, conditions, invariants. The model interpreter/compiler has to take care of what to do if these fail (and there are many possibilites, after all).</p>
<p>Therefore, yes, at present a procedural language is still needed, but I wouldn&#8217;t seek to improve it, but to eliminate it instead. And yes, I wouldn&#8217;t mind to have a good and general action language in UML, but I wouldn&#8217;t say it too loud, since it opens the floodgates of coding, and by doing that we will never reach the &#8220;next generation language&#8221;.</p>
<p>Finally, in all projects there&#8217;s a third category which will always require programming. These are core algorithms, like a simulation or optimisation or like financial math. But this category is not a problem to me, I don&#8217;t see the need to model it in UML; probably the data it operates on, but not the algorihm itself.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1767</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Mon, 11 Apr 2011 23:24:47 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1767</guid>
		<description>Replying to myself - I guess pragmatically, I can see that the structural aspects are more easily digested by a non-technical audience than the behavioral elements.</description>
		<content:encoded><![CDATA[<p>Replying to myself &#8211; I guess pragmatically, I can see that the structural aspects are more easily digested by a non-technical audience than the behavioral elements.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1766</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Mon, 11 Apr 2011 18:07:27 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1766</guid>
		<description>I see your point now. But isn&#039;t that true for classes, associations, operations, attributes etc? I&#039;d say that if those are kosher, why aren&#039;t the actions that manipulate them so?</description>
		<content:encoded><![CDATA[<p>I see your point now. But isn&#8217;t that true for classes, associations, operations, attributes etc? I&#8217;d say that if those are kosher, why aren&#8217;t the actions that manipulate them so?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by Andreas Leue</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1765</link>
		<dc:creator>Andreas Leue</dc:creator>
		<pubDate>Mon, 11 Apr 2011 16:22:16 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1765</guid>
		<description>It can - but I wouldn&#039;t put one into my PIM. A CreateObject method does not belong to the domain of a business domain expert. It is already &quot;technical&quot; in a sense. A business domain expert does not &quot;call&quot; methods. When using the system, he enters data, presses buttons. When specifying his needs, all he wants to say is &quot;I&#039;d like to have a possibility to create xy, enter data a, b, and c (plus, needless to say, press a button)&quot;. Therefore in a PIM it&#039;s sufficient to say something like: this business domain class shall be creatable (and I&#039;d like to pick from your catalogue of interaction themes the fashionable premium class varaint &quot;Sunrise in July&quot;).</description>
		<content:encoded><![CDATA[<p>It can &#8211; but I wouldn&#8217;t put one into my PIM. A CreateObject method does not belong to the domain of a business domain expert. It is already &#8220;technical&#8221; in a sense. A business domain expert does not &#8220;call&#8221; methods. When using the system, he enters data, presses buttons. When specifying his needs, all he wants to say is &#8220;I&#8217;d like to have a possibility to create xy, enter data a, b, and c (plus, needless to say, press a button)&#8221;. Therefore in a PIM it&#8217;s sufficient to say something like: this business domain class shall be creatable (and I&#8217;d like to pick from your catalogue of interaction themes the fashionable premium class varaint &#8220;Sunrise in July&#8221;).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1764</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Mon, 11 Apr 2011 15:14:12 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1764</guid>
		<description>@Andreas&#039;previous comment:

I am not sure why a CreateObject action cannot result in code that does everything you mentioned in your example. 

Of course, not all CreateObjects represent creating objects in the database, but there are ways of identifying that (stereotypes, conventions, etc).</description>
		<content:encoded><![CDATA[<p>@Andreas&#8217;previous comment:</p>
<p>I am not sure why a CreateObject action cannot result in code that does everything you mentioned in your example. </p>
<p>Of course, not all CreateObjects represent creating objects in the database, but there are ways of identifying that (stereotypes, conventions, etc).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1763</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Mon, 11 Apr 2011 15:09:16 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1763</guid>
		<description>@Andreas good points on what platform independence means in this context.

@Damien I tried to say something similar here in the past: http://abstratt.com/blog/2007/05/22/platform-independence-in-mda/</description>
		<content:encoded><![CDATA[<p>@Andreas good points on what platform independence means in this context.</p>
<p>@Damien I tried to say something similar here in the past: <a href="http://abstratt.com/blog/2007/05/22/platform-independence-in-mda/" rel="nofollow">http://abstratt.com/blog/2007/05/22/platform-independence-in-mda/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by Andreas Leue</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1762</link>
		<dc:creator>Andreas Leue</dc:creator>
		<pubDate>Mon, 11 Apr 2011 14:27:33 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1762</guid>
		<description>Martin Fowler writes:
&gt; But the platform independent argument has no foundation.

Well, in this case, I disagree with Martin. His observation is only true with respect to a certain flavour of MDA. Admittedly, this flavour is widespread: use your model as a 1:1 replacement for  current 3GL programming.

And the argument is also true if you limit your scope to just the &quot;action semantics language&quot;, see my comment above.

The &quot;Hello world&quot; argument is very telling: Hello-world-programs are usually meant to explore the possibilities of the IO-library of a programming language, but the whole concept of an IO-library is misplaced in PIMs.

To point this out: PIM is not about IO-librabry-independence, but about IO-library-agnostics!

Real PIMs (tm) ;-) are on a different abstraction level. They are not about referring to different technical platforms in a common fashion, they are just not about technical platforms at all. Proof: ask any business domain expert about IO libraries. q.e.d. This shows: it has to (and is) possible to describe systems without referring to IO libraries.</description>
		<content:encoded><![CDATA[<p>Martin Fowler writes:<br />
&gt; But the platform independent argument has no foundation.</p>
<p>Well, in this case, I disagree with Martin. His observation is only true with respect to a certain flavour of MDA. Admittedly, this flavour is widespread: use your model as a 1:1 replacement for  current 3GL programming.</p>
<p>And the argument is also true if you limit your scope to just the &#8220;action semantics language&#8221;, see my comment above.</p>
<p>The &#8220;Hello world&#8221; argument is very telling: Hello-world-programs are usually meant to explore the possibilities of the IO-library of a programming language, but the whole concept of an IO-library is misplaced in PIMs.</p>
<p>To point this out: PIM is not about IO-librabry-independence, but about IO-library-agnostics!</p>
<p>Real PIMs &#8482; <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  are on a different abstraction level. They are not about referring to different technical platforms in a common fashion, they are just not about technical platforms at all. Proof: ask any business domain expert about IO libraries. q.e.d. This shows: it has to (and is) possible to describe systems without referring to IO libraries.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by Damien Cassou</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1760</link>
		<dc:creator>Damien Cassou</dc:creator>
		<pubDate>Mon, 11 Apr 2011 12:40:32 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1760</guid>
		<description>@rafael Thank you for your explanations, this makes things clearer to me. Martin Fowler also talked about platform independence of MDA: http://martinfowler.com/bliki/PlatformIndependentMalapropism.html.</description>
		<content:encoded><![CDATA[<p>@rafael Thank you for your explanations, this makes things clearer to me. Martin Fowler also talked about platform independence of MDA: <a href="http://martinfowler.com/bliki/PlatformIndependentMalapropism.html" rel="nofollow">http://martinfowler.com/bliki/PlatformIndependentMalapropism.html</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by Andreas Leue</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1759</link>
		<dc:creator>Andreas Leue</dc:creator>
		<pubDate>Mon, 11 Apr 2011 10:37:55 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1759</guid>
		<description>&gt; &gt; “in a PIM this is just not the right abstraction”
&gt; Could you illustrate that with an example?

I can try, but it&#039;s in general hard to prove a non-existence statement with an example, so maybe we can turn the tables and you give me examples of such uses, and then I try to suggest modelling alternatives? I&#039;d really have fun to do this.

Nevertheless, here&#039;s one example. &quot;Creating an object&quot; - where and when would you want to do this? A typical situation might be: the user wants to create an instance. We solved this as follows. First, there&#039;s a socalled &quot;CreateTransaction&quot;. This is a standard (yet replaceable) building block which is parametrized by a factory. It manages the presentation of the factory, the validation, the db transaction and the presentation of the result, as well as sending various notifications. Sure, the implementation of the operations here requires code. But this CreateTransaction is not part of a user&#039;s business domain model, it is part of a general interaction library instead. So, the second part is in the business domain model just to specify the factory, and to specify that you want this factory to be assembled with the CreateTransaction - which is both not expressed as code.

&gt; An action language can/should be fully platform independent.

@should: yes, sure
@can: I&#039;m a bit skeptic if this does not end up like Java: starting as THE UNIVERSAL language, being finally complicated and having competitors (iAlf, Alf#, ...).

But I wouldn&#039;t mind to have such a language, my point is more the abstraction level issue.</description>
		<content:encoded><![CDATA[<p>&gt; &gt; “in a PIM this is just not the right abstraction”<br />
&gt; Could you illustrate that with an example?</p>
<p>I can try, but it&#8217;s in general hard to prove a non-existence statement with an example, so maybe we can turn the tables and you give me examples of such uses, and then I try to suggest modelling alternatives? I&#8217;d really have fun to do this.</p>
<p>Nevertheless, here&#8217;s one example. &#8220;Creating an object&#8221; &#8211; where and when would you want to do this? A typical situation might be: the user wants to create an instance. We solved this as follows. First, there&#8217;s a socalled &#8220;CreateTransaction&#8221;. This is a standard (yet replaceable) building block which is parametrized by a factory. It manages the presentation of the factory, the validation, the db transaction and the presentation of the result, as well as sending various notifications. Sure, the implementation of the operations here requires code. But this CreateTransaction is not part of a user&#8217;s business domain model, it is part of a general interaction library instead. So, the second part is in the business domain model just to specify the factory, and to specify that you want this factory to be assembled with the CreateTransaction &#8211; which is both not expressed as code.</p>
<p>&gt; An action language can/should be fully platform independent.</p>
<p>@should: yes, sure<br />
@can: I&#8217;m a bit skeptic if this does not end up like Java: starting as THE UNIVERSAL language, being finally complicated and having competitors (iAlf, Alf#, &#8230;).</p>
<p>But I wouldn&#8217;t mind to have such a language, my point is more the abstraction level issue.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1758</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Mon, 11 Apr 2011 07:13:16 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1758</guid>
		<description>@Damien 

By technology, I mean the different instances of OS/hardware/runtimes/frameworks/implementation languages/databases/middleware we have presently today and that do more or less the same thing in their classes, their predecessors 5-10-20 years ago, and their sucessors 5-10-20 years from now.

Why should we accept that a solution for a domain that is not technology centric (as most are not) become obsolete just because the technology it was built on is being replaced for newer ones? Or why should we not be able to move the solution across competing technologies (Java-&gt;C#, Oracle-&gt;MongoDB). Or why should we have to do a lot of work when we want to make an architectural/design improvement (even if the technology stack was not altered). Or why should the technology I want the system to run on determine how developers build the solution, or vice versa?

Re: code vs. model, it is not really clear cut, so it is hard to draw the difference between them based on isolated aspects. Overall, here are traits that IMO make something more a modeling language than an ordinary programming language:


	the level of detail required to specify a solution is less than an ordinary implementation language typically requires
	more conducive to specifying the &lt;em&gt;what&lt;/em&gt; instead of the &lt;em&gt;how&lt;/em&gt;
	having transformation to other (programming) languages as a primary use case (sure, it is technically possible to execute a model natively, and one could always write a tool that translates between any language A and B)
	supports the concepts from the domain directly (if a DSL) or, if a GPL, supports high level conceptual modeling without requiring language extensions (state machines, associations, signals)

Those are the signals I could come up with now. There are probably more.</description>
		<content:encoded><![CDATA[<p>@Damien </p>
<p>By technology, I mean the different instances of OS/hardware/runtimes/frameworks/implementation languages/databases/middleware we have presently today and that do more or less the same thing in their classes, their predecessors 5-10-20 years ago, and their sucessors 5-10-20 years from now.</p>
<p>Why should we accept that a solution for a domain that is not technology centric (as most are not) become obsolete just because the technology it was built on is being replaced for newer ones? Or why should we not be able to move the solution across competing technologies (Java-&gt;C#, Oracle-&gt;MongoDB). Or why should we have to do a lot of work when we want to make an architectural/design improvement (even if the technology stack was not altered). Or why should the technology I want the system to run on determine how developers build the solution, or vice versa?</p>
<p>Re: code vs. model, it is not really clear cut, so it is hard to draw the difference between them based on isolated aspects. Overall, here are traits that IMO make something more a modeling language than an ordinary programming language:</p>
<p>	the level of detail required to specify a solution is less than an ordinary implementation language typically requires<br />
	more conducive to specifying the <em>what</em> instead of the <em>how</em><br />
	having transformation to other (programming) languages as a primary use case (sure, it is technically possible to execute a model natively, and one could always write a tool that translates between any language A and B)<br />
	supports the concepts from the domain directly (if a DSL) or, if a GPL, supports high level conceptual modeling without requiring language extensions (state machines, associations, signals)</p>
<p>Those are the signals I could come up with now. There are probably more.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by Damien Cassou</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1757</link>
		<dc:creator>Damien Cassou</dc:creator>
		<pubDate>Sun, 10 Apr 2011 08:54:43 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1757</guid>
		<description>@rafael, you are right, there are some patterns that could be better dealt with at a higher-level than code. However, this is not always the case. That&#039;s why we chose this hand-written approach. Now, nothing prevents our users from using their own models to describe parts of their code and generate this missing code. For example, we experimented with Esper (http://esper.codehaus.org/) and provided a small DSL to let users describe event processing with this SQL-like DSL and get generated code automatically.

However, I&#039;m still not confident with the distinction between model and code. You advertise that a model is not necessarily graphical. You also say that modeling allows to be technology agnostic. What do you exactly mean by technology? If I use a programming language with a VM, I&#039;m already platform agnostic (e.g., my Java code can run on Linux, Windows, and MacOS). Is it important that my project can run either on Java and C# (if it is what you mean by technology)?</description>
		<content:encoded><![CDATA[<p>@rafael, you are right, there are some patterns that could be better dealt with at a higher-level than code. However, this is not always the case. That&#8217;s why we chose this hand-written approach. Now, nothing prevents our users from using their own models to describe parts of their code and generate this missing code. For example, we experimented with Esper (<a href="http://esper.codehaus.org/" rel="nofollow">http://esper.codehaus.org/</a>) and provided a small DSL to let users describe event processing with this SQL-like DSL and get generated code automatically.</p>
<p>However, I&#8217;m still not confident with the distinction between model and code. You advertise that a model is not necessarily graphical. You also say that modeling allows to be technology agnostic. What do you exactly mean by technology? If I use a programming language with a VM, I&#8217;m already platform agnostic (e.g., my Java code can run on Linux, Windows, and MacOS). Is it important that my project can run either on Java and C# (if it is what you mean by technology)?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1755</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Sat, 09 Apr 2011 17:19:38 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1755</guid>
		<description>@Andreas Interesting points. But I disagree with &quot;in a PIM this is just not the right abstraction&quot;. Could you illustrate that with an example?

An action language can (and should) be fully platform independent. I accept that the OO paradigm (even if at a higher level of abstraction) won&#039;t always cut it, and a DSL will be a better solution. But I think that depends on the context (domain/application/users).</description>
		<content:encoded><![CDATA[<p>@Andreas Interesting points. But I disagree with &#8220;in a PIM this is just not the right abstraction&#8221;. Could you illustrate that with an example?</p>
<p>An action language can (and should) be fully platform independent. I accept that the OO paradigm (even if at a higher level of abstraction) won&#8217;t always cut it, and a DSL will be a better solution. But I think that depends on the context (domain/application/users).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1754</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Sat, 09 Apr 2011 17:08:25 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1754</guid>
		<description>@Damien

The approach of executable modeling does not force you to model everything. You can still combine generated code with hand-written code. 

Also, whether to model or to code is not a clear cut decision. If the level of abstraction your domain requires is best provided by an ordinary programming language (and their tools), and there is no interest in having the solution be implementation technology agnostic, there is no reason for modeling. If that is the case, by all means solve it in code. 

Sometimes that is not very obvious to assess though. People will confuse &quot;best suited for&quot; with &quot;can do&quot; (all implementation languages &lt;em&gt;can do&lt;/em&gt; anything a modeling language would be &lt;em&gt;best suited&lt;/em&gt; for) without realizing the consequences.

Not saying that is your case, but it is a typical reason why executable modeling will be dismissed. For your case, you need to look at several instances of the hand-written code that is extending generated code and ask yourself if there isn&#039;t a pattern and if concerns the code deals with couldn&#039;t be better dealt with at the model level.</description>
		<content:encoded><![CDATA[<p>@Damien</p>
<p>The approach of executable modeling does not force you to model everything. You can still combine generated code with hand-written code. </p>
<p>Also, whether to model or to code is not a clear cut decision. If the level of abstraction your domain requires is best provided by an ordinary programming language (and their tools), and there is no interest in having the solution be implementation technology agnostic, there is no reason for modeling. If that is the case, by all means solve it in code. </p>
<p>Sometimes that is not very obvious to assess though. People will confuse &#8220;best suited for&#8221; with &#8220;can do&#8221; (all implementation languages <em>can do</em> anything a modeling language would be <em>best suited</em> for) without realizing the consequences.</p>
<p>Not saying that is your case, but it is a typical reason why executable modeling will be dismissed. For your case, you need to look at several instances of the hand-written code that is extending generated code and ask yourself if there isn&#8217;t a pattern and if concerns the code deals with couldn&#8217;t be better dealt with at the model level.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1753</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Sat, 09 Apr 2011 16:49:00 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1753</guid>
		<description>@UML Guru UML is a language, but which admits multiple notations. But most people will think of the language in the graphical notation. Much of the value of UML is not in the notation, but in the semantics and abstract syntax.

And UML is not only a language for people. It is a language for tools as well. And different people and use cases will have different needs. The clear separation between concrete syntax (the notation) and abstract syntax and semantics is intended to allow sharing much of the value of the language while providing the best notation for the use case at hand.</description>
		<content:encoded><![CDATA[<p>@UML Guru UML is a language, but which admits multiple notations. But most people will think of the language in the graphical notation. Much of the value of UML is not in the notation, but in the semantics and abstract syntax.</p>
<p>And UML is not only a language for people. It is a language for tools as well. And different people and use cases will have different needs. The clear separation between concrete syntax (the notation) and abstract syntax and semantics is intended to allow sharing much of the value of the language while providing the best notation for the use case at hand.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1752</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Sat, 09 Apr 2011 16:42:39 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1752</guid>
		<description>&gt; UML is data-centric.

@Daniel care to explain, maybe with a concrete example? 

You can specify behaviour in UML. And in the case of generated behaviour, you can drive variation based on the model.</description>
		<content:encoded><![CDATA[<p>&gt; UML is data-centric.</p>
<p>@Daniel care to explain, maybe with a concrete example? </p>
<p>You can specify behaviour in UML. And in the case of generated behaviour, you can drive variation based on the model.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Not yet another language by Productivity of UML &#124; abstratt&#039;s blog</title>
		<link>http://abstratt.com/blog/2008/08/06/not-yet-another-language/comment-page-1/#comment-1748</link>
		<dc:creator>Productivity of UML &#124; abstratt&#039;s blog</dc:creator>
		<pubDate>Fri, 08 Apr 2011 19:10:41 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=108#comment-1748</guid>
		<description>[...] and behavioral modeling (since 2002!). Action languages are not (or don&#8217;t have to be) &#8220;other languages&#8221; &#8211; but just a textual notation on top of the existing abstract syntax and semantics. [...]</description>
		<content:encoded><![CDATA[<p>[...] and behavioral modeling (since 2002!). Action languages are not (or don&#8217;t have to be) &#8220;other languages&#8221; &#8211; but just a textual notation on top of the existing abstract syntax and semantics. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Aaron Digulla</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1747</link>
		<dc:creator>Aaron Digulla</dc:creator>
		<pubDate>Fri, 08 Apr 2011 12:59:51 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1747</guid>
		<description>What he needs in his code generator is a merge tool that works two ways. He needs to be able to say &quot;take the generated class and make it extend class X&quot; or he needs to be able to say &quot;extend generated class Y as Y2 and make sure everyone now uses &#039;new Y2&#039; where we had &#039;new Y&#039;&quot;

But that leads to a new problem: For many test cases, you&#039;ll need to specify different type hierarchies. So you&#039;ll end up with several similar copies of all generated classes.

The problem is that many OO languages don&#039;t perform well when you start to mess with the inheritance. Languages like Python allow you to modify the behavior of an instance after is has been created (by adding or removing methods and fields from it).

In Java, you need workarounds. It&#039;s a limitation of the language, really (or rather of the slow CPUs of the past). Today, it might be possible to rebuild type inheritance using proxies and interfaces and large proxy caches at runtime. The idea here is that you wrap an instance with a proxy at runtime (for example with byte code instrumentation) and then save it in a cache, so when you need the same proxy type again, you can ask for the existing proxy instance.

Confused? Say I need to add the method foo() to an existing instance. The solution is to create an interface with foo() and then a wrapper which wraps an existing instance with an implementation of the interface. To be able to have state in foo(), we need to cache the wrapper.

I&#039;m not really a fan of tools that &quot;know&quot; which lines a user has changed because that can break. And if it breaks, you&#039;re in deep trouble. Something explicit is much better. It also allows you to undo changes - with a tool, you not only need to restore the original code but you also need to tell the tool to forget about the change you just made. And you better not make a mistake or ugly things will happen.

In the end, it all boils down to being unable to build software from smaller blocks than classes. If we could say &quot;take this instance and replace the method foo() with that one&quot;, such things wouldn&#039;t be an issue at all.</description>
		<content:encoded><![CDATA[<p>What he needs in his code generator is a merge tool that works two ways. He needs to be able to say &#8220;take the generated class and make it extend class X&#8221; or he needs to be able to say &#8220;extend generated class Y as Y2 and make sure everyone now uses &#8216;new Y2&#8242; where we had &#8216;new Y&#8217;&#8221;</p>
<p>But that leads to a new problem: For many test cases, you&#8217;ll need to specify different type hierarchies. So you&#8217;ll end up with several similar copies of all generated classes.</p>
<p>The problem is that many OO languages don&#8217;t perform well when you start to mess with the inheritance. Languages like Python allow you to modify the behavior of an instance after is has been created (by adding or removing methods and fields from it).</p>
<p>In Java, you need workarounds. It&#8217;s a limitation of the language, really (or rather of the slow CPUs of the past). Today, it might be possible to rebuild type inheritance using proxies and interfaces and large proxy caches at runtime. The idea here is that you wrap an instance with a proxy at runtime (for example with byte code instrumentation) and then save it in a cache, so when you need the same proxy type again, you can ask for the existing proxy instance.</p>
<p>Confused? Say I need to add the method foo() to an existing instance. The solution is to create an interface with foo() and then a wrapper which wraps an existing instance with an implementation of the interface. To be able to have state in foo(), we need to cache the wrapper.</p>
<p>I&#8217;m not really a fan of tools that &#8220;know&#8221; which lines a user has changed because that can break. And if it breaks, you&#8217;re in deep trouble. Something explicit is much better. It also allows you to undo changes &#8211; with a tool, you not only need to restore the original code but you also need to tell the tool to forget about the change you just made. And you better not make a mistake or ugly things will happen.</p>
<p>In the end, it all boils down to being unable to build software from smaller blocks than classes. If we could say &#8220;take this instance and replace the method foo() with that one&#8221;, such things wouldn&#8217;t be an issue at all.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by Andreas Leue</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1745</link>
		<dc:creator>Andreas Leue</dc:creator>
		<pubDate>Fri, 08 Apr 2011 09:39:36 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1745</guid>
		<description>Rafael, I agree very much with you.

Just one remark concerning ways of behavioural modelling. Due to our experience with our EM/OS system, depending on the abstraction layer (CIM/PIM/ASM/PSM...) the needs for behavioural modelling are quite different.

While in a PSM an action language with capabilities to create objects and throw exceptions might be a useful thing, in a PIM this is just not the right abstraction, except for minor usecases like expressing a validation formula (even then, it might be better to have a validation library at hand and refer to named rules).

Sure, in reality there&#039;s always the point where your abstraction fails and you need a fallback and hack some code into your model, but this is not 80/20, it can be reduced to 99/1.

More details about our approach can be found e.g. in this thread http://www.modeldrivensoftware.net/forum/topics/can-you-really-use-uml-to

Andreas</description>
		<content:encoded><![CDATA[<p>Rafael, I agree very much with you.</p>
<p>Just one remark concerning ways of behavioural modelling. Due to our experience with our EM/OS system, depending on the abstraction layer (CIM/PIM/ASM/PSM&#8230;) the needs for behavioural modelling are quite different.</p>
<p>While in a PSM an action language with capabilities to create objects and throw exceptions might be a useful thing, in a PIM this is just not the right abstraction, except for minor usecases like expressing a validation formula (even then, it might be better to have a validation library at hand and refer to named rules).</p>
<p>Sure, in reality there&#8217;s always the point where your abstraction fails and you need a fallback and hack some code into your model, but this is not 80/20, it can be reduced to 99/1.</p>
<p>More details about our approach can be found e.g. in this thread <a href="http://www.modeldrivensoftware.net/forum/topics/can-you-really-use-uml-to" rel="nofollow">http://www.modeldrivensoftware.net/forum/topics/can-you-really-use-uml-to</a></p>
<p>Andreas</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Rui Curado</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1744</link>
		<dc:creator>Rui Curado</dc:creator>
		<pubDate>Fri, 08 Apr 2011 09:21:48 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1744</guid>
		<description>@Aurelien Because the generator (AtomWeaver) knows which lines are custom (it keeps a map for each file) changes made to the custom lines can be read back.

So Ted can make changes to custom code blocks without re-generating the entire model.</description>
		<content:encoded><![CDATA[<p>@Aurelien Because the generator (AtomWeaver) knows which lines are custom (it keeps a map for each file) changes made to the custom lines can be read back.</p>
<p>So Ted can make changes to custom code blocks without re-generating the entire model.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by Damien Cassou</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1743</link>
		<dc:creator>Damien Cassou</dc:creator>
		<pubDate>Fri, 08 Apr 2011 08:31:30 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1743</guid>
		<description>During my PhD thesis I created a domain-specific language to let architects describes architectures such as:

context AccessLogParser as Access { ... }
context IP2Profile as Profile indexed by ip as IPAddress { ... }

context AccessingProfile as IdentifiedAccess {
  interaction {
    when provided AccessLogParser
    get IP2Profile
    always publish
  }
}

From such a description, a code generator produces a programming framework which includes the following abstract method declaration:

abstract  IdentifiedAccess onNewAccessLogParser(Access access, PullFromIP2ProfileCallback ip2Profile);


This can then be implemented, in a subclass, by a Java developer like this:

@Override
protected IdentifiedAccess onNewAccessLogParser(Access access, PullFromIP2ProfileCallback ip2Profile) {
  Profile profile = ip2Profile.get(access.getHost_ip());
  return new IdentifiedAccess(access, profile);
}


Here, you can see that my approach leverages partial code generation; the developer is really guided by the generated code, i.e., the programming framework contains types dedicated to help the developer in implementing the architecture as described by the architect (e.g., PullFromIP2ProfileCallback which hides an RPC call to a remote object). Also, this approach leverages existing tools (IDEs, Java type checker, Java libraries...). For example, the developer only needs to use parameters of the abstract method and code completion to do his job. Have a look at the slides on my website if you want to know more about my approach.

With the executable model approach, if I understand it correctly, it would not be possible to guide the developer or leverage existing general-purpose programming language tools. What do you think?</description>
		<content:encoded><![CDATA[<p>During my PhD thesis I created a domain-specific language to let architects describes architectures such as:</p>
<p>context AccessLogParser as Access { &#8230; }<br />
context IP2Profile as Profile indexed by ip as IPAddress { &#8230; }</p>
<p>context AccessingProfile as IdentifiedAccess {<br />
  interaction {<br />
    when provided AccessLogParser<br />
    get IP2Profile<br />
    always publish<br />
  }<br />
}</p>
<p>From such a description, a code generator produces a programming framework which includes the following abstract method declaration:</p>
<p>abstract  IdentifiedAccess onNewAccessLogParser(Access access, PullFromIP2ProfileCallback ip2Profile);</p>
<p>This can then be implemented, in a subclass, by a Java developer like this:</p>
<p>@Override<br />
protected IdentifiedAccess onNewAccessLogParser(Access access, PullFromIP2ProfileCallback ip2Profile) {<br />
  Profile profile = ip2Profile.get(access.getHost_ip());<br />
  return new IdentifiedAccess(access, profile);<br />
}</p>
<p>Here, you can see that my approach leverages partial code generation; the developer is really guided by the generated code, i.e., the programming framework contains types dedicated to help the developer in implementing the architecture as described by the architect (e.g., PullFromIP2ProfileCallback which hides an RPC call to a remote object). Also, this approach leverages existing tools (IDEs, Java type checker, Java libraries&#8230;). For example, the developer only needs to use parameters of the abstract method and code completion to do his job. Have a look at the slides on my website if you want to know more about my approach.</p>
<p>With the executable model approach, if I understand it correctly, it would not be possible to guide the developer or leverage existing general-purpose programming language tools. What do you think?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by UML Guru</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1742</link>
		<dc:creator>UML Guru</dc:creator>
		<pubDate>Fri, 08 Apr 2011 08:21:25 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1742</guid>
		<description>I feel embarrassed because I usually say to my customer that UML is a graphical language but it seems it is only a notation today. 
For me a language is a reality when two person can talk together and understand each other. UML is therefore language but because you can not talk in UML but can just design then is UML a language or a notation ?</description>
		<content:encoded><![CDATA[<p>I feel embarrassed because I usually say to my customer that UML is a graphical language but it seems it is only a notation today.<br />
For me a language is a reality when two person can talk together and understand each other. UML is therefore language but because you can not talk in UML but can just design then is UML a language or a notation ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on What can UML do for you? by Productivity of UML &#124; abstratt&#039;s blog</title>
		<link>http://abstratt.com/blog/2008/11/02/what-can-uml-do-for-you/comment-page-1/#comment-1741</link>
		<dc:creator>Productivity of UML &#124; abstratt&#039;s blog</dc:creator>
		<pubDate>Fri, 08 Apr 2011 08:18:21 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=123#comment-1741</guid>
		<description>[...] There is no need to mix languages, UML has support for both structural and behavioral modeling (since 2002!). Action languages are not (or don&#8217;t have to be) &#8220;other languages&#8221; [...]</description>
		<content:encoded><![CDATA[<p>[...] There is no need to mix languages, UML has support for both structural and behavioral modeling (since 2002!). Action languages are not (or don&#8217;t have to be) &#8220;other languages&#8221; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Productivity of UML by Daniel</title>
		<link>http://abstratt.com/blog/2011/04/07/productivity-of-uml/comment-page-1/#comment-1739</link>
		<dc:creator>Daniel</dc:creator>
		<pubDate>Fri, 08 Apr 2011 07:39:31 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=423#comment-1739</guid>
		<description>UML is data-centric.
Algorithm and Data structure are inseparable. Generated code limit the choice of algorithm.</description>
		<content:encoded><![CDATA[<p>UML is data-centric.<br />
Algorithm and Data structure are inseparable. Generated code limit the choice of algorithm.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1738</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Fri, 08 Apr 2011 06:56:33 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1738</guid>
		<description>Thanks, Vincent, missed your comment in the approval queue.

Totally agree. Don&#039;t model what you should be coding. But the converse is also true.

Hope that Ted, by the end of his journey,  will have a reasonable understanding of what is best to model and what is best to code.</description>
		<content:encoded><![CDATA[<p>Thanks, Vincent, missed your comment in the approval queue.</p>
<p>Totally agree. Don&#8217;t model what you should be coding. But the converse is also true.</p>
<p>Hope that Ted, by the end of his journey,  will have a reasonable understanding of what is best to model and what is best to code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1735</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Thu, 07 Apr 2011 08:13:10 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1735</guid>
		<description>@Moritz: Yup, generation gap will sure be on his path.

@Jan: Pointer was appreciated. 

@Filipe: I think he should at least be aware of that option.

@Gonçalo: If you had included a link at least I could claim a referral fee...</description>
		<content:encoded><![CDATA[<p>@Moritz: Yup, generation gap will sure be on his path.</p>
<p>@Jan: Pointer was appreciated. </p>
<p>@Filipe: I think he should at least be aware of that option.</p>
<p>@Gonçalo: If you had included a link at least I could claim a referral fee&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Vincent Hanniet</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1734</link>
		<dc:creator>Vincent Hanniet</dc:creator>
		<pubDate>Thu, 07 Apr 2011 06:14:09 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1734</guid>
		<description>Best Ted&#039;s next meta-move is to hire Aurélien!

Any good and scalable code generation tool will for sure keep trace of human added code from a generation to another (my favorite is http://www.mia-software.com/en/products/mia-studio/ ;D).

Ted will certainly soon discover one of the 10 productive MDD best practices: don&#039;t model/generate things that are much simple to code/maintain! (keeping generation for his DRY goal)

But Ted&#039;s very next move may be to subclass NON generated code...</description>
		<content:encoded><![CDATA[<p>Best Ted&#8217;s next meta-move is to hire Aurélien!</p>
<p>Any good and scalable code generation tool will for sure keep trace of human added code from a generation to another (my favorite is <a href="http://www.mia-software.com/en/products/mia-studio/" rel="nofollow">http://www.mia-software.com/en/products/mia-studio/</a> ;D).</p>
<p>Ted will certainly soon discover one of the 10 productive MDD best practices: don&#8217;t model/generate things that are much simple to code/maintain! (keeping generation for his DRY goal)</p>
<p>But Ted&#8217;s very next move may be to subclass NON generated code&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Gonçalo Borrêga</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1733</link>
		<dc:creator>Gonçalo Borrêga</dc:creator>
		<pubDate>Wed, 06 Apr 2011 22:33:49 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1733</guid>
		<description>I guess what Ted really wants is a way to keep modeling and coding with a visual language (facilitating knowledge transfer in his team), supported by c# or java code extensions that are maintained within the model, with the proper source control and visual merge of the models... I definitely think he will end up in OutSystems site trying out the Agile Platform in the cloud.  Good luck Ted! :-)</description>
		<content:encoded><![CDATA[<p>I guess what Ted really wants is a way to keep modeling and coding with a visual language (facilitating knowledge transfer in his team), supported by c# or java code extensions that are maintained within the model, with the proper source control and visual merge of the models&#8230; I definitely think he will end up in OutSystems site trying out the Agile Platform in the cloud.  Good luck Ted! <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Filipe Correia</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1732</link>
		<dc:creator>Filipe Correia</dc:creator>
		<pubDate>Wed, 06 Apr 2011 11:44:32 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1732</guid>
		<description>I wonder if Ted will consider interpreting the model at runtime, rather than generate code :)</description>
		<content:encoded><![CDATA[<p>I wonder if Ted will consider interpreting the model at runtime, rather than generate code <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Jan</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1731</link>
		<dc:creator>Jan</dc:creator>
		<pubDate>Wed, 06 Apr 2011 09:39:06 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1731</guid>
		<description>He could also have a look at the Domainmodel example shipped with Xtext 2.0: Operation bodies can be specified in the model itself referring to the model&#039;s abstractions or other Java concepts using Xbase expressions. As everything is compiled to Java, there is no more generation gap. And he&#039;s free to choose his own concepts and syntax. http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;id=2053 (slides coming soon)</description>
		<content:encoded><![CDATA[<p>He could also have a look at the Domainmodel example shipped with Xtext 2.0: Operation bodies can be specified in the model itself referring to the model&#8217;s abstractions or other Java concepts using Xbase expressions. As everything is compiled to Java, there is no more generation gap. And he&#8217;s free to choose his own concepts and syntax. <a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&#038;id=2053" rel="nofollow">http://www.eclipsecon.org/2011/sessions/?page=sessions&#038;id=2053</a> (slides coming soon)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Moritz</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1730</link>
		<dc:creator>Moritz</dc:creator>
		<pubDate>Tue, 05 Apr 2011 23:38:54 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1730</guid>
		<description>Hey, 

The subclassing is also known as generation gap pattern and you can also use it with EMF:
http://www.slideshare.net/meysholdt/codegeneration-goodies

(and avoid JMerge)

regards,
    Moritz</description>
		<content:encoded><![CDATA[<p>Hey, </p>
<p>The subclassing is also known as generation gap pattern and you can also use it with EMF:<br />
<a href="http://www.slideshare.net/meysholdt/codegeneration-goodies" rel="nofollow">http://www.slideshare.net/meysholdt/codegeneration-goodies</a></p>
<p>(and avoid JMerge)</p>
<p>regards,<br />
    Moritz</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Aurelien Pupier</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1729</link>
		<dc:creator>Aurelien Pupier</dc:creator>
		<pubDate>Tue, 05 Apr 2011 20:41:52 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1729</guid>
		<description>@Rasmus : I was also completely ignoring partial classes. sounds cool. But might requires a nice IDE to merge the files in order to be clearer, is it available?

In java, for subclass, from my POV the best approach is to have several source folders, one for the generated code, one for custom code.

I better know about Eclipse EMF/GMF. The way that we are using in my team is to have a plugin for the generated code and another one for the custom code. Why? because plugin.xml and MANIFEST.MF are also generated and we can&#039;t have twice of them per bundle.


@Rui I just tried quickly AtomWeaver so I surely missed a lot of things.
&quot;no problems with his hand-written code.&quot;
The hand-written code is set in your own editor. You can&#039;t use your favorite IDE easily.
&quot;true model-based generator can re-read the model and generate again&quot;
It implies that you respect the convention in the generated code, the marker to delimit generated from non-generated code.
Respecting markers and conventions, a lot of generator have reconcilier to do that I think (GMF with @generated NOT, Acceleo with User code blocks,...)
And for regeneration, if someone modify the custom part of code in the generated code, are you taking it or keeping the custom code stored in the model (that might have been modified also)?

@Raphael
Yes, let&#039;s see the walkthrough of Ted and to which solution he will go.

:)</description>
		<content:encoded><![CDATA[<p>@Rasmus : I was also completely ignoring partial classes. sounds cool. But might requires a nice IDE to merge the files in order to be clearer, is it available?</p>
<p>In java, for subclass, from my POV the best approach is to have several source folders, one for the generated code, one for custom code.</p>
<p>I better know about Eclipse EMF/GMF. The way that we are using in my team is to have a plugin for the generated code and another one for the custom code. Why? because plugin.xml and MANIFEST.MF are also generated and we can&#8217;t have twice of them per bundle.</p>
<p>@Rui I just tried quickly AtomWeaver so I surely missed a lot of things.<br />
&#8220;no problems with his hand-written code.&#8221;<br />
The hand-written code is set in your own editor. You can&#8217;t use your favorite IDE easily.<br />
&#8220;true model-based generator can re-read the model and generate again&#8221;<br />
It implies that you respect the convention in the generated code, the marker to delimit generated from non-generated code.<br />
Respecting markers and conventions, a lot of generator have reconcilier to do that I think (GMF with @generated NOT, Acceleo with User code blocks,&#8230;)<br />
And for regeneration, if someone modify the custom part of code in the generated code, are you taking it or keeping the custom code stored in the model (that might have been modified also)?</p>
<p>@Raphael<br />
Yes, let&#8217;s see the walkthrough of Ted and to which solution he will go.</p>
<p> <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1727</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 05 Apr 2011 18:49:42 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1727</guid>
		<description>Hi Rui, go easy on Ted, the guy has just started... :)</description>
		<content:encoded><![CDATA[<p>Hi Rui, go easy on Ted, the guy has just started&#8230; <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Rui Curado</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1726</link>
		<dc:creator>Rui Curado</dc:creator>
		<pubDate>Tue, 05 Apr 2011 17:33:25 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1726</guid>
		<description>The ABSE (http://www.abse.info) modeling approach treats user code as first-class citizens: &quot;user code&quot; is a type, just like string or boolean.

So, using ABSE Ted has no problems with his hand-written code.

Regarding regeneration, any true model-based generator can re-read the model and generate again, so that aspect is a non-issue IMHO.</description>
		<content:encoded><![CDATA[<p>The ABSE (<a href="http://www.abse.info" rel="nofollow">http://www.abse.info</a>) modeling approach treats user code as first-class citizens: &#8220;user code&#8221; is a type, just like string or boolean.</p>
<p>So, using ABSE Ted has no problems with his hand-written code.</p>
<p>Regarding regeneration, any true model-based generator can re-read the model and generate again, so that aspect is a non-issue IMHO.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1724</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 05 Apr 2011 15:08:04 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1724</guid>
		<description>Being a Java-head, I was completely ignoring partial classes. Thanks for bringing that up, Rasmus.</description>
		<content:encoded><![CDATA[<p>Being a Java-head, I was completely ignoring partial classes. Thanks for bringing that up, Rasmus.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Rasmus Toftdahl Olesen</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1723</link>
		<dc:creator>Rasmus Toftdahl Olesen</dc:creator>
		<pubDate>Tue, 05 Apr 2011 13:24:23 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1723</guid>
		<description>Like Aurelien I also lean towards sub-classing as a way to deal with this.

In C# there is also the possibility of using partial classes to seperate the generated code from the user-implemented code.</description>
		<content:encoded><![CDATA[<p>Like Aurelien I also lean towards sub-classing as a way to deal with this.</p>
<p>In C# there is also the possibility of using partial classes to seperate the generated code from the user-implemented code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1722</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 05 Apr 2011 09:53:37 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1722</guid>
		<description>Thanks, Mikaël, I will make sure to cover that approach. It certainly solves Ted&#039;s current issues.</description>
		<content:encoded><![CDATA[<p>Thanks, Mikaël, I will make sure to cover that approach. It certainly solves Ted&#8217;s current issues.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Mikaël Barbero</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1721</link>
		<dc:creator>Mikaël Barbero</dc:creator>
		<pubDate>Tue, 05 Apr 2011 09:40:54 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1721</guid>
		<description>He can use a cutting-edge code generator like Acceleo (http://www.eclipse.org/acceleo/) that supports user code blocks that will not be erased after a re-generation :
http://wiki.eclipse.org/Acceleo/Getting_Started#User_code_blocks

My 2 cents ;)</description>
		<content:encoded><![CDATA[<p>He can use a cutting-edge code generator like Acceleo (<a href="http://www.eclipse.org/acceleo/" rel="nofollow">http://www.eclipse.org/acceleo/</a>) that supports user code blocks that will not be erased after a re-generation :<br />
<a href="http://wiki.eclipse.org/Acceleo/Getting_Started#User_code_blocks" rel="nofollow">http://wiki.eclipse.org/Acceleo/Getting_Started#User_code_blocks</a></p>
<p>My 2 cents <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1720</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 05 Apr 2011 08:53:55 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1720</guid>
		<description>Awesome, lots of great ideas, Aurelien!</description>
		<content:encoded><![CDATA[<p>Awesome, lots of great ideas, Aurelien!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Aurelien Pupier</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1719</link>
		<dc:creator>Aurelien Pupier</dc:creator>
		<pubDate>Tue, 05 Apr 2011 08:51:29 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1719</guid>
		<description>he has a lot of solutions :)

- jump to EMF
- subclass generated code
- modify templates for generation
- use aspects on the templates for generation
- use aspects on the generated code (AspectJ, ObjectTeams)
- use anootations to tell to keep soem part of code and so write a reconcilier  (oh no I don&#039;t like this method)

And sure they are another.
Let&#039;s see what Ted will use :)</description>
		<content:encoded><![CDATA[<p>he has a lot of solutions <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>- jump to EMF<br />
- subclass generated code<br />
- modify templates for generation<br />
- use aspects on the templates for generation<br />
- use aspects on the generated code (AspectJ, ObjectTeams)<br />
- use anootations to tell to keep soem part of code and so write a reconcilier  (oh no I don&#8217;t like this method)</p>
<p>And sure they are another.<br />
Let&#8217;s see what Ted will use <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by rafael.chaves</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1718</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Tue, 05 Apr 2011 08:39:59 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1718</guid>
		<description>@Zef

Haha, that was fast! 

I am using UML to appeal to a more mainstream audience, but the intention is that the fundamentals should apply to any metamodel.</description>
		<content:encoded><![CDATA[<p>@Zef</p>
<p>Haha, that was fast! </p>
<p>I am using UML to appeal to a more mainstream audience, but the intention is that the fundamentals should apply to any metamodel.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Anti-patterns in code generation &#8211; Part I by Zef</title>
		<link>http://abstratt.com/blog/2011/04/05/anti-patterns-in-code-generation-part-1/comment-page-1/#comment-1717</link>
		<dc:creator>Zef</dc:creator>
		<pubDate>Tue, 05 Apr 2011 08:21:30 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=177#comment-1717</guid>
		<description>Wonder in what episode Ted decides to step away from UML altogether ;)</description>
		<content:encoded><![CDATA[<p>Wonder in what episode Ted decides to step away from UML altogether <img src='http://abstratt.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on SQL queries in UML by Un café con Rafael Chaves (TextUML Toolkit) &#124; MOdeling LAnguages</title>
		<link>http://abstratt.com/blog/2009/03/18/sql-queries-in-uml/comment-page-1/#comment-1668</link>
		<dc:creator>Un café con Rafael Chaves (TextUML Toolkit) &#124; MOdeling LAnguages</dc:creator>
		<pubDate>Wed, 09 Mar 2011 22:51:00 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=146#comment-1668</guid>
		<description>[...] JC - Have you thought in extending TextUML with some basic OCL support (i.e. mixing simple OCL constraints inline with the textual definition of the class diagram as a way to simplify the writing of basic OCL constraints)   RC - There is some overlap between Action Semantics and OCL and at some point I was trying to see if it was possible to merge them or use both of them at the same time but a lot of effort is needed to bridge them. The corresponding metamodels do not work together that well. I wanted to allow using OCL expressions within Action Semantics specifications but I realised that would require changing/extending the metamodels. For instance, the concept of variable in OCL is not equivalent to the concept of variable in Action Semantics. Also, I was interested in the concept of OCL collections (and all operations defined to manipulate them) since because I needed that kind of support and Action Semantics has no direct support for them. In Action Semantics it is very convoluted to apply an operation on all instances of a class and things like this so as a workaround I ended up avoiding the Action Semantics support for building sets of objects and trying to mimic what you have in OCL by having some predefined classes in TextUML that represent collections and provide some operations for them (for more details on this check  this blog post  [...]</description>
		<content:encoded><![CDATA[<p>[...] JC &#8211; Have you thought in extending TextUML with some basic OCL support (i.e. mixing simple OCL constraints inline with the textual definition of the class diagram as a way to simplify the writing of basic OCL constraints)   RC &#8211; There is some overlap between Action Semantics and OCL and at some point I was trying to see if it was possible to merge them or use both of them at the same time but a lot of effort is needed to bridge them. The corresponding metamodels do not work together that well. I wanted to allow using OCL expressions within Action Semantics specifications but I realised that would require changing/extending the metamodels. For instance, the concept of variable in OCL is not equivalent to the concept of variable in Action Semantics. Also, I was interested in the concept of OCL collections (and all operations defined to manipulate them) since because I needed that kind of support and Action Semantics has no direct support for them. In Action Semantics it is very convoluted to apply an operation on all instances of a class and things like this so as a workaround I ended up avoiding the Action Semantics support for building sets of objects and trying to mimic what you have in OCL by having some predefined classes in TextUML that represent collections and provide some operations for them (for more details on this check  this blog post  [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on TextUML Toolkit at VIJUG by rafael.chaves</title>
		<link>http://abstratt.com/blog/2008/03/26/textuml-toolkit-at-vijug/comment-page-1/#comment-1606</link>
		<dc:creator>rafael.chaves</dc:creator>
		<pubDate>Fri, 11 Feb 2011 03:40:31 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/2008/03/26/textuml-toolkit-at-vijug/#comment-1606</guid>
		<description>Here are the slides:

&lt;div style=&quot;width:425px&quot; id=&quot;__ss_2315995&quot;&gt;&lt;strong style=&quot;display:block;margin:12px 0 4px&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/rachaves/vijug20080326&quot; title=&quot;TextUML Toolkit&quot; rel=&quot;nofollow&quot;&gt;TextUML Toolkit&lt;/a&gt;&lt;/strong&gt;&lt;object id=&quot;__sse2315995&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=vijug20080326-12561860235586-phpapp03&amp;stripped_title=vijug20080326&amp;userName=rachaves&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed name=&quot;__sse2315995&quot; src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=vijug20080326-12561860235586-phpapp03&amp;stripped_title=vijug20080326&amp;userName=rachaves&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;padding:5px 0 12px&quot;&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot; rel=&quot;nofollow&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/rachaves&quot; rel=&quot;nofollow&quot;&gt;rachaves&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>Here are the slides:</p>
<div style="width:425px" id="__ss_2315995"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/rachaves/vijug20080326" title="TextUML Toolkit" rel="nofollow">TextUML Toolkit</a></strong><object id="__sse2315995" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=vijug20080326-12561860235586-phpapp03&#038;stripped_title=vijug20080326&#038;userName=rachaves" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse2315995" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=vijug20080326-12561860235586-phpapp03&#038;stripped_title=vijug20080326&#038;userName=rachaves" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/" rel="nofollow">presentations</a> from <a href="http://www.slideshare.net/rachaves" rel="nofollow">rachaves</a>.</div>
</div>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Model-driven Development with Executable UML models by Damien Cassou</title>
		<link>http://abstratt.com/blog/2011/02/06/model-driven-development-with-executable-uml-models/comment-page-1/#comment-1601</link>
		<dc:creator>Damien Cassou</dc:creator>
		<pubDate>Wed, 09 Feb 2011 10:00:26 +0000</pubDate>
		<guid isPermaLink="false">http://abstratt.com/blog/?p=211#comment-1601</guid>
		<description>That makes perfect sense, thanks for the explanations. A possible problem could arise when you want to have multiple documentations for different stakeholders: you may want to show/hide different elements.</description>
		<content:encoded><![CDATA[<p>That makes perfect sense, thanks for the explanations. A possible problem could arise when you want to have multiple documentations for different stakeholders: you may want to show/hide different elements.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

