at:tutorial:objects
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
at:tutorial:objects [2007/07/09 21:25] – explained tvcutsem | at:tutorial:objects [2007/07/10 12:39] – * tvcutsem | ||
---|---|---|---|
Line 51: | Line 51: | ||
</ | </ | ||
- | Every object understands the message '' | + | Every object understands the message '' |
< | < | ||
Line 86: | Line 86: | ||
Delegation implies that, if a message is sent to an object, but that object has no definition for the message' | Delegation implies that, if a message is sent to an object, but that object has no definition for the message' | ||
- | AmbientTalk distinguishes between **two kinds** of delegation relationships, | + | AmbientTalk distinguishes between **two kinds** of delegation relationships, |
+ | |||
+ | An **IS-A** delegation relationship between two objects signifies that the child object " | ||
< | < | ||
Line 93: | Line 95: | ||
def sumOfSquares() { | def sumOfSquares() { | ||
super^sumOfSquares() + z*z | super^sumOfSquares() + z*z | ||
- | } | + | }; |
} | } | ||
</ | </ | ||
- | In this example, '' | + | In this example, '' |
- | These relationships define two different semantics for clonning child objects. Whereas clonning a **IS-A** child also clones its parent, **SHARE-A** | + | A **SHARES-A** relationship between two objects signifies that an object only delegates to another object purely for reasons of code sharing. The delegation link has no other semantics, and conceptually both parent |
+ | The following code shows how to extend objects with a **SHARES-A** delegation relationship. It uses the '' | ||
- | {{:at:tutorial:isaversussharea.png|:at: | + | < |
+ | def Collection | ||
+ | def elements | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | In this code example, the '' | ||
- | The following code shows how to extend objects with a **IS-A** | + | The **IS-A** |
+ | {{: | ||
- | + | This cloning semantics reinforces the semantics of **IS-A** as promoting a unique link between a parent and a child object. **IS-A** delegation most closely corresponds to class-based inheritance. | |
- | The following code shows how to extend objects with a **SHARE-A** relationship. It uses the '' | + | |
- | + | ||
- | < | + | |
- | > def point3D := share: point with: { | + | |
- | def z := 0; | + | |
- | def sumOfSquares() { | + | |
- | super^sumOfSquares() + z*z | + | |
- | } | + | |
- | } | + | |
- | </ | + | |
===== Delegation and dynamic inheritance ===== | ===== Delegation and dynamic inheritance ===== |
at/tutorial/objects.txt · Last modified: 2013/05/17 20:23 by tvcutsem