Guidelines:
Extend-Relationship
«extend»

Extend-Relationship |
An extend-relationship is a
relationship from an extension use case to a base use case, specifying how the behavior
defined for the extension use case can be inserted into the behavior defined for the base
use case. It is implicitly inserted in the sense that the extension is not shown in
the base use case. |
Topics
The extend-relationship connects an extension use case to a base use case. You define
where in the base to insert the extension by referring to extension points in the base use
case (see Guidelines: Use Case, the discussion on extension
points). The extension use case is often abstract, but does not have to be.
You can use the extensions for several purposes:
- To show that a part of a use case is optional, or potentially optional, system behavior.
In this way, you separate optional behavior from mandatory behavior in your model.
- To show that a subflow is executed only under certain (sometimes exceptional)
conditions, such as triggering an alarm.
- To show that there may be a set of behavior segments of which one or several may be
inserted at an extension point in a base use case. The behavior segments that are inserted
(and the order in which they are inserted) will depend on the interaction with the actors
during the execution of the base use case.
The extension is conditional, which means its execution is dependent on what has
happened while executing the base use case. The base use case does not control the
conditions for the execution of the extension the conditions are described within
the extend-relationship. The extension use case may access and modify attributes of the
base use case. The base use case, however, cannot see the extensions and may not access
their attributes.
The base use case is implicitly modified by the extensions. You can also say that the
base use case defines a modular framework into which extensions can be added, but the base
does not have any visibility of the specific extensions.
The base use case should be complete in and of itself, meaning that it should be
understandable and meaningful without any references to the extensions. However, the base
use case is not independent of the extensions, since it cannot be executed without the
possibility of following the extensions.
Example:

The use cases Place Conference Call and Show Caller Identity are
both extensions to the base use case Place Call.
In a phone system, the primary service provided to the users is
represented by the use case Place Call. Examples of optional services are:
We can represent the behaviors needed for these optional services as
extension use cases to the base use case Place Call. This is a correct use of the
extend-relationship: since Place Call is meaningful in itself, you do not need to read the
descriptions of the extension use cases to understand the primary purpose of the base use
case, and the extensions use cases have optional character.
If both the base use case and the "base plus extension" use case must be
explicitly instantiable, or if you want the addition to modify behavior in the base use
case, you should use use-case-generalization instead (see Guidelines:
Use-Case-Generalization).
The extension use case can consist of one or more insertion segments, each of which may
have alternative paths built into it. These insertion segments incrementally modify the
behavior of the base use case. Each insertion segment in an extension use case can be
inserted at a separate location in the base use case. This means that the
extend-relationship has a list of references to extension points, equal in number to the
number of insertion segments in the extension use case. Each extension point must be
defined in the base use case.
One base use case consist of several extend-relationships, which means a use case
instance can follow more than one extension during its lifetime. One extension use case
may extend into several base use cases, but this does not imply any dependency between the
base use cases. There may even be multiple extend-relationships between the same extension
use case and base use case, provided the extension is inserted at different locations in
the base. This means the different extend-relationships need to refer to different
extension points in the base use case. An extension use case may itself be the base in an
extend-, include-, or generalization-relationship. For example, this means extension use
cases can extend other extension use cases in a nested manner.
When a use-case instance performing the base use case reaches a location in the base
use case where an extension point has been defined, the condition on the corresponding
extend-relationship is evaluated. If the condition is true or if it is absent, the
use-case instance will follow the extension (or the insertion segment within it that
corresponds to the extension point). If the condition of the extend-relationship is false,
the extension is not executed.
The extension use case may, just like any use case, have a basic flow of events and
alternative flows of events (see Guidelines: Use Case, the
discussion on structure of flow of events). Which exact path the use-case instance will
take through the extension depends on what has happened before in the execution (the state
of the use-case instance) and also what happens in interaction with actors as the
extension is executed. Once the use-case instance has performed the extension, the
use-case instance resumes executing the base use case at the point where it left off.

A use-case instance following a base use case and its extension.
An extension use case can have more than one insertion segment, each related to its own
extension point in the base use case. If this is the case, the use-case instance will
resume the base use case and continue to the next extension point specified in the
extend-relationship. At that point it will execute the next insertion segment of the
extension use case. This is repeated until the last insertion segment has been executed.
Note that the condition for the extend-relationship is checked at the first extension
point only if the condition is true, the use-case instance must perform all
insertion segments.

A use-case instance following a base use case and an extension use
case, the latter with two insertion segments.
The multiplicity of the extend-relationship will constrain the number of repetitions of
the entire extension that may occur. Note that it is the entire extension that is repeated
(and limited by the multiplicity), not just one insertion segment.
Describe the condition of the extension in terms of attributes of the base use case.
You can also choose to omit the condition, in which case the extension will always be
executed.
Each extend-relationship has a list of references to extension points (one or more) in
the base use case. The extension points are referenced by name. If the extension use case
has multiple insertion segments, you need to specify which segment corresponds to which
extension point. You also need to specify which steps or subflows of the extension use
case constitute each insertion segment.
Example:
In a phone system, the use case Place Call can be extended by the
abstract use case Show Caller Identity. This is an optional service, often referred to as
"Caller ID", that may or may not have been requested by the receiving party. A
description of the extend-relationship from Show Caller Identity to Place Call could look
as follows:
Condition: Receiving party must have ordered the
service "Caller ID".
Extension Point(s): Show Identity insert the
whole use case.
You may give the extend-relationship a multiplicity, if it is omitted the multiplicity
is assumed to be one.
Consider the following simple phone system:

The abstract use case Place Conference Call is an
extension to the use case Place Call.
In this model, a simple representation of our familiar phone system, basic call service
is described in the use case Place Call. A step-by-step outline to the basic flow of
events would look like this:
- The Caller lifts receiver.
- The system presents dial-tone.
- The Caller dials a digit.
- The System turns off the dial-tone.
- The Caller enters the remainder of the number.
- The system analyzes digits, determines network address of the Receiving Party.
- The system analyzes the digits, determining the location in the network where the
Receiving Party exists.
- The system then determines whether a virtual circuit can be established to the Receiving
Party.
- If a virtual circuit can be established, the System rings the Receiving Partys
phone and presents the ringing tone on the Callers phone.
- When the Receiving Party answers the phone, the system disables the ringing tone on the
Callers phone, stops ringing the Receiving Partys phone and completes the
virtual circuit.
- The system starts a billing record, recording the start time for the call, the end
points of the call, and the Callers customer information.
- The call continues for some length of time. When either the Caller or the Receiving
Party disconnects from the call, the system records the end time for the call, and frees
all resources required to support the virtual circuit. The use case then ends.
To add functionality to this system that would allow the caller or receiving party to
connect a third party to the call (often called "conference call"), we need to
add behavior to the flow of events. One alternative, and the first one we should consider,
is to put the differences directly into Place Call. We could model these differences using
alternative flows of events, as described in Guidelines:
Use Case. This solution works for most simple additions, where the added
functionality will not confuse or obscure the original meaning of the use case. The other
alternative is to separate the differences into an abstract extension use case called
Place Conference Call which extends the base use case.
|