Dear Moosers,
I was pondering over Famix and found that it only uses 20% of EMOF's features. As it seems, the E in EMOF is not really standing for essential :)
What I came up with when porting MSE to Java, is a much simpler mmmodel.
I documented it on the wiki
http://smallwiki.unibe.ch/moose/mse/msemmmodel/
would be nice to make this the new mmmodel of moose and get rid of all the EMOF bloat.
by the way, a Java implementation is in its first draft, if you are interested contact me.
cheers, AA
Hi Adrian
EMOF has the advantage that it is nowadays a quasi standard. Dealing with a new model makes it easier to realize your new ideas, making performance optimization, etc. but harder to interact / exchange with other tools. Consider this while making your decision.
All the best
Frank
Adrian Kuhn wrote:
Dear Moosers,
I was pondering over Famix and found that it only uses 20% of EMOF's features. As it seems, the E in EMOF is not really standing for essential :)
What I came up with when porting MSE to Java, is a much simpler mmmodel.
I documented it on the wiki
http://smallwiki.unibe.ch/moose/mse/msemmmodel/
would be nice to make this the new mmmodel of moose and get rid of all the EMOF bloat.
by the way, a Java implementation is in its first draft, if you are interested contact me.
cheers, AA _______________________________________________ Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Good point.
MSE is a subset of EMOF, so all our models can be transformable to EMOF compliant models without lose of infromation.
The other way round: I only removed stuff not used in Famix, and beyond that, well .. there are some more constraints on what we can accept, for example multiple inheritance will have to be flattened etcetera.
Currently, there is a ch.akuhn.mse.generation.Transformation class that transforms EMOF compliant models to MSE compliant models.
AA
On 10 Oct 2007, at 13:27 , Frank Buchli wrote:
Hi Adrian
EMOF has the advantage that it is nowadays a quasi standard. Dealing with a new model makes it easier to realize your new ideas, making performance optimization, etc. but harder to interact / exchange with other tools. Consider this while making your decision.
All the best
Frank
Adrian Kuhn wrote:
Dear Moosers,
I was pondering over Famix and found that it only uses 20% of EMOF's features. As it seems, the E in EMOF is not really standing for essential :)
What I came up with when porting MSE to Java, is a much simpler mmmodel.
I documented it on the wiki
http://smallwiki.unibe.ch/moose/mse/msemmmodel/
would be nice to make this the new mmmodel of moose and get rid of all the EMOF bloat.
by the way, a Java implementation is in its first draft, if you are interested contact me.
cheers, AA _______________________________________________ Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Hi adrian
I'm confused why are you talking about famix? I thought you were talking about Meta.
Now about msemmmodel, why don't you have operation (or something related that would be useful to hook behavior)?
Dear Moosers,
I was pondering over Famix and found that it only uses 20% of EMOF's features. As it seems, the E in EMOF is not really standing for essential :)
What I came up with when porting MSE to Java, is a much simpler mmmodel.
I documented it on the wiki
http://smallwiki.unibe.ch/moose/mse/msemmmodel/
would be nice to make this the new mmmodel of moose and get rid of all the EMOF bloat.
by the way, a Java implementation is in its first draft, if you are interested contact me.
cheers, AA _______________________________________________ Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
On 10 Oct 2007, at 16:28 , Stéphane Ducasse wrote:
I'm confused why are you talking about famix? I thought you were talking about Meta.
Famix is meta-described in EMOF, but does only use 20% of what EMOF can do. For example, we do not use
- multiple inheritance - other multiplicity than 0..1 or 0..* - the set and unqiue property of properties - the id property - parameters (hence all our operations are equivalent to derived properties) - etc... - ...
Now about msemmmodel, why don't you have operation (or something related that would be useful to hook behavior)?
The design decision behind MSE mmmodel is very simple: if a EMOF feature was not used anywhere in any extensions of Famix, I removed it. As none of the operations in Famix had any Parameter, all are equivalent to properties.
cheers, AA
Hi,
actually I am using EMOF to generate Glorp descriptor in my MetaDB, but it is also true that I don't use any of the listed EMOF properties. I am just wondering why moving to a more simple (but I guess less general) mmmodel...
cheers Marco
Adrian Kuhn wrote:
On 10 Oct 2007, at 16:28 , Stéphane Ducasse wrote:
I'm confused why are you talking about famix? I thought you were talking about Meta.
Famix is meta-described in EMOF, but does only use 20% of what EMOF can do. For example, we do not use
- multiple inheritance
- other multiplicity than 0..1 or 0..*
- the set and unqiue property of properties
- the id property
- parameters (hence all our operations are equivalent to derived
properties)
- etc...
- ...
Now about msemmmodel, why don't you have operation (or something related that would be useful to hook behavior)?
The design decision behind MSE mmmodel is very simple: if a EMOF feature was not used anywhere in any extensions of Famix, I removed it. As none of the operations in Famix had any Parameter, all are equivalent to properties.
cheers, AA
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
In fact I would prefer not to move to a simpler metamodel or at least make sure that just by using namespace import we can really swap between the two metamodels and do not see any difference.
Yes marco I asking myself the same :) Even if the exercise is fun.
Stef On 10 oct. 07, at 17:53, Marco D'Ambros wrote:
Hi,
actually I am using EMOF to generate Glorp descriptor in my MetaDB, but it is also true that I don't use any of the listed EMOF properties. I am just wondering why moving to a more simple (but I guess less general) mmmodel...
cheers Marco
Adrian Kuhn wrote:
On 10 Oct 2007, at 16:28 , Stéphane Ducasse wrote:
I'm confused why are you talking about famix? I thought you were talking about Meta.
Famix is meta-described in EMOF, but does only use 20% of what EMOF can do. For example, we do not use
- multiple inheritance
- other multiplicity than 0..1 or 0..*
- the set and unqiue property of properties
- the id property
- parameters (hence all our operations are equivalent to derived
properties)
- etc...
- ...
Now about msemmmodel, why don't you have operation (or something related that would be useful to hook behavior)?
The design decision behind MSE mmmodel is very simple: if a EMOF feature was not used anywhere in any extensions of Famix, I removed it. As none of the operations in Famix had any Parameter, all are equivalent to properties.
cheers, AA
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
On 10 Oct 2007, at 17:53 , Marco D'Ambros wrote:
actually I am using EMOF to generate Glorp descriptor in my MetaDB, but it is also true that I don't use any of the listed EMOF properties.
Then the only thing that will change in your code is the import stmt :)
I am just wondering why moving to a more simple (but I guess less general) mmmodel...
Less code, less maintenance.
cheers Marco
On 10 oct. 07, at 17:30, Adrian Kuhn wrote:
On 10 Oct 2007, at 16:28 , Stéphane Ducasse wrote:
I'm confused why are you talking about famix? I thought you were talking about Meta.
Famix is meta-described in EMOF, but does only use 20% of what EMOF can do. For example, we do not use
- multiple inheritance
- other multiplicity than 0..1 or 0..*
- the set and unqiue property of properties
- the id property
- parameters (hence all our operations are equivalent to derived
properties)
- etc...
- ...
Ok I understand what you meant
Now about msemmmodel, why don't you have operation (or something related that would be useful to hook behavior)?
The design decision behind MSE mmmodel is very simple: if a EMOF feature was not used anywhere in any extensions of Famix, I removed it. As none of the operations in Famix had any Parameter, all are equivalent to properties.
cheers, AA
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Dear all,
Stephane sent us a couple of weeks ago (months?) MSE files and we started to implement a parser to read these files and instantiate a model of the systems described in the files conform to our meta-model, PADL (similar to UML, FAMIX...) but developed in-house.
We have some questions regarding the content of the files... I deeply apologise if these questions are already answered (or obvious), if so could you please give us the appropriate pointers?
- what means "(stub false)" in "FAMIX.InheritanceDefinition" and other definitions?
- what are "FAMIX.Access"?
- what is the difference/similarity of "(candidate (idref: 37))" and "(invokes 'yourself()')" in a "FAMIX.Invocation"?
- what to do when there is no "(receivingVariable (idref: 24))" in a "FAMIX.Invocation"?
- what means "(hasClassScope false)" in a "FAMIX.Attribute"?
- what is a "FAMIX.FormalParameter" and are they referenced in "FAMIX.Invocation"?
- what is a "FAMIX.LocalVariable" and are they references in "FAMIX.Method"?
All the best, Yann-Gael
Hi Yann-Gael,
Stephane sent us a couple of weeks ago (months?) MSE files and we started to implement a parser to read these files and instantiate a model of the systems described in the files conform to our meta-model, PADL (similar to UML, FAMIX...) but developed in-house.
Excellent! I answered your questions below. Please feel free to ask more of them. We actually welcome them :).
You can find a UML diagram of the current FAMIX implementation:
Please note that a FAMIX 3.0 is in the works: http://smallwiki.unibe.ch/moose/famix3.0/
We would like it to become a strong standard in reengineering, and that is why we want it to be a group effort. Currently several groups participate (see the webpage). If you want to participate, you can send us the description of PADL.
- what means "(stub false)" in "FAMIX.InheritanceDefinition" and other
definitions?
"stub" denotes entities that are in the model, but that are not part of the system under analysis. However, this makes more sense for structural entities, like FAMIX.Class, and less for relationships. In Moose, there is no analysis that takes stub relationships into account.
- what are "FAMIX.Access"?
A FAMIX.Access represents how a variable is accessed by a method/ function. So, if you have something like "method() { ... anObject ... }", then you will get a FAMIX.Access that has anObject variable as "accesses" and method as "accessedIn".
- what is the difference/similarity of "(candidate (idref: 37))" and
"(invokes 'yourself()')" in a "FAMIX.Invocation"?
In dynamically typed languages, it happens that we not know for sure which method is actually invoked. So, in this case, we compute several "candidates". So, the "candidate" property is a collection of pointers to FAMIX.Method / Function. "invokes" on the other hand represents just the string of the call.
- what to do when there is no "(receivingVariable (idref: 24))" in a
"FAMIX.Invocation"?
There are two possibilities. Either the parser did not work for some reason, or the call is to a function, and not to a method. In any case, our analyses hardly depend on the receivingVariable information.
- what means "(hasClassScope false)" in a "FAMIX.Attribute"?
hasClassScope corresponds with "static" in Java.
- what is a "FAMIX.FormalParameter" and are they referenced in
"FAMIX.Invocation"?
FAMIX.FormalParameter represents parameters of a method/function. As variables, they can be the receivingVariable of an invocation.
- what is a "FAMIX.LocalVariable" and are they references in
"FAMIX.Method"?
FAMIX.LocalVariable represents a variable that is defined locally in a method or a function, so LocalVariable "belongsTo" a FAMIX.Method/ Function.
Cheers, Doru
-- www.iam.unibe.ch/~girba www.iam.unibe.ch/~girba/blog/
"It's not what we do that matters most, it's how we do it."
----- Original Message ----- From: "Tudor Girba" girba@iam.unibe.ch
We would like it to become a strong standard in reengineering, and that is why we want it to be a group effort. Currently several groups participate (see the webpage). If you want to participate, you can send us the description of PADL.
@Doru, Yann sent me that already, you should also have a copy
On 10 oct. 07, at 12:55, Adrian Kuhn wrote:
<PADLMetaModel.png>
AA
He he. Indeed I already have it :)
Doru
On Oct 16, 2007, at 9:57 AM, A. Kuhn wrote:
----- Original Message ----- From: "Tudor Girba" girba@iam.unibe.ch
We would like it to become a strong standard in reengineering, and that is why we want it to be a group effort. Currently several groups participate (see the webpage). If you want to participate, you can send us the description of PADL.
@Doru, Yann sent me that already, you should also have a copy
On 10 oct. 07, at 12:55, Adrian Kuhn wrote:
<PADLMetaModel.png>
AA
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
-- www.iam.unibe.ch/~girba www.iam.unibe.ch/~girba/blog/
"Beauty is where we see it."
Hi Yann, Hi all
Since two weeks, there is implementation of MSE and Famix in Java, which can be used to load MSE files and learn more about FAMIX 2.2 without having to be a Smalltalk guru.
https://www.iam.unibe.ch/scg/svn_repos/akuhn/MSE/
- what are "FAMIX.Access"?
A FAMIX.Access represents how a variable is accessed by a method/ function. So, if you have something like "method() { ... anObject ... }", then you will get a FAMIX.Access that has anObject variable as "accesses" and method as "accessedIn".
Please note that in FAMIX 2, the property FAMIX.Access.accesses can refer not only to structural entities (ie attributes, variables and globals) but alas also to classes or namespaces! Yet another Smalltalk oddity :)
This will change in FAMIX 3.0, accesses to classes or namespaces will be modeled with a new FAMIX.Reference entity. And FAMIX.Access.accesses restricted to structural entities only.
- what is the difference/similarity of "(candidate (idref: 37))" and
"(invokes 'yourself()')" in a "FAMIX.Invocation"?
In dynamically typed languages, it happens that we not know for sure which method is actually invoked. So, in this case, we compute several "candidates". So, the "candidate" property is a collection of pointers to FAMIX.Method / Function. "invokes" on the other hand represents just the string of the call.
The same for static typing when methods are overwritten! For example the following invocation
Object o; o.toString();
would have (invokes 'toString()') and have ALL implementations of toString as candidates.
Personally I am not happy with that way of modelling invocations, but did not yet figure out how we can do better.
- what to do when there is no "(receivingVariable (idref: 24))" in a
"FAMIX.Invocation"?
There are two possibilities. Either the parser did not work for some reason, or the call is to a function, and not to a method. In any case, our analyses hardly depend on the receivingVariable information.
Third reason (and by far the most common!) is that the invocation was sent to an intermediate result rather than a variable, for example the following coll to length()
String a = "a"; String b = "b"; ("a" + "b").length();
or another example, the following call to next()
Collection coll; coll.iterator().next();
- what means "(hasClassScope false)" in a "FAMIX.Attribute"?
hasClassScope corresponds with "static" in Java.
- what is a "FAMIX.FormalParameter" and are they referenced in
"FAMIX.Invocation"?
FAMIX.FormalParameter represents parameters of a method/function. As variables, they can be the receivingVariable of an invocation.
- what is a "FAMIX.LocalVariable" and are they references in
"FAMIX.Method"?
FAMIX.LocalVariable represents a variable that is defined locally in a method or a function, so LocalVariable "belongsTo" a FAMIX.Method/ Function.
cheers, AA
A FAMIX.Access represents how a variable is accessed by a method/ function. So, if you have something like "method() { ... anObject ... }", then you will get a FAMIX.Access that has anObject variable as "accesses" and method as "accessedIn".
Please note that in FAMIX 2, the property FAMIX.Access.accesses can refer not only to structural entities (ie attributes, variables and globals) but alas also to classes or namespaces! Yet another Smalltalk oddity :)
Why oddity? In java you cannot have a field pointing to a class?
This will change in FAMIX 3.0, accesses to classes or namespaces will be modeled with a new FAMIX.Reference entity. And FAMIX.Access.accesses restricted to structural entities only.
will you change the name because I always hated this accesses for non collection.
- what is the difference/similarity of "(candidate (idref: 37))" and
"(invokes 'yourself()')" in a "FAMIX.Invocation"?
In dynamically typed languages, it happens that we not know for sure which method is actually invoked.
even in statically type ones just cast to Object.
So, in this case, we compute several "candidates". So, the "candidate" property is a collection of pointers to FAMIX.Method / Function. "invokes" on the other hand represents just the string of the call.
The same for static typing when methods are overwritten! For example the following invocation
Object o; o.toString();
would have (invokes 'toString()') and have ALL implementations of toString as candidates.
Personally I am not happy with that way of modelling invocations, but did not yet figure out how we can do better.
- what to do when there is no "(receivingVariable (idref: 24))" in a
"FAMIX.Invocation"?
There are two possibilities. Either the parser did not work for some reason, or the call is to a function, and not to a method. In any case, our analyses hardly depend on the receivingVariable information.
Third reason (and by far the most common!) is that the invocation was sent to an intermediate result rather than a variable, for example the following coll to length()
String a = "a"; String b = "b"; ("a" + "b").length();
or another example, the following call to next()
Collection coll; coll.iterator().next();
- what means "(hasClassScope false)" in a "FAMIX.Attribute"?
hasClassScope corresponds with "static" in Java.
- what is a "FAMIX.FormalParameter" and are they referenced in
"FAMIX.Invocation"?
FAMIX.FormalParameter represents parameters of a method/function. As variables, they can be the receivingVariable of an invocation.
- what is a "FAMIX.LocalVariable" and are they references in
"FAMIX.Method"?
FAMIX.LocalVariable represents a variable that is defined locally in a method or a function, so LocalVariable "belongsTo" a FAMIX.Method/ Function.
cheers, AA
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Stéphane Ducasse wrote:
A FAMIX.Access represents how a variable is accessed by a method/ function. So, if you have something like "method() { ... anObject ... }", then you will get a FAMIX.Access that has anObject variable as "accesses" and method as "accessedIn".
Please note that in FAMIX 2, the property FAMIX.Access.accesses can refer not only to structural entities (ie attributes, variables and globals) but alas also to classes or namespaces! Yet another Smalltalk oddity :)
Why oddity? In java you cannot have a field pointing to a class?
The odd thing is that for "AClass>>method BClass new" an access from AClass to BClass is created. (what probably should be called a reference to BClass...
This will change in FAMIX 3.0, accesses to classes or namespaces will be modeled with a new FAMIX.Reference entity. And FAMIX.Access.accesses restricted to structural entities only.
will you change the name because I always hated this accesses for non collection.
- what is the difference/similarity of "(candidate (idref: 37))" and
"(invokes 'yourself()')" in a "FAMIX.Invocation"?
In dynamically typed languages, it happens that we not know for sure which method is actually invoked.
even in statically type ones just cast to Object.
Euhm.... the first part of this sentence is absolutely right... on the other hand I don't really get why you added the second part. If functionality of a class A is overwritten in a subclass B and C, given an object currently cast to type A, if we call that given functionality it is possible (depending on the actual type of the object) that the version of B or C is executed.
So, in this case, we compute several "candidates". So, the "candidate" property is a collection of pointers to FAMIX.Method / Function. "invokes" on the other hand represents just the string of the call.
The same for static typing when methods are overwritten! For example the following invocation
Object o; o.toString();
would have (invokes 'toString()') and have ALL implementations of toString as candidates.
Personally I am not happy with that way of modelling invocations, but did not yet figure out how we can do better.
- what to do when there is no "(receivingVariable (idref: 24))" in a
"FAMIX.Invocation"?
There are two possibilities. Either the parser did not work for some reason, or the call is to a function, and not to a method. In any case, our analyses hardly depend on the receivingVariable information.
Third reason (and by far the most common!) is that the invocation was sent to an intermediate result rather than a variable, for example the following coll to length()
String a = "a"; String b = "b"; ("a" + "b").length();
or another example, the following call to next()
Collection coll; coll.iterator().next();
- what means "(hasClassScope false)" in a "FAMIX.Attribute"?
hasClassScope corresponds with "static" in Java.
- what is a "FAMIX.FormalParameter" and are they referenced in
"FAMIX.Invocation"?
FAMIX.FormalParameter represents parameters of a method/function. As variables, they can be the receivingVariable of an invocation.
- what is a "FAMIX.LocalVariable" and are they references in
"FAMIX.Method"?
FAMIX.LocalVariable represents a variable that is defined locally in a method or a function, so LocalVariable "belongsTo" a FAMIX.Method/ Function.
cheers, AA
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
----- Original Message ----- From: "Stéphane Ducasse" stephane.ducasse@univ-savoie.fr
Please note that in FAMIX 2, the property FAMIX.Access.accesses can refer not only to structural entities (ie attributes, variables and globals) but alas also to classes or namespaces! Yet another Smalltalk oddity :)
Why oddity? In java you cannot have a field pointing to a class?
As classes and namespaces are not real objects, you can not access them. You can store some reflection object describing a class in a field, but that would then just be a boring write access to a boring field, no cool oddness happening :)
This will change in FAMIX 3.0, accesses to classes or namespaces will be modeled with a new FAMIX.Reference entity. And FAMIX.Access.accesses restricted to structural entities only.
will you change the name because I always hated this accesses for non collection.
Yes, will change! the naming will be more consistent.
cheers, AA
Hi Doru, all!
Thanks very much for your answers! Here is one thought: in the case of "a.foo().bar()", would it make sense to use a SSA-like approach to have a consistent use of "receivingVariable" in "FAMIX.Invocation"?
Cheers! Yann
Tudor Girba wrote:
Hi Yann-Gael,
Stephane sent us a couple of weeks ago (months?) MSE files and we started to implement a parser to read these files and instantiate a model of the systems described in the files conform to our meta-model, PADL (similar to UML, FAMIX...) but developed in-house.
Excellent! I answered your questions below. Please feel free to ask more of them. We actually welcome them :).
You can find a UML diagram of the current FAMIX implementation:
Please note that a FAMIX 3.0 is in the works: http://smallwiki.unibe.ch/moose/famix3.0/
We would like it to become a strong standard in reengineering, and that is why we want it to be a group effort. Currently several groups participate (see the webpage). If you want to participate, you can send us the description of PADL.
- what means "(stub false)" in "FAMIX.InheritanceDefinition" and other
definitions?
"stub" denotes entities that are in the model, but that are not part of the system under analysis. However, this makes more sense for structural entities, like FAMIX.Class, and less for relationships. In Moose, there is no analysis that takes stub relationships into account.
- what are "FAMIX.Access"?
A FAMIX.Access represents how a variable is accessed by a method/ function. So, if you have something like "method() { ... anObject ... }", then you will get a FAMIX.Access that has anObject variable as "accesses" and method as "accessedIn".
- what is the difference/similarity of "(candidate (idref: 37))" and
"(invokes 'yourself()')" in a "FAMIX.Invocation"?
In dynamically typed languages, it happens that we not know for sure which method is actually invoked. So, in this case, we compute several "candidates". So, the "candidate" property is a collection of pointers to FAMIX.Method / Function. "invokes" on the other hand represents just the string of the call.
- what to do when there is no "(receivingVariable (idref: 24))" in a
"FAMIX.Invocation"?
There are two possibilities. Either the parser did not work for some reason, or the call is to a function, and not to a method. In any case, our analyses hardly depend on the receivingVariable information.
- what means "(hasClassScope false)" in a "FAMIX.Attribute"?
hasClassScope corresponds with "static" in Java.
- what is a "FAMIX.FormalParameter" and are they referenced in
"FAMIX.Invocation"?
FAMIX.FormalParameter represents parameters of a method/function. As variables, they can be the receivingVariable of an invocation.
- what is a "FAMIX.LocalVariable" and are they references in
"FAMIX.Method"?
FAMIX.LocalVariable represents a variable that is defined locally in a method or a function, so LocalVariable "belongsTo" a FAMIX.Method/ Function.
Cheers, Doru
-- www.iam.unibe.ch/~girba www.iam.unibe.ch/~girba/blog/
"It's not what we do that matters most, it's how we do it."
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev