📄 oobject102001.htm
字号:
different albums on the Billboard 200 -- i.e., we see no reference
to a use case called Listen to Songs from Billboard 200. This
absence is not a trivial matter. With clear and simple use-case
descriptions provided on such a diagram, a project sponsor can
easily see if needed functionality is present or not present in the
system.</font></p>
<h3><font color="#000000">Class diagram</font></h3>
<p><font color="#000000">The class diagram shows how the different
entities (people, things, and data) relate to each other; in other
words, it shows the static structures of the system. A class diagram
can be used to display logical classes, which are typically the
kinds of things the business people in an organization talk about --
rock bands, CDs, radio play; or loans, home mortgages, car loans,
and interest rates. Class diagrams can also be used to show
implementation classes, which are the things that programmers
typically deal with. An implementation class diagram will probably
show some of the same classes as the logical classes diagram.The
implementation class diagram won't be drawn with the same
attributes, however, because it will most likely have references to
things like Vectors and HashMaps.<br>
<br>
A class is depicted on the class diagram as a rectangle with three
horizontal sections, as shown in Figure 2. The upper section shows
the class's name; the middle section contains the class's
attributes; and the lower section contains the class's operations
(or "methods").<br>
</font></p>
<p align="center"><font color="#000000"><img height="90" alt="Figure 2: Sample class object in a class diagram" src="bell_fig2.gif.htm" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig2.gif" width="150"></font></p>
<h5 align="center"><font color="#000000">Figure 2: Sample class
object in a class diagram</font></h5>
<p><font color="#000000">In my experience, almost every developer
knows what this diagram is, yet I find that most programmers draw
the relationship lines incorrectly. For a class diagram like the one
in Figure 3,you should draw the inheritance relationship<a href="#footnotes"><sup>1</sup></a>
using a line with an arrowhead at the top pointing to the super
class, and the arrowhead should a completed triangle. An association
relationship should be a solid line if both classes are aware of
each other and a line with an open arrowhead if the association is
known by only one of the classes.</font></p>
<p align="center"><a href="javascript:if(confirm('http://www.therationaledge.com/images/jun_03/bell_fig3.gif \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.therationaledge.com/images/jun_03/bell_fig3.gif'" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig3.gif"><font color="#000000"><img height="224" alt="Figure 3: A complete class diagram, including the class object shown in Figure 2" src="bell_fig3s.gif.htm" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig3s.gif" width="540" border="0"></font></a></p>
<h5 align="center"><font color="#000000">Figure 3: A complete class
diagram,<br>
including the class object shown in Figure 2<br>
<a href="javascript:if(confirm('http://www.therationaledge.com/images/jun_03/bell_fig3.gif \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.therationaledge.com/images/jun_03/bell_fig3.gif'" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig3.gif">Click
to enlarge</a></font></h5>
<p><font color="#000000">In Figure 3, we see both the inheritance
relationship and two association relationships. The CDSalesReport
class inherits from the Report class. A CDSalesReport is associated
with one CD, but the CD class doesn't know anything about the
CDSalesReport class. The CD and the Band classes both know about
each other, and both classes can be associated to one or more of
each other.</font></p>
<p><font color="#000000">A class diagram can incorporate many more
concepts, which we will cover later in this article series.</font></p>
<h3><font color="#000000">Sequence diagram</font></h3>
<p><font color="#000000">Sequence diagrams show a detailed flow for
a specific use case or even just part of a specific use case. They
are almost self explanatory; they show the calls between the
different objects in their sequence and can show, at a detailed
level, different calls to different objects.</font></p>
<p><font color="#000000">A sequence diagram has two dimensions: The
vertical dimension shows the sequence of messages/calls in the time
order that they occur; the horizontal dimension shows the object
instances to which the messages are sent.</font></p>
<p><font color="#000000">A sequence diagram is very simple to draw.
Across the top of your diagram, identify the class instances
(objects) by putting each class instance inside a box (see Figure
4). In the box, put the class instance name and class name separated
by a space/colon/space " : " (e.g., myReportGenerator :
ReportGenerator). If a class instance sends a message to another
class instance, draw a line with an open arrowhead pointing to the
receiving class instance; place the name of the message/method above
the line. Optionally, for important messages, you can draw a dotted
line with an arrowhead pointing back to the originating class
instance; label the return value above the dotted line. Personally,
I always like to include the return value lines because I find the
extra details make it easier to read.</font></p>
<p><font color="#000000">Reading a sequence diagram is very simple.
Start at the top left corner with the "driver" class
instance that starts the sequence. Then follow each message down the
diagram. Remember: Even though the example sequence diagram in
Figure 4 shows a return message for each sent message, this is
optional.<br>
</font></p>
<p align="center"><a href="javascript:if(confirm('http://www.therationaledge.com/images/jun_03/bell_fig4.gif \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.therationaledge.com/images/jun_03/bell_fig4.gif'" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig4.gif"><font color="#000000"><img alt="Figure 4: A sample sequence diagram" src="bell_fig4as.gif.htm" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig4as.gif" border="0"></font></a></p>
<div align="center">
</div>
<h5 align="center"><font color="#000000">Figure 4: A sample sequence
diagram<br>
<a href="javascript:if(confirm('http://www.therationaledge.com/images/jun_03/bell_fig4.gif \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.therationaledge.com/images/jun_03/bell_fig4.gif'" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig4.gif">Click
to enlarge</a></font></h5>
<p> </p>
<p><font color="#000000">By reading our sample sequence diagram in
Figure 4, you can see how to create a CD Sales Report. The aServlet
object is our example driver. aServlet sends a message to the
ReportGenerator class instance named gen. The message is labeled
generateCDSalesReport, which means that the ReportGenerator object
implements this message handler. On closer inspection, the
generateCDSalesReport message label has cdId in parentheses, which
means that aServlet is passing a variable named cdId with the
message. When gen instance receives a generateCDSalesReport message,
it then makes subsequent calls to the CDSalesReport class, and an
actual instance of a CDSalesReport called aCDReport gets returned.
The gen instance then makes calls to the returned aCDReport
instance, passing it parameters on each message call. At the end of
the sequence, the gen instance returns aCDReport to its caller
aServlet.</font></p>
<p><font color="#000000">Please note: The sequence diagram in Figure
4 is arguably too detailed for a typical sequence diagram. However,
I believe it is simple enough to understand, and it shows how nested
calls are drawn. Also, with junior developers, sometimes it is
necessary to break down sequences to this explicit level to help
them understand what they are supposed to do.</font></p>
<h3><font color="#000000">Statechart diagram</font></h3>
<p><font color="#000000">The statechart diagram models the different
states that a class can be in and how that class transitions from
state to state. It can be argued that every class has a state, but
that every class shouldn't have a statechart diagram. Only classes
with "interesting" states -- that is, classes with three
or more potential states during system activity -- should be
modeled.</font></p>
<p><font color="#000000">As shown in Figure 5, the notation set of
the statechart diagram has five basic elements: the initial starting
point, which is drawn using a solid circle; a transition between
states, which is drawn using a line with an open arrowhead; a state,
which is drawn using a rectangle with rounded corners; a decision
point, which is drawn as an open circle; and one or more termination
points, which are drawn using a circle with a solid circle inside
it. To draw a statechart diagram, begin with a starting point and a
transition line pointing to the initial state of the class. Draw the
states themselves anywhere on the diagram, and then simply connect
them using the state transition lines.</font></p>
<p><font color="#000000"> </font></p>
<div align="center">
<a href="javascript:if(confirm('http://www.therationaledge.com/images/jun_03/bell_fig5.gif \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.therationaledge.com/images/jun_03/bell_fig5.gif'" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig5.gif"><font color="#000000"><img height="286" alt="Figure 5: Statechart diagram showing the various states " src="bell_fig5s.gif.htm" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig5s.gif" width="540" border="0"></font></a>
</div>
<h5 align="center"><font color="#000000">Figure 5: Statechart
diagram showing the various states<br>
that classes pass through in a functioning system<br>
<a href="javascript:if(confirm('http://www.therationaledge.com/images/jun_03/bell_fig5.gif \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.therationaledge.com/images/jun_03/bell_fig5.gif'" tppabs="http://www.therationaledge.com/images/jun_03/bell_fig5.gif">Click
to enlarge</a></font></h5>
<p><font color="#000000">The example statechart diagram in Figure 5
shows some of the potential information they can communicate. For
instance, you can tell that loan processing begins in the Loan
Application state. When the pre-approval process is done, depending
on the outcome, you move to either the Loan Pre-approved state or
the Loan Rejected state. This decision, which is made during the
transition process, is shown with a decision point -- the empty
circle in the transition line. By looking at the example, a person
can tell that a loan cannot go from the Loan Pre-Approved state to
the Loan in Maintenance state without going through the Loan Closing
state. Also, by looking at our example diagram, a person can tell
that all loans will end in either the Loan Rejected state or the
Loan in Maintenance state.</font></p>
<h3><font color="#000000">Activity diagram</font></h3>
<p><font color="#000000">Activity diagrams show the procedural flow
of control between two or more class objects while processing an
activity. Activity diagrams can be used to model higher-level
business process at the business unit level, or to model low-level
internal class actions. In my experience, activity diagrams are best
used to model higher-level processes, such as how the company is
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -