John Von Neumann contributed one of the primary metaphors of computing a sequence of instructions that are executed one by one. This metaphor permeates most programming languages, Java included. The topic of this chapter is how to express the behavior of a program.
The patterns are:
- Control Flow—Express computations as a sequence of steps.
- Main Flow—Clearly express the main flow of control.
- Message—Express control flow by sending a message.
- Choosing Message—Vary the implementors of a message to express choices.
- Double Dispatch—Vary the implementors of messages along two axes to express cascading choices.
- Decomposing Message—Break complicated calculations into cohesive chunks.
- Reversing Message—Make control flows symmetric by sending a sequence of messages to the same receiver.
- Inviting Message—Invite future variation by sending a message that can be implemented in different ways.
- Explaining Message—Send a message to explain the purpose of a clump of logic.
- Exceptional Flow—Express the unusual flows of control as clearly as possible without interfering with the expression of the main flow.
- Guard Clause—Express local exceptional flows by an early return.
- Exception—Express non-local exceptional flows with exceptions.
- Checked Exception—Ensure that exceptions are caught by declaring them explicitly.
- Exception Propagation—Propagate exceptions, transforming them as necessary so the information they contain is appropriate to the catcher.