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/10 12:42] – tvcutsem | at:tutorial:objects [2007/07/10 22:21] – changed tvcutsem | ||
---|---|---|---|
Line 120: | Line 120: | ||
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. | 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. | ||
- | ===== Delegation and dynamic inheritance | + | ===== Delegation and Dynamic Inheritance |
- | The parent of an object is bound to a field named '' | + | |
+ | In AmbientTalk, | ||
+ | |||
+ | Because '' | ||
< | < | ||
- | > def openConnection := object: {...}; | + | def openConnection := object: |
- | > def closedConnection := object: {...}; | + | def send(msg) |
- | > def connection := object: { | + | }; |
- | def open() { | + | def closedConnection := object: |
- | super := openConnection.new(); | + | def send(msg) |
- | }; | + | }; |
- | def close() { | + | def connection := object: |
- | super := closedConnection.new(); | + | def init() |
- | }; | + | |
- | } | + | }; |
+ | | ||
+ | super := openConnection; | ||
+ | }; | ||
+ | def close() { | ||
+ | super := closedConnection; | ||
+ | }; | ||
+ | } | ||
</ | </ | ||
- | < | + | In the above example, the '' |
- | In AmbientTalk, | + | |
+ | < | ||
+ | In AmbientTalk, | ||
</ | </ | ||
- | ===== First-class | + | ===== First-class |
- | AmbientTalk provides | + | |
+ | AmbientTalk provides | ||
< | < | ||
- | > def point3D | + | def Enumerable |
- | def z := 0; | + | def collect: closure |
- | | + | def c := clone: self; |
- | | + | |
- | z := aZ; | + | |
}; | }; | ||
- | } | + | }; |
+ | }; | ||
+ | def Array := object: { | ||
+ | def elements := []; | ||
+ | def init() { ... }; | ||
+ | def collect: closure { | ||
+ | Enumerable^collect: | ||
+ | }; | ||
+ | def each: clo { | ||
+ | 1.to: elements.length do: { |i| | ||
+ | clo(elements[i]) | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
</ | </ | ||
- | A message sent to an object using the '' | + | A message sent to an object using the '' |
+ | |||
+ | Of course, the example above is a bit contrived: we could have just assigned '' | ||
+ | |||
+ | Having described the semantics of '' | ||
+ | |||
+ | < | ||
+ | def Point3D := extend: Point with: { | ||
+ | def z := 0; | ||
+ | def init(aX, aY, aZ) { | ||
+ | super^init(aX, | ||
+ | z := aZ; | ||
+ | }; | ||
+ | }; | ||
+ | </ | ||
<note warning> | <note warning> | ||
- | The delegation operator | + | AmbientTalk, |
+ | |||
+ | Keep in mind, however, that '' | ||
</ | </ | ||
at/tutorial/objects.txt · Last modified: 2013/05/17 20:23 by tvcutsem