Hi,
Cool that you started this because a part of it is slightly wrong :). This means that this
effort is highly needed. Of course, we knew that beforehand, but it is great to have it
clear.
On 18 Sep 2011, at 19:02, Stéphane Ducasse wrote:
We have:
-------
MooseEntity is an abstract entity. Entities should subclass this class.
The state instance variable provides a mechanism for extending the state of entities.
Proposition:
----------
MooseEntity is an abstract class that refines MooseElement. Model entities should be
instances of subclasses this class.
MooseEntity provides means to add state for model extensions as well as meta information.
The state extension is provided through MooseEntityState (see MooseEntityState). Using
this mechanism, a package can extend an entity to add more state. This extension will only
be visible when the package is loaded.
Any MooseEntity can extended with property that is
described using the FAME meta model.
Here is an example: FAMIXAttribute defined the property AHNL as follow using the pragma
<property:longName:description:>
This is wrong now. See:
http://code.google.com/p/moose-technology/issues/detail?id=706
FAMIXAttribute>>hierarchyNestingLevel
<property: #AHNL longName: 'Attribute hierarchy nesting level'
description: 'The hierarchy nesting level of an attribute.'>
^self
lookUpPropertyNamed: #AHNL
computedAs: [self belongsTo hierarchyNestingLevel]
I would prefer to have less hardcoded examples. So, maybe like this:
---
YourEntity>>yourExtendingAttribute
<MSEProperty: #yourExtendingAttribute type: #YourType>
^ self privateState attributeAt: #yourExtendingAttribute
YourEntity>>yourExtendingAttribute: aValue
<MSEProperty: #yourExtendingAttribute type: #YourType>
^ self privateState attributeAt: #yourExtendingAttribute put: aValue
---
Furthermore, I think we should split the comment into conceptual and implementation part
because when looking at the entity from the MetaBrowser point of view, you want to know
how to use it, not how to implement it.
In addition, any MooseEntity can also be annotated
with navigation declarations (which are used by the user interface to propose navigation
options to the user).
For example, the class FAMIXClass can define the navigation 'Accessor Methods' as
follows
FAMIXClass>>accessorMethodsGroup
<navigation: 'Accessor methods'>
^ FAMIXMethodGroup withAll: (self accessorMethods) withDescription: 'Pure accessors
in ', self name
The pragma <navigation:> declares that the method accessorMethodsGroup is the
method to invoke to get the associated navigation.
The method navigationSelectors (see below) returns the list of methods declaring
navigation of a given MooseEntity.
This <navigation:> is more of a secondary point and I would not put it in here.
Finally, MooseEntity provides the possibility to add
simple annotations (we call properties to avoid clash name with Java annotations),
No. These are really properties.
to any moose model element. For example, a new
information can be added to any model entity and it should be accessible. Like for example
a comment. Note that such a solution does not use FAME based description and as such will
not appear when we will query the declared properties.
propertyNamed: name
propertyNamed: name put: value
Have a look at the test testProperty for an example of property use.
Some API:
description
returns the description (FAME instance) described the receiver.
This is mooseDescription. This is indeed important.
allDeclaredProperties
return the properties (FAME instances) that describe the receiver. The properties are
defined using <property:longName:description:>.
This is an obsolete method.
navigationSelectors
Return the list of methods that support the receiver navigation.
This is more of a helper method. I would rather keep it internally and not advertise it
much.
For example FAMIXClass instance can be navigated via
#(#outgoingInvocationsGroup #allExternalMultiplications #invokedClasses
#allExternalDuplications #clientClasses #invokingClasses #allMultiplications
#allInternalDuplications #abstractMethodsGroup #providerClasses
#allInternalMultiplications #accessorMethodsGroup #allDuplicatingClasses
#incomingAccessesGroup #subclassHierarchyGroup #superclassHierarchyGroup #methodsGroup
#withSuperclassHierarchyGroup #withSubclassHierarchyGroup #classes)
Try: FAMIXClass allInstances first navigationSelectors.
allPropertySelectors
Return a dictionary with all properties of the entity, including metamodel properties,
metrics, and navigation groups.
Keys are abstract names of properties, values are implementing selectors.
for example: #ATFD -> #numberOfAccessesToForeignData means that ATDF is computed by
invoking the method #numberOfAccessesToForeignData.
This is an obsolete method.
Cheers,
Doru
The state instance variable provides a mechanism for
extending the state of entities.
_______________________________________________
Moose-dev mailing list
Moose-dev(a)iam.unibe.ch
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
--
www.tudorgirba.com
"There are no old things, there are only old ways of looking at them."