blob: 29e79d5058b71a910141fb13da1ece71bc432761 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:ContentDescription xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.4/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf"
epf:version="1.2.0" xmi:id="-CFYVionNDLkMw6SG6runQA"
name="uc_realizations,_2uan8NbyEdqu5o2S60g5LA" guid="-CFYVionNDLkMw6SG6runQA"
changeDate="2007-06-29T08:45:40.595-0700" version="1.0.0">
<mainDescription>&lt;p>&#xD;
A use-case realization represents how a use case will be implemented in terms of collaborating objects. The&#xD;
realizations reside within the design. By walking through a design exercise of showing how the design elements will&#xD;
perform the the use case, the team gets confirmation that the design is robust enough to perform the required behavior.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The realization can take various forms. It may include, for example, a textual description (a document), class diagrams&#xD;
of participating classes and subsystems, and interaction diagrams (communication and sequence diagrams) that illustrate&#xD;
the flow of interactions between class and subsystem instances.&#xD;
&lt;/p>&#xD;
&lt;p> The reason for separating the use-case realization from its use case is that &#xD;
doing so allows the requirements, in the form of use cases, to be managed separately &#xD;
from the design, in the form of realizations. This decoupling will prove invaluable &#xD;
if the architecture is changed enough that the realization needs to be reworked &#xD;
while the requirements remain unaffected. Even without such a circumstance, &#xD;
the clear separation of concerns between requirements and design is valuable. &#xD;
&lt;/p>&#xD;
&lt;p> In a model, a use-case realization is represented as a UML (Unified Modeling &#xD;
Language) collaboration that groups the diagrams and other information (such &#xD;
as textual descriptions) that form the use-case realization. &lt;/p>&#xD;
&lt;p> Like other aspects of the design, the UML diagrams that support use-case realizations &#xD;
can be produced at various levels of abstraction. A first pass in creating the &#xD;
realization might produce a diagram at an analysis level of abstraction where &#xD;
the participants will be high-level elements that are expected to be revisited &#xD;
and detailed down to the design level in&amp;nbsp;a second pass. If the architecture &#xD;
and design idioms are well-understood, the realization could immediately be &#xD;
created at a low level of abstraction that specifies more detail on the elements &#xD;
and how they will collaborate to&amp;nbsp;realize the behavior of the use case. &#xD;
In the latter case, it is valuable to model patterns and architectural mechanisms &#xD;
to reduce the amount of low-level detail in each realization. &lt;/p>&#xD;
&lt;p>For each use case in the requirements, there can be a use-case realization &#xD;
in the design with a realization relationship to the use case, as the following &#xD;
figure shows. In UML, this is shown as a dashed arrow with an arrowhead, like &#xD;
a generalization relationship, indicating that a realization is a kind of inheritance, &#xD;
as well as a dependency (see the figure that follows). &lt;/p>&#xD;
&lt;p align=&quot;center&quot;>&lt;strong>&lt;font size=&quot;2&quot; face=&quot;Verdana, Arial, Helvetica, sans-serif&quot;>The &#xD;
UML notation for use-case realization&lt;/font>&lt;/strong>&lt;/p>&#xD;
&lt;p align=&quot;center&quot;>&lt;img height=&quot;109&quot; alt=&quot;Use Case Realisations&quot; src=&quot;./resources/ucrea1.gif&quot; width=&quot;277&quot; /> &#xD;
&lt;/p>&#xD;
&lt;h1>Class diagrams owned by a use case realization&lt;/h1>&#xD;
For each use-case realization, there may be one or more class diagrams that depict &#xD;
its participating classes. A class and its objects often participate in several &#xD;
use-case realizations. While designing, it is important to coordinate all of the &#xD;
requirements related to a class that different use-case realizations may have. &#xD;
The figure below shows an analysis&amp;nbsp;class diagram for the realization of the &#xD;
Receive Deposit Item use case. Notice the use of boundary-control-entity stereotypes &#xD;
to represent analysis classes (see &lt;a class=&quot;elementLinkWithType&quot; href=&quot;./../../../openup/guidances/guidelines/entity_control_boundary_pattern_C4047897.html&quot; guid=&quot;_uF-QYEAhEdq_UJTvM1DM2Q&quot;>Guideline: &#xD;
Entity-Control-Boundary Pattern&lt;/a>). &#xD;
&lt;p align=&quot;center&quot;>&lt;strong>&lt;font size=&quot;2&quot; face=&quot;Verdana, Arial, Helvetica, sans-serif&quot;>The use case Receive Deposit Item and its analysis-level class diagram&lt;/font>&lt;/strong>&lt;/p>&#xD;
&lt;p align=&quot;center&quot;>&#xD;
&lt;img height=&quot;213&quot; alt=&quot;Class diagram for the realization of Receive Deposit Item&quot; src=&quot;./resources/md_ucre3.gif&quot; width=&quot;328&quot; />&#xD;
&lt;/p>&#xD;
&lt;p align=&quot;center&quot;>&amp;nbsp; &lt;/p>&#xD;
&lt;h1> Sequence and communication diagrams&lt;/h1>&#xD;
&lt;p> For each use-case realization, there&amp;nbsp;can be&amp;nbsp;one or more interaction &#xD;
diagrams that depict&amp;nbsp;the participating objects and their interactions. &#xD;
There are two types of interaction diagrams: &lt;i>sequence&lt;/i> diagrams and &lt;i>communication&lt;/i> &#xD;
diagrams. They express similar information, but show it in different ways. &lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&lt;b>Sequence diagrams&lt;/b> show the explicit sequence of messages and are &#xD;
better when it is important to visualize the time order of messages. &lt;/li>&#xD;
&lt;li>&lt;b>Communication diagrams &lt;/b>show the communication links between objects &#xD;
and are better for understanding all of the effects on a given object and &#xD;
for algorithm design. &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p> Realizing use cases through interaction diagrams helps to keep the design &#xD;
simple and cohesive. Assigning responsibilities to classes on the basis of what &#xD;
the use-case scenario explicitly requires encourages the design to contain the &#xD;
following elements: &lt;/p>&#xD;
&lt;ul>&#xD;
&#xD;
&lt;li> Only the functionality actually used in support of a use-case scenario&lt;/li>&#xD;
&#xD;
&lt;li> Functionality that can be tested through an associated test case&lt;/li>&#xD;
&#xD;
&lt;li> Functionality that is more easily traceable to requirements and changes&lt;/li>&#xD;
&#xD;
&lt;li> Explicitly declared class dependencies that are easier to manage&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
These factors help improve the overall quality of the system.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>