<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Metalevels &amp; Meta-metalevels</title>
	<atom:link href="http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/feed/" rel="self" type="application/rss+xml" />
	<link>http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/</link>
	<description>Abstraction based levitation</description>
	<lastBuildDate>Fri, 04 May 2012 10:14:37 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>By: jean-jacques dubray</title>
		<link>http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/comment-page-1/#comment-145</link>
		<dc:creator>jean-jacques dubray</dc:creator>
		<pubDate>Sun, 21 Feb 2010 18:26:43 +0000</pubDate>
		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=174#comment-145</guid>
		<description>Pedro:

&quot;execution element&quot; may not be the best name. The basic idea behind MOP is that OO methods are an example of &quot;execution element&quot; in the OO metamodel. Take a metamodel, you can &quot;add&quot; execution elements anywhere you want (where it makes sense of course). The next question what do you write in these execution elements? Well, you have the usual control structures of course, the basic data types and then, this is where the lifecycle of metamodel elements come to play. In OO, an object instance has a lifecycle, created, deleted, garbage collected,... Basically you can come up with any lifecycle that makes sense to you.

MOP provides a blueprint to create cogent polyadic programming languages. DSLs and general purpose languages are very particular cases of these programming languages and frankly far less useful. MOP bridges GPLs and DSLs.

See, the problem with OO is that people need the polyadism. 15 years ago it was not clear. Add SOA, the Web, BI, BAM, ... and you start seeing annotations everywhere, in essence OO is becoming polyadic. Actually, OO is polyadic .Net, Java -all- have added polyadism, unfortunately without truly understanding the implications of polyadism. The last problem to solve is &quot;how do you express behavior in a polyadic world?&quot;. You guessed it, with OO you are limited to the Object lifecycle, -declarative- annotations have no way to express behavior correctly. You can say &quot;start&quot; or &quot;stop&quot; this service.

So turn the OO model around like a sleeve and look at its structure (metamodel) and create a cogent polyadic meta-metamodel (that&#039;s what I call MAF -MetaArchitecture Framework). Voila. OO is just a cogent monadic language, it&#039;s good, it&#039;s great, we all have done incredible things with it but add polyadism... and let&#039;s talk again.

JJ-</description>
		<content:encoded><![CDATA[<p>Pedro:</p>
<p>&#8220;execution element&#8221; may not be the best name. The basic idea behind MOP is that OO methods are an example of &#8220;execution element&#8221; in the OO metamodel. Take a metamodel, you can &#8220;add&#8221; execution elements anywhere you want (where it makes sense of course). The next question what do you write in these execution elements? Well, you have the usual control structures of course, the basic data types and then, this is where the lifecycle of metamodel elements come to play. In OO, an object instance has a lifecycle, created, deleted, garbage collected,&#8230; Basically you can come up with any lifecycle that makes sense to you.</p>
<p>MOP provides a blueprint to create cogent polyadic programming languages. DSLs and general purpose languages are very particular cases of these programming languages and frankly far less useful. MOP bridges GPLs and DSLs.</p>
<p>See, the problem with OO is that people need the polyadism. 15 years ago it was not clear. Add SOA, the Web, BI, BAM, &#8230; and you start seeing annotations everywhere, in essence OO is becoming polyadic. Actually, OO is polyadic .Net, Java -all- have added polyadism, unfortunately without truly understanding the implications of polyadism. The last problem to solve is &#8220;how do you express behavior in a polyadic world?&#8221;. You guessed it, with OO you are limited to the Object lifecycle, -declarative- annotations have no way to express behavior correctly. You can say &#8220;start&#8221; or &#8220;stop&#8221; this service.</p>
<p>So turn the OO model around like a sleeve and look at its structure (metamodel) and create a cogent polyadic meta-metamodel (that&#8217;s what I call MAF -MetaArchitecture Framework). Voila. OO is just a cogent monadic language, it&#8217;s good, it&#8217;s great, we all have done incredible things with it but add polyadism&#8230; and let&#8217;s talk again.</p>
<p>JJ-</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rui Curado</title>
		<link>http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/comment-page-1/#comment-144</link>
		<dc:creator>Rui Curado</dc:creator>
		<pubDate>Sun, 21 Feb 2010 12:13:54 +0000</pubDate>
		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=174#comment-144</guid>
		<description>&quot;Do you have a link where to review a detailed description of the formalism you are using in ABSE?&quot;

Not yet. However I will release a white paper with ABSE&#039;s specification/formalisms. I am determined to have a working proof-of-concept (AtomWeaver, the ABSE IDE) at the same time this whitepaper is released.

Time is a (very) limited resource!</description>
		<content:encoded><![CDATA[<p>&#8220;Do you have a link where to review a detailed description of the formalism you are using in ABSE?&#8221;</p>
<p>Not yet. However I will release a white paper with ABSE&#8217;s specification/formalisms. I am determined to have a working proof-of-concept (AtomWeaver, the ABSE IDE) at the same time this whitepaper is released.</p>
<p>Time is a (very) limited resource!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pjmolina</title>
		<link>http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/comment-page-1/#comment-143</link>
		<dc:creator>pjmolina</dc:creator>
		<pubDate>Sun, 21 Feb 2010 10:58:01 +0000</pubDate>
		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=174#comment-143</guid>
		<description>Thanks for your comments Rui:
Do you have a link where to review a detailed description of the formalism you are using in ABSE? I am interested in taking a look on it.</description>
		<content:encoded><![CDATA[<p>Thanks for your comments Rui:<br />
Do you have a link where to review a detailed description of the formalism you are using in ABSE? I am interested in taking a look on it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rui Curado</title>
		<link>http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/comment-page-1/#comment-142</link>
		<dc:creator>Rui Curado</dc:creator>
		<pubDate>Sat, 20 Feb 2010 23:56:32 +0000</pubDate>
		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=174#comment-142</guid>
		<description>Hi Pedro.

I am glad ABSE conforms to your specification! 

ABSE&#039;s meta-metamodel, the Atom, does not rely on a DSL. Instead, it uses a general-purpose language and a library/framework. I think we can compare this to core classes you mention. Then, each Atom can have properties and relations. What is missing on your analysis from ABSE is behavior: An Atom can act, run, and behave differently according to its parameters, relations, or global model settings. For instance, this makes it easy to create software product families.
 
Also, I can consider the four meta-levels as matching:

M3 : Atom, ABSE&#039;s meta-metamodel
M2 : Atom Templates, created following the rules of Atom
M1 : Atom Instances, created by instantiating Atom Templates
M0 : Generated Artifacts, created by executing Atom Instances

In conclusion, you made a very good overall analysis of the current MDSD methodologies!</description>
		<content:encoded><![CDATA[<p>Hi Pedro.</p>
<p>I am glad ABSE conforms to your specification! </p>
<p>ABSE&#8217;s meta-metamodel, the Atom, does not rely on a DSL. Instead, it uses a general-purpose language and a library/framework. I think we can compare this to core classes you mention. Then, each Atom can have properties and relations. What is missing on your analysis from ABSE is behavior: An Atom can act, run, and behave differently according to its parameters, relations, or global model settings. For instance, this makes it easy to create software product families.</p>
<p>Also, I can consider the four meta-levels as matching:</p>
<p>M3 : Atom, ABSE&#8217;s meta-metamodel<br />
M2 : Atom Templates, created following the rules of Atom<br />
M1 : Atom Instances, created by instantiating Atom Templates<br />
M0 : Generated Artifacts, created by executing Atom Instances</p>
<p>In conclusion, you made a very good overall analysis of the current MDSD methodologies!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pjmolina</title>
		<link>http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/comment-page-1/#comment-141</link>
		<dc:creator>pjmolina</dc:creator>
		<pubDate>Sat, 20 Feb 2010 19:51:46 +0000</pubDate>
		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=174#comment-141</guid>
		<description>Probably, I have not fully understood your statement about MOP and miss some parts. Particularly, the “execution element” is still diffuse to me. And hence, I interpreted it initially as a declarative versus imperative issue.

Your claim about implicit life-cycles in OO and the necessity to make them explicit seems sensible to me in some scenarios.

On the other hand, you are also asserting that OO is not the correct foundation for doing MDE because something else is missing. 
So, in your opinion, what are the missing parts we need to fix it?</description>
		<content:encoded><![CDATA[<p>Probably, I have not fully understood your statement about MOP and miss some parts. Particularly, the “execution element” is still diffuse to me. And hence, I interpreted it initially as a declarative versus imperative issue.</p>
<p>Your claim about implicit life-cycles in OO and the necessity to make them explicit seems sensible to me in some scenarios.</p>
<p>On the other hand, you are also asserting that OO is not the correct foundation for doing MDE because something else is missing.<br />
So, in your opinion, what are the missing parts we need to fix it?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jean-jacques dubray</title>
		<link>http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/comment-page-1/#comment-140</link>
		<dc:creator>jean-jacques dubray</dc:creator>
		<pubDate>Sat, 20 Feb 2010 18:40:38 +0000</pubDate>
		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=174#comment-140</guid>
		<description>Pedro:

&gt;&gt; The M0 level for SOA is the running system containing the traces
With all due respect, that does not fit your definition of M1/M0. At best, I would say that in SOA M1 could be the contract level and M0 the service implementation, but that&#039;s not fitting very well the M levels of MDA.

Personally, my conclusion is that MDA was designed with OO in mind without looking any further. Hence MDA is flawed. I can see how M3/M2/M1 fit well. As soon as you are stepping into the runtime, you have to be careful on how you articulate the relationship between the model and the execution. 

Our industry is so conservative that we never question anything even as new evidence show that ideas that were thought to be &quot;universal&quot; simply cannot account for modern architecture concepts.

&gt;&gt; anemic
this is a reference to DDD, I use it in the same sense.

&gt;&gt;the what” and avoid any details about “the how”
again, this is not the distinction, it is rather a question of anemic vs behavior or static vs dynamic. The dynamicity of the model cannot be escaped. It amounts to saying that Turing was wrong all along. Building systems abstracted from Turing is, IMHO, a huge, historical mistake for the MDE movement.

&gt;&gt;able to execute algorithms with a well defined execution rules
This is actually not what I describe in MOP. You seem to not see the difference between the lifecycle of the model elements (implied and constant in an OO system) and algorithms. Lots of people actually burry the lifecycle behind patterns and treat it as code. Again this is a huge and historical mistake for MDA, which is directly coming from the anchorage in OO. As soon as MDA/MDE will understand that OO is not the foundation of its architecture but OO should be built on top of an MDA/MDE, then we will see MDA and MDE bloom like we have seen nothing before.

&gt;&gt; imperative executions semantics 
again, this has nothing to do with imperative vs declarative. It has to do with dymanic vs static. The lifecycle of the model elements cannot be ignored or buried in the code generator or code interpretor. It has to surface at the same level as the model itself.

JJ</description>
		<content:encoded><![CDATA[<p>Pedro:</p>
<p>&gt;&gt; The M0 level for SOA is the running system containing the traces<br />
With all due respect, that does not fit your definition of M1/M0. At best, I would say that in SOA M1 could be the contract level and M0 the service implementation, but that&#8217;s not fitting very well the M levels of MDA.</p>
<p>Personally, my conclusion is that MDA was designed with OO in mind without looking any further. Hence MDA is flawed. I can see how M3/M2/M1 fit well. As soon as you are stepping into the runtime, you have to be careful on how you articulate the relationship between the model and the execution. </p>
<p>Our industry is so conservative that we never question anything even as new evidence show that ideas that were thought to be &#8220;universal&#8221; simply cannot account for modern architecture concepts.</p>
<p>&gt;&gt; anemic<br />
this is a reference to DDD, I use it in the same sense.</p>
<p>&gt;&gt;the what” and avoid any details about “the how”<br />
again, this is not the distinction, it is rather a question of anemic vs behavior or static vs dynamic. The dynamicity of the model cannot be escaped. It amounts to saying that Turing was wrong all along. Building systems abstracted from Turing is, IMHO, a huge, historical mistake for the MDE movement.</p>
<p>&gt;&gt;able to execute algorithms with a well defined execution rules<br />
This is actually not what I describe in MOP. You seem to not see the difference between the lifecycle of the model elements (implied and constant in an OO system) and algorithms. Lots of people actually burry the lifecycle behind patterns and treat it as code. Again this is a huge and historical mistake for MDA, which is directly coming from the anchorage in OO. As soon as MDA/MDE will understand that OO is not the foundation of its architecture but OO should be built on top of an MDA/MDE, then we will see MDA and MDE bloom like we have seen nothing before.</p>
<p>&gt;&gt; imperative executions semantics<br />
again, this has nothing to do with imperative vs declarative. It has to do with dymanic vs static. The lifecycle of the model elements cannot be ignored or buried in the code generator or code interpretor. It has to surface at the same level as the model itself.</p>
<p>JJ</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pjmolina</title>
		<link>http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/comment-page-1/#comment-139</link>
		<dc:creator>pjmolina</dc:creator>
		<pubDate>Fri, 19 Feb 2010 19:37:29 +0000</pubDate>
		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=174#comment-139</guid>
		<description>Hi Jean-Jacques:
I just fixed the URL to point to your article about &lt;a href=&quot;http://www.infoq.com/articles/mop&quot; rel=&quot;nofollow&quot;&gt;MOP&lt;/a&gt;.

To my understanding, as M0 represents the reality level, also SOA has an M0 layer. We could make this layer emerge if needed.  In SOA, services are modeled in an M1 layer, that’s true. The M0 level for SOA is the running system containing the traces of real execution of services. Such traces could contain the service already executed (or in execution), the values of the parameters/messages already passed, timestamps, IP of the machine executing the service, etc.

&lt;a href=&quot;http://en.wikipedia.org/wiki/Business_activity_monitoring&quot; rel=&quot;nofollow&quot;&gt;Business Activity Monitoring&lt;/a&gt; products (BAM), for example, work with these assets tracking these executions and triggering new actions to fire Business Alerts.

On the other hand, instead of referring to pure structural models, as anemic (that sounds to me a bit pejorative), I prefer to call it just &lt;a href=&quot;http://en.wikipedia.org/wiki/Declarative_programming&quot; rel=&quot;nofollow&quot;&gt;declarative&lt;/a&gt; models or declarative DSLs.
Declarative DSLs like SQL, OCL, HTML, or Prolog have one nice virtue: they focus on describing &lt;strong&gt;“the what”&lt;/strong&gt; and avoid any details about &lt;strong&gt;“the how”&lt;/strong&gt;.

This virtue, to be purely declarative, is exactly what allows a runtime engine to apply optimizations to an SQL query, for example, or to optimize a rendering in HTML.

Of course, your definition of Cogent DSL can help to transform a model into another level of refinement. But to me, this rings a bell in my mind and looks to me quite near to an &lt;a href=&quot;http://en.wikipedia.org/wiki/Imperative_language&quot; rel=&quot;nofollow&quot;&gt;imperative language&lt;/a&gt; approach (an abstract one, but an imperative language at the end, like Java, Pascal or Javascript able to execute algorithms with a well defined execution rules).

When generating declarative conceptual models, I prefer to isolate the transformations, from the input and output model/DSLs. And maintain the models pure (or anemic, if you prefer). 
Again, when describing the transformation, it can be expressed using a declarative formalism or a imperative one (anemic or cogent in your terminology, if I understood it well).

On the other hand, I agree with you, that if you are going to capture an algorithm, a workflow, a process, etc. where the execution order and steps are the specification itself (as Service requires), then you will need a predefined imperative executions semantics when modeling, that also has to be preserved till reaching the runtime layer.

Thanks JJ for sharing your impressions and generating debate. :)</description>
		<content:encoded><![CDATA[<p>Hi Jean-Jacques:<br />
I just fixed the URL to point to your article about <a href="http://www.infoq.com/articles/mop" rel="nofollow">MOP</a>.</p>
<p>To my understanding, as M0 represents the reality level, also SOA has an M0 layer. We could make this layer emerge if needed.  In SOA, services are modeled in an M1 layer, that’s true. The M0 level for SOA is the running system containing the traces of real execution of services. Such traces could contain the service already executed (or in execution), the values of the parameters/messages already passed, timestamps, IP of the machine executing the service, etc.</p>
<p><a href="http://en.wikipedia.org/wiki/Business_activity_monitoring" rel="nofollow">Business Activity Monitoring</a> products (BAM), for example, work with these assets tracking these executions and triggering new actions to fire Business Alerts.</p>
<p>On the other hand, instead of referring to pure structural models, as anemic (that sounds to me a bit pejorative), I prefer to call it just <a href="http://en.wikipedia.org/wiki/Declarative_programming" rel="nofollow">declarative</a> models or declarative DSLs.<br />
Declarative DSLs like SQL, OCL, HTML, or Prolog have one nice virtue: they focus on describing <strong>“the what”</strong> and avoid any details about <strong>“the how”</strong>.</p>
<p>This virtue, to be purely declarative, is exactly what allows a runtime engine to apply optimizations to an SQL query, for example, or to optimize a rendering in HTML.</p>
<p>Of course, your definition of Cogent DSL can help to transform a model into another level of refinement. But to me, this rings a bell in my mind and looks to me quite near to an <a href="http://en.wikipedia.org/wiki/Imperative_language" rel="nofollow">imperative language</a> approach (an abstract one, but an imperative language at the end, like Java, Pascal or Javascript able to execute algorithms with a well defined execution rules).</p>
<p>When generating declarative conceptual models, I prefer to isolate the transformations, from the input and output model/DSLs. And maintain the models pure (or anemic, if you prefer).<br />
Again, when describing the transformation, it can be expressed using a declarative formalism or a imperative one (anemic or cogent in your terminology, if I understood it well).</p>
<p>On the other hand, I agree with you, that if you are going to capture an algorithm, a workflow, a process, etc. where the execution order and steps are the specification itself (as Service requires), then you will need a predefined imperative executions semantics when modeling, that also has to be preserved till reaching the runtime layer.</p>
<p>Thanks JJ for sharing your impressions and generating debate. <img src='http://pjmolina.com/metalevel/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jean-Jacques Dubray</title>
		<link>http://pjmolina.com/metalevel/2010/02/metalevels-and-meta-metalevels/comment-page-1/#comment-138</link>
		<dc:creator>Jean-Jacques Dubray</dc:creator>
		<pubDate>Fri, 19 Feb 2010 17:31:48 +0000</pubDate>
		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=174#comment-138</guid>
		<description>Interestingly &quot;Services&quot; in SOA do no have an M0 equivalent.

I would also argue that:

&gt;&gt; Take the following concepts: entity, attribute and 
&gt;&gt; relation. These are more than enough to create your basic 
&gt;&gt; meta-meta-model.

is leading to anemic metamodels (see my article here: &lt;a href=&quot;http://www.infoq.com/articles/mop&quot; rel=&quot;nofollow&quot;&gt;http://www.infoq.com/articles/mop&lt;/a&gt;) and anemic metamodels are not as useful as the cogent kind.</description>
		<content:encoded><![CDATA[<p>Interestingly &#8220;Services&#8221; in SOA do no have an M0 equivalent.</p>
<p>I would also argue that:</p>
<p>&gt;&gt; Take the following concepts: entity, attribute and<br />
&gt;&gt; relation. These are more than enough to create your basic<br />
&gt;&gt; meta-meta-model.</p>
<p>is leading to anemic metamodels (see my article here: <a href="http://www.infoq.com/articles/mop" rel="nofollow">http://www.infoq.com/articles/mop</a>) and anemic metamodels are not as useful as the cogent kind.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

