What’s the huge difference between include and extend in an usage instance diagram?
19 Responses 19
Extend is employed whenever an usage situation adds actions to some other first-class use situation.
As an example, imagine “Withdraw Cash” is an usage case of an Automated Teller Machine (ATM). “Assess Fee” http://datingranking.net/hispanic-dating would extend Withdraw Cash and describe the conditional “extension point” that is instantiated if the ATM individual does not bank during the ATM’s possessing institution. Realize that the fundamental “Withdraw money” use case stands by itself, minus the expansion.
Include is employed to extract usage instance fragments which are duplicated in numerous usage cases. The included usage situation cannot stay alone together with use that is original is maybe not complete without having the included one. This would be properly used sparingly and just in instances where the replication is significant and exists by design (in place of by coincidence).
For instance, the movement of activities that develops at the start of every ATM usage instance (as soon as the user puts within their ATM card, comes into their PIN, and it is shown the primary menu) could be an excellent prospect for an include.
This can be contentious nevertheless the â€œincludes will always and extends are oftenâ€ is a rather typical myth that has nearly bought out now whilst the meaning that is de-facto. Hereâ€™s a approach that is correctin my own view, and examined against Jacobson, Fowler, Larmen and 10 other sources).
Relationships are dependencies
One of the keys to Add and expand use instance relationships would be to recognize that, normal with the remainder of UML, the dotted arrow between usage cases is a dependency relationship. Iâ€™ll use the terms â€˜baseâ€™, â€˜includedâ€™ and â€˜extendingâ€™ to refer to your usage situation roles.
A base usage situation is based on the included use case(s); without it/them the bottom usage instance is incomplete whilst the included usage case(s) represent sub-sequences associated with conversation that could sometimes happen always OR. (this might be contrary to a misconception that is popular this, exactly what your usage situation shows constantly takes place in the primary situation and quite often occurs in alternative flows just is determined by that which you choose as your main situation; usage cases could easily be restructured to represent an unusual movement whilst the primary situation and also this should not make a difference).
Into the most useful training of just one method dependency the bottom usage situation is aware of (and relates to) the included use instance, however the included usage case shouldnâ€™t â€˜knowâ€™ about the beds base usage instance. That is why included usage situations may be: a) base use instances inside their very own right and b) provided by a number of base usage cases.
The extending usage instance is determined by the bottom usage instance; it literally runs the behavior described by the beds base usage instance. The beds base usage situation should really be a completely practical usage instance with its very own right (â€˜includeâ€™s included needless to say) with no expanding usage caseâ€™s functionality that is additional.
Extending usage instances may be used in many circumstances:
- The bottom usage situation represents the â€œmust have actuallyâ€ functionality of a project as the expanding usage instance represents optional (should/could/want) behavior. This is when the word optional is that is relevant whether or not to build/deliver instead of optional whether or not it sometimes operates included in the base usage situation series.
- In stage 1 you can easily deliver the base usage situation which satisfies certain requirements when this occurs, and stage 2 will include extra functionality described by the expanding usage situation. This will include sequences which are constantly or often done after period 2 is delivered (again contrary to popular myth).
- It can be utilized to extract away subsequences associated with the base usage situation, specially when they represent â€˜exceptionalâ€™ complex behavior along with its very own alternative flows.
One important factor to start thinking about is the fact that extending usage situation can â€˜insertâ€™ behavior in a number of places within the base usage caseâ€™s flow, not only in one single spot as an included usage instance does. This is exactly why, it really is extremely not likely that an use that is extending is supposed to be suitable to increase one or more base usage situation.
As to dependency, the expanding usage situation is based on the bottom usage situation and it is once more a one-way dependency, in other words. the beds base usage situation does not require any mention of the the expanding usage situation within the series. That does not mean you canâ€™t show the expansion points or add a x-ref to your expanding usage instance somewhere else into the template, nevertheless the base usage situation must certanly be in a position to work minus the expanding usage situation.
I hope Iâ€™ve shown that the misconception that is common of are often, extends are occasionallyâ€ is either incorrect or at most readily useful simplistic. This variation really makes more feeling in the event that you refactor the use case contents if you consider all the issues about the directionality of the arrows the misconception presents â€“ in the correct model itâ€™s just dependency and doesnâ€™t potentially change.