Hi,
I am afraid that the documentation about fame (and few other moose things like the moose algorithms) has vanished with the old Moose website… If someone can make it available again, it will be nice.
But, to give more usage examples:
- FMMultivalueLink
Used to create 1 to n links between famix elements. Example with inheritance where a FAMIXInheritance has a link to 1 FAMIXType and where FAMIXType have 1 link to n FAMIXInheritances:
In FAMIXInheritance (subclass is an instance variable):
FAMIXInheritance >>subclass
<MSEProperty: #subclass
type: #FAMIXType opposite: #superInheritances>
<MSEComment: 'Subclass linked to in this relationship. from-side of the association'>
^subclass
FAMIXInheritance >>
subclass: aType
subclass := FMMultivalueLink on: self
update: #superInheritances
from: self
subclass
to: aType
In: FAMIXType (superInheritances is an instance variable)
FAMIXType >>initialize
superInheritances := FMNullMultivalueLink on: self opposite: #subclass: selector: #superInheritances.
FAMIXType >>superInheritances
<MSEProperty: #superInheritances
type: #FAMIXInheritance
opposite: #subclass> <multivalued> <derived>
<MSEComment: 'Superinheritance relationships, i.e. known superclasses of this type.'>
^superInheritances
FAMIXType >>
superInheritances: anInheritance
superInheritances value: anInheritance
- FMMultiMultivalueLink. To create n to n associations. Example:
In
FAMIXInvocations (candidates is an instance variable):
FAMIXInvocations >>
initialize
candidates := FMMultiMultivalueLink on: self opposite: #incomingInvocations.
FAMIXInvocations >>
candidates
<MSEProperty: #candidates
type: #FAMIXBehaviouralEntity
opposite: #incomingInvocations> <multivalued>
<MSEComment: 'List of candidate behavioural entities for receiving the invocation'>
^candidates
FAMIXInvocations >>
candidates: aCollection
candidates value: aCollection
In FAMIXBehaviouralEntity (incomingInvocations is an instance variable):
FAMIXBehaviouralEntity >>
initialize
incomingInvocations := FMMultiMultivalueLink on: self opposite: #candidates.
FAMIXBehaviouralEntity >>
incomingInvocations
<MSEProperty: #incomingInvocations
type: #FAMIXInvocation
opposite: #candidates> <multivalued> <derived>
<MSEComment: 'Incoming invocations from other behaviours computed by the candidate operator.'>
^incomingInvocations
FAMIXBehaviouralEntity >>
incomingInvocations: anInvocation
incomingInvocations value: anInvocation
- FMNullMultivalueLink: used to reduce memory consumption (see other answers)
- <multivalued>: used to describe in the meta model that the return value is a collection of entities and no only one entity.
- <derived>: as said by Guillaume: “is for things that don't require to be stored in the .mse for example because you can derive it (compute) from other data”
Example:
numberOfAccesses
<MSEProperty: #numberOfAccesses type: #Number>
<derived>
<MSEComment: 'The number of accesses from a method'>
^ self
lookUpPropertyNamed: #numberOfAccesses
computedAs: [ self accesses size ]
I know that the colors are flashy but it is to better understand the links between the names.
All these pragmas are mandatory to describe relations in Fame Meta Meta Model and should be provided accurately.
And you should put something like:
annotation
<MSEClass: #BehaviouralEntity super: #FAMIXContainerEntity>
<package: #FAMIX>
^self
On class side of your Moose classes to reference them in the meta model.
After a change in the pragmas, do : MooseModel resetMeta It avoid a lots of problems ;)
Don’t hesitate if you have more questions,
Cheers,
Vincent
> -----Message d'origine-----
> De : moose-dev-bounces@list.inf.unibe.ch [mailto:moose-dev-
> bounces@list.inf.unibe.ch] De la part de Anne Etien
> Envoyé : vendredi 1 juillet 2016 17:10
> À : Moose-related development
> Objet : [Moose-dev] Re: Documentation about Fame?
>
> Hi,
>
> We asked for an engineer to modify it. We do not know yet if we got it or not.
>
> What I do is that I use the example of Famix for ST to create my own FAMIX.
> <mutivalued> means that the maximal multiplicity is *. In that case, you need
> FMMultiValueLink. But when you want to initiate one FMMultivalueLink to
> null, you create a FMNullMultiValueLink.
> I don’t really know when there is <derived> or not.
>
> Anne
>
>
>
> Le 1 juil. 2016 à 16:47, Alexandre Bergel <alexandre.bergel@me.com> a écrit :
>
> > hi
> >
> > Is there at least a bit of documentation about Fame?
> > I am trying to meta-describes some C elements, but it is very difficult.
> > All these are very mysterious:
> > FMNullMultivalueLink,
> > FMMultivalueLink
> > FMMultiMultivalueLink
> > <multivalued>
> > <derived>
> >
> > I feel Fame is very powerful, but very hard to understand.
> >
> > Alexandre
> > --
> > _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> > Alexandre Bergel http://www.bergel.eu
> > ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
> >
> >
> >
> > _______________________________________________
> > Moose-dev mailing list
> > Moose-dev@list.inf.unibe.ch
> > https://www.list.inf.unibe.ch/listinfo/moose-dev
>
> _______________________________________________
> Moose-dev mailing list