I was wondering how to put Java Annotations in an UML schema.
Turns out there is no support for it, but some smart people gave it a try anyway and wrote it down in a paper1. Of course they are using the already existing possibilities of UML, so the UML does not exactly match up with the idea of Annotations.
Annotations can be applied to declarations: declarations of classes, fields, methods, and other program elements. Since Java 8, also annotations are supported anywhere a type is used2.
However, some people3 do have a valid point when they say that modelling Annotations might be a severe case of micromodelling.
PlantUML
It's not a secret that I am a fan of plantuml4, and all the pretty pictures on this page are dynamically created by the PlantUML Online Server5 that they have running. Which also means, if the pictures are not visible, the server is down.
I wanted to see how far I could take PlantUML in processing the ideas in the paper.
1. Attributes as UML Stereotypes
class Mail <<@FunctionalInterface>> <<@Table(name = "mm_mailtable")>> {
-@Id id: Long
-@NotNull @Column subject: String
+getId(): Long
+setId(id: Long)
}
@enduml
2. Attributes as extra class subbox
class Mail {
@Entity
@Table(name = "mm_mailtable")
--
-@NotNull @Column subject: String
--
+getId(): Long
+setId(id: Long)
}
@enduml
3. Attributes as UML Template Parameter
class Mail <@Entity \n @Table(name = "mm_mailtable")> {
-@Id id: Long
-@NotNull @Column subject: String
--
+getId(): Long
+setId(id: Long)
}
@enduml
4. Attributes as separate Class
class Mail {
-@Id id: Long
-@NotNull @Column subject: String
--
+getId(): Long
+setId(id: Long)
}
class "@Entity \n @Table(name = "mm_mailtable")" as Entity
Entity - Mail : <<annotated>>
@enduml
5. Attributes as Comment boxes
class Mail {
-@Id id: Long
-@NotNull @Column subject: String
--
+getId(): Long
+setId(id: Long)
}
note right
@Entity
@Table(name = "mm_mailtable")
end note
@enduml
Conclusion
My personal opinion is that UML Stereotypes folllows the Java class most narrowly, so I like that. But I think the "Annotations as a separate class" follows UML conventions quite good.
The paper contains a nice table where they are considering the pros and cons of all the methods described above.
As there seems no standard defined in UML, if you need to model Annotations at all (and that's a big if), pick the one you like.
References
- [1] Representing Explicit Attributes in UML
- http://dawis2.icb.uni-due.de/events/AOM_MODELS2005/Cepa.pdf
- [2] Oracle Tutorial - Annotations
- https://docs.oracle.com/javase/tutorial/java/annotations/basics.html
- [3] CodeRanch - UML / Class Diagram Syntax for Java Annotations
- https://coderanch.com/t/100641/UML-Class-Diagram-Syntax-Java
- [4] Plantuml
- http://plantuml.com/
- [5] Plantuml Online Server
- http://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000
- GitHUb - Mail.java
- https://github.com/maartenl/Land-of-Karchan/blob/master/karchangame/src/main/java/mmud/database/entities/game/Mail.java