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/06/29 11:01] – jorge | at:tutorial:objects [2007/07/02 13:12] – jorge | ||
---|---|---|---|
Line 18: | Line 18: | ||
def sumOfSquares() { x*x + y*y }; | def sumOfSquares() { x*x + y*y }; | ||
} | } | ||
- | >>< | ||
</ | </ | ||
Line 46: | Line 45: | ||
< | < | ||
> def anotherPoint := point.new(2, | > def anotherPoint := point.new(2, | ||
- | >>< | ||
</ | </ | ||
Every object understands the message '' | Every object understands the message '' | ||
- | ===== Delegation and Dynamic Inheritance ===== | + | AmbientTalk |
- | AmbientTalk | + | |
- | The following code shows how to extend objects with a **IS-A** relationship. | + | < |
+ | > def clonedPoint := clone: point | ||
+ | </ | ||
+ | |||
+ | ===== Delegation and cloning ===== | ||
+ | AmbientTalk features object inheritance or delegation. By means of delegation, an object can reuse and extend the defintion of another establishing a parent-child relationship. We identify two kinds of delegation relationships: | ||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | The following code shows how to extend objects with a **IS-A** relationship. It uses the '' | ||
< | < | ||
Line 63: | Line 71: | ||
} | } | ||
} | } | ||
- | >>< | ||
</ | </ | ||
- | The following code shows how to extend objects with a **SHARE-A** relationship. | + | The following code shows how to extend objects with a **SHARE-A** relationship. It uses the '' |
< | < | ||
Line 75: | Line 82: | ||
} | } | ||
} | } | ||
- | >>< | ||
</ | </ | ||
+ | ===== Delegation and dynamic inheritance ===== | ||
+ | The parent of an object is bound to a field named '' | ||
- | These relationships defines two different semantics for clonning child objects | + | < |
+ | > def OpenConnection := object: {...}; | ||
+ | def ClosedConnection := object: {...}; | ||
+ | def Connection := object: { | ||
+ | def open() { | ||
+ | super := OpenConnection.new(); | ||
+ | }; | ||
+ | def close() { | ||
+ | super := ClosedConnection.new(); | ||
+ | }; | ||
+ | } | ||
+ | </ | ||
+ | ===== First-class delegation ===== | ||
+ | AmbientTalk provides an explicit delegation operator '' | ||
- | in the way | + | < |
+ | > def Point3D := extend: Point with: { | ||
+ | def z := 0; | ||
+ | def init(anX, aY, aZ) { | ||
+ | super^init(anX, | ||
+ | z := aZ; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | ===== Encapsulation ===== | ||
+ | In AmbientTalk, | ||
+ | < | ||
+ | > def makeObject(hidden) { | ||
+ | object: { | ||
+ | def foo() { /* use hidden */ } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
- | . While both relationships | + | Due to the encapsulation of this object |
- | + | ||
- | | + | |
- | + | ||
- | + | ||
- | ===== Delegation and cloning ===== | + | |
- | + | ||
- | ===== First-class Delegation ===== | + | |
- | + | ||
- | ===== Encapsulation ===== | + | |
+ | < | ||
+ | > makeObject(5).hidden; | ||
+ | >> | ||
+ | < | ||
+ | </ |
at/tutorial/objects.txt · Last modified: 2013/05/17 20:23 by tvcutsem