Chapter 6. Messages
Objects communicate via messages. Messages can ask to carry out an activity. They may also carry information from one object to another object.
Important
- message
a message is the vehicle by which a sender obejct obj1 conveys to a target object obj2 a demand for object obj2 to apply one of its methods
obj1 and obj2 may be the same objects, so objects may send messages to themselves.
We will see:
the anotomy of a message
the characteristics of message arguments
the role of an object sending the message
the role of an object receiving the message
the 3 types of messages
Message structure
In order for obj1 to send a message to obj2, obj1 must know 3 things:
The handle of obj2. (You need to know who to talk to). obj1 will usually store obj2's handle in one of its variables (remember the section called “Associations”)
The name of the operation of obj2 that obj1 wishes to execute
Any additional information (arguments) that obj2 requires to execute the operation
Important
- sender
the object sending the message (obj1 in this example) is called the sender.
- target
the object receiving the message (obj2 in this example) is called the target
Example from the Hominoid:
hom1.turnRight; // Books notation hom1->turnRight(); // C++ notation
hom1 points to (contains the handle of) the target object of the message. turnRight is the name of the operation. In this case, turnRight has no arguments.
The sender in this case the the object from which this line is called.
Compare to procedural programming:
call turnRight(hom1); // Books notation turnRight(hom1); // C++ notation
Traditional: the operation is important, the data is just an argument. What do I want to do? Oh, and by the way, this is what you need to do it with.
OO: the target is important, the message is second. Hey, you object! Do this!
More like real life: If you shout out "someone should turn on the lights", nothing will happen. They you call on a certain person, and then they may wake up and do it... However, if you point at someone and say "you! please turn on the light" it magically happens.
Reasoning: Different objects may provide the same operation.
Example operation: sitOnIt() may be provided by the classes Table, Chair, and Floor. Both are different objects, and the actual method is very likely differnt.
Example: operation: takeMeToSchool() may be provided by the classes Car, Truck, SchoolBus, Bike, Feet, Helicopter.