![]() | Business operations: "and then order-fulfillment informs shipment about ..." |
![]() | General problem domains: "production capacity is determined by available machines and load ..." |
![]() | Software requirements: "and the scheduling system must do the following ..." |
![]() | Architecture: "we will always use typed event channels ..." |
![]() | Designs: "if your class does this, and her class does that, then we can ..." |
![]() | ... and, of course, code. |
An object may be or do many different things. Typically, we want to describe some interesting aspects of that object; that partial, and abstract view of the object is called a Type. A type describes the behavior of an object by describing:
![]() | The abstract state of the object using attributes: "the order has some priority"; or "the communication channel has a source and sink port", or "the factory has a load and a set of available machines" |
![]() | The actions that object participates in and their effect on its attributes: "the order gets cancelled", or "the communication channel gets closed", or "a new machine is installed in the factory". |
An action is most useful and interesting in the context of other related actions; in combination they define a collaboration that accomplishes some goal. The place_order action is useful in a collaboration involving take_order, fulfil_order, send_shipment, receive_shipment, invoice, pay, which together accomplish the goal represented by the more abstract action buy_stuff.