Block 2 Unit 7 Flashcards
Why must the conditions on a message send be mutually exclusive in a sequential system?
If conditions were not mutually exclusive, more than one condition might be true. This would mean that multiple messages would be sent at once, resulting in multiple receiving objects being active at the same time –
[
Non-deterministic behaviour is behaviour where one of a number of outcomes is possible, for example when a dice is thrown. It is something we wish to avoid introducing where it is not intended.
]
leading to the possibility of non-deterministic behaviour.
Figure 2 shows two conditional message sends originating at the same moment on the timeline, meaning that all the guards are evaluated before any message is sent. Could the same behaviour be implemented if the messages (and their conditions) were separated on the time line?
Yes, provided that the conditions were mutually exclusive, so that the first message could not affect the state of the receiver before the second message arrived. We might use code such as the following:
if (room.ready) room.accept(jill);
if (!room.ready) room.requestCleaner();
Suggest a reason why an object’s lifeline must branch in cases such as Figure 2. How is this handled in Figure 5?
The Room object will receive different messages depending on which branch is executed in the Hotel object. It makes no sense for the messages to arrive at just one lifeline, as that would imply that the Room object received all of the messages in a single interaction. Instead, we show a fork in the lifeline of the receiving object to reflect the fork of control in the sending object in Figure 2.
In Figure 5 the alternatives are shown using the alternative fragment. Although the figure doesn’t show a branching lifeline, this same branching is implied by the alternatives in the fragment, in their separate boxes.
How would you change the sequence diagrams in Figures 3 and 6 to sound the car’s horn five times each time it moved forward?
To get the horn to sound five times for every forward movement in the sequence diagram in Figure 3 you would add an iteration clause to the second, nested message: *[j := 1..5] sound(). In Figure 6 you would add the extra iteration by including a fragment within the existing fragment.
What is the main disadvantage of defensive programming?
The main disadvantage of defensive programming is that the same constraints within each precondition may be checked repeatedly in different operations.
Which of the three strategies for implementing use cases is being used when we place methods such as createGuest(lastname : String, firstname : String, address : String) in the Hotel class?
We are following the strategy of using one central class here.
Are use case objects consistent with the twin aims of high cohesion and low coupling (terms introduced in Block 1 Unit 1)?
Yes and no. Yes, because high cohesion asks us to ‘do one thing and do it well’. A CheckerIn class should only support the one activity of checking in. No, because having an extra class for each use case introduces more coupling through the extra associations involved. However the introduction of these new classes limits the impact of a change to a software system.
Suppose you are designing the graphical user interface (GUI) part of a hotel system. You need to be able to check in people known to the system as well as new people. What operations on the business model might be needed to support a usable GUI?
Checking in unknown people would involve the creation of a new Guest object, requiring an operation createGuest(firstName, lastName, address).
To check in a known person, you need to find the business object that corresponds to that person. This mapping might be done by having a pick list of all people known to the system, which would require a business-model operation that returns a collection of guests, for example getAllGuests().
Figure 15 shows a simple state machine diagram for the class Copy in a library model. What should happen if the copy returned message arrives when an object of the class Copy is in the state on shelf (assuming that we are not using design by contract)?
Something has gone wrong. The state of the system does not describe the fact that the copy of the book is on loan, so it cannot be returned. There must be some means of indicating or recording an error, such as a message to a log file.
Give an example of an architectural decision that would provide a general solution to the problem of unexpected messages.
At an architectural level we might introduce a single object of a class Error, which is globally accessible to objects in the software system. Such an object would be responsible for reporting errors due to unexpected messages, for example.
What does a final state signify in a state machine?
Final states are used to show the point or points where the object in question has finished processing. Its activity has been completed.
In what ways does a final state differ from an initial state?
There can be zero, one or more final states but at most one initial state. A final state can have several incoming transitions and no outgoing transitions, but an initial state has no incoming transitions and only one outgoing transition.
Why might two objects of the same class respond differently to the same message?
An object’s behaviour will in general be affected by the values of its attributes, which are part of the object’s state. If two objects have different values for the same attributes, they are in different states, and therefore might respond differently to the same message.
What is the most common form of event that causes a transition between two states? How is it shown in a state machine diagram?
The receipt of a message is the most common form of event that causes a transition between states. An event is used to label the transition between the states. In a state machine diagram, a transition is labelled with the name of the relevant message, which includes any arguments for that message.
What is the difference between an event and an action?
An event is something done to the object, such as sending it a message. An action is something that the object does, such as sending a message to itself or to another object. An action is an object’s reaction to an event.