annotation
According to the UML specification:
The name of the abstract classifier is shown in italics, where permitted by the font used. Alternatively, or in addition, an abstract classifier can be displayed using the text annotation {abstract} after or under its name.
Please note that the operation is not a Classifier. It still has the isAbstract attribute as BehavioralFeature, but specification 2.5 does not specify how to model the fact of abstractness. The old specifications (1.4.x) used the same method as for classifiers, and this is a widely recognized method showing an abstraction of an operation. Pay attention only that the elements of braces for functions are presented at the end of the line, and not just after the name (the classifier simply does not have another specification immediately after the name).
Perhaps the authors made a mistake in specification 2.5 to indicate the abstraction of Feature by mistake.
An abstract operation can, of course, have the appearance of visibility.
Of course, an operation can be abstract only if its containing classifier (the class in your case) is also abstract.
Lack of visibility
In general, visibility is not necessary in UML, that is, you can simply omit it. Just keep in mind that UML is a model, so it may ignore some irrelevant elements or may indicate them at a later stage in the modeling. Not to use any kind of visibility in UML does not allow to make any assumptions about its final vision.
On the other hand, if you do not use the visibility specification in the actual code (if allowed at all), there is some by default. for instance
- in Java it is a package (#) - in the understanding of UML, Java calls it "package-private",
- in C ++ you get a private function (-),
- in PHP such functions are considered as public (+)
etc.
source share