Figure 22.24 shows a communication diagram that models the interactions among objects in the system when an object of class BalanceInquiry
executes. We assume that the object’s accountNumber
attribute contains the account number of the current user. The collaborations in Fig. 22.24 begin after the ATM
sends an execute
message to a BalanceInquiry
(i.e., the interaction modeled in Fig. 22.23). The number to the left of a message name indicates the order in which the message is passed. The sequence of messages in a communication diagram progresses in numerical order from least to greatest. In this diagram, the numbering starts with message 1
and ends with message 3
. The BalanceInquiry
first sends a getAvailableBalance
message to the BankDatabase
(message 1
), then sends a getTotalBalance
message to the BankDatabase
(message 2
). Within the parentheses following a message name, we can specify a comma-separated list of the names of the parameters sent with the message (i.e., arguments in a C++ function call)—the BalanceInquiry
passes attribute accountNumber
with its messages to the BankDatabase
to indicate which Account
’s balance information to retrieve. Recall from Fig. 22.18 that operations getAvailableBalance
and getTotalBalance
of class BankDatabase
each require a parameter to identify an account. The BalanceInquiry
next displays the availableBalance
and the totalBalance
to the user by passing a displayMessage
message to the Screen
(message 3
) that includes a parameter indicating the message
to be displayed.
Figure 22.24 models two additional messages passing from the BankDatabase
to an Account
(message 1.1
and message 2.1
). To provide the ATM
with the two balances of the user’s Account
(as requested by messages 1
and 2
), the BankDatabase
must pass a getAvailableBalance
and a getTotalBalance
message to the user’s Account
. Messages passed within the handling of another message are called nested messages. The UML recommends using a decimal numbering scheme to indicate nested messages. For example, message 1.1
is the first message nested in message 1
—the BankDatabase
passes a getAvailableBalance
message while processing BankDatabase
’s message of the same name. [Note: If the BankDatabase
needed to pass a second nested message while processing message 1
, the second message would be numbered 1.2
.] A message may be passed only when all the nested messages from the previous message have been passed—e.g., the BalanceInquiry
passes message 3
only after messages 2
and 2.1
have been passed, in that order.
The nested numbering scheme used in communication diagrams helps clarify precisely when and in what context each message is passed. For example, if we numbered the messages in Fig. 22.24 using a flat numbering scheme (i.e., 1
, 2
, 3
, 4
, 5
), someone looking at the diagram might not be able to determine that BankDatabase
passes the getAvailableBalance
message (message 1.1
) to an Account
during the BankDatabase
’s processing of message 1
, as opposed to after completing the processing of message 1
. The nested decimal numbers make it clear that the second getAvailableBalance
message (message 1.1
) is passed to an Account
within the handling of the first getAvailableBalance
message (message 1
) by the BankDatabase
.
3.14.246.148