Search code examples
umlclass-diagram

Service Class representation in UML


I have three classes one is called

WorkCoordinator and it calls different service classes depending on an event passed to it, so if the event is trackIssue there is a TrackService class that handles some operations specifically for tracking and there is also a Track object. So you could have the following

WorkCoordinator -- (track issue) --> TrackService (has a list of Track objects)

How would you correctly represent these three in a UML diagram ? where everything starts with the workcoordinator which uses a TrackService and TrackService may have a function like add(Track track), where you would pass it a Track object to add to an array list within it say:

private ArrayList<Track> tracks;

and as add gets called, then a track is added to tracks.

Appreciate any insights, I was thinking something like this but may be totally wrong.

enter image description here


Solution

  • I have three classes one is called

    Contrarily to an operation a class cannot be called, but it can be used.

    WorkCoordinator -- (track issue) --> TrackService

    when the event string is trackIssue the class WorkCoordinator uses the class TrackingService, but how ? Because in your diagram the class TrackingService only has the operation add that means that operation is called, even I have some doubt about that, more the fact we don't know from where the instance of Track given in argument comes from. If an other operation is called add it in the diagram.

    About your diagram :

    • the role of the line between WorkCoordinator and TrackingService is unknown as it is, and then invalid. Because of the attribute trackingService probably you wanted to also show it as a relation, in that case the relation must completed.

    • TrackingService has two lists of Track, one though the attribute trackItems and an other one through the relation tracks. This is probably not what you wanted, and trackItems must be renamed tracks or the reverse.

    • to show the same thing through an attribute and a relation is legal in UML, but quite heavy because the reader must check they are the same thing, I encourage you to use only one of them, and to favor the relation when both classes are drawn.

    • your aggregation says TrackingService is composed of Track, are you sure this is the case and an aggregation must be used ?

    How would you correctly represent these three in a UML diagram ?

    The class diagram does not indicate at all that when the processed event is trackIssue the operation add (or an other) is applied on trackingService (with the right argument). Of course you can add a note to say that, but that note is a free text and only human can understand it.

    To show that in a diagram you can use a sequence diagram or an activity diagram, depending on what you want to show.

    The sequence diagram showing what happens during the execution of process can be (supposing a new instance of Track is created to be given in argument to add) :

    enter image description here

    event is supposed to be the argument of process, to name the instance of TrackingService I used trackingService being the name of the attribute, and item represents the created instance of Track to use it in the message add.

    All of that seems vague, but this is normal because an interaction is not a behavior, and a sequence diagram focuses on message interchange between lifelines.

    If you want to fully model the behavior of the operation process without ambiguity you can use an activity, and the diagram can be :

    enter image description here


    Additional remarks :

    • An event is generally much more than a name like trackIssue, so the parameter of process is not a string or that string is a complex form.

    • Track has getter/setter for the id but not for the name, seems strange. Are you sure the id is not only set (with name) when an instance is created ?