[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.modeling.mdt.uml2] Re: Question about extending classes with multiple stereotypes

I was curious about this issue as I had never noticed that feature before. I decided to implement support for abstract stereotypes and required extensions in the TextUML Toolkit. See:

http://abstratt.com/blog/2008/11/11/feature-required-extensions-for-stereotypes/

But back to the topic - from what I observed when playing with the latest TextUML Toolkit implementation (based on UML2 2.2):

1) a required extension causes the declaring stereotype to be implicitly applied to all instances of the extended metaclass on a package where the defining profile is applied;
2) that effect applies only to the stereotype declaring the extension, not to any substereotypes (which makes a lot of sense), which still must be applied explicitly;
3) as with other kinds of classifiers, abstract stereotypes cannot be instantiated (applied), which also makes a lot of sense;


Corollary: making an abstract stereotype declare a required extension has no effect whatsoever, and thus is pointless.

Finally, for two stereotypes A and B, where B specializes A, it seems to be legal to apply both B and A to a target metaclass instance. So even if "3" above was not true, or if you made your base stereotype non-abstract, it would be valid to apply the substereotypes. This does not seem to be covered by the UML specification.

Granted, much of what is said above is based on observation of the behavior of the MDT UML2 implementation, but I think that the observed behavior makes a lot of sense, and seems to be well aligned with the UML spec.

Also, maybe there should be a constraint in the UML spec that ensured that abstract stereotypes did not declare required extensions.

Does this all make sense?

Cheers,

Rafael

James Bruck wrote:
Hi Alex,

I think you are right when you say: For I guessed multiple stereotypes for metaclasses are only possible if you make an extension for each one?
The Element.isStereotypeApplicable(), is implemented that way and I also confirmed this by playing around with the UML editor.


You are correct in creating a required stereotype by setting the lower bound of the extension end to 1. Extension::isRequired() checks the lower bound of the first owned end.

So I'm not sure why you can succesfully apply the second stereotype as you mention.

Can you post a small piece of your profile and model so I can see what exactly is going on.

Cheers,
- James.




"Alex " <eistoeter@xxxxxx> wrote in message news:99faa26dde1e9bb59c698d7f755fc70e$1@xxxxxxxxxxxxxxxxxx
Hi

I made a custom uml profile for our models. At the moment it only contains three stereotypes. One is abstract and the other two inherit from this abstract stereotype.

I then established an extension for uml::Class and linked it with the abstract stereotype. I also made it be a required extension, so the multiplicity of the extension end ist 1...1

Now I assumed this means that any class in my model must ALWAYS HAVE EXACTLY ONE stereotype that inherits from my abstract stereotype.

But still it is possible to say:

umlClass.applyStereotype(ConcreteStereotype1);
umlClass.applyStereotype(ConcreteStereotype2);

Then my umlClass will have both stereotypes assigned. Is this a bug? For I guessed multiple stereotypes for metaclasses are only possible if you make an extension for each one?

Can someone bring light into this?

Best regards