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 08:11] – jorge | at:tutorial:objects [2007/06/29 14:44] – jorge | ||
---|---|---|---|
Line 9: | Line 9: | ||
< | < | ||
- | > def Point := object: { | + | > def point := object: { |
def x := 0; | def x := 0; | ||
def y := 0; | def y := 0; | ||
- | def init(xCoord,yCoord) { | + | def init(aX,aY) { |
- | x := xCoord; | + | x := aX; |
- | y := yCoord; | + | y := aY; |
}; | }; | ||
def sumOfSquares() { x*x + y*y }; | def sumOfSquares() { x*x + y*y }; | ||
} | } | ||
- | >>< | ||
</ | </ | ||
Line 27: | Line 26: | ||
</ | </ | ||
- | In the example above, the state of the '' | + | In the example above, the state of the '' |
- | + | ||
- | < | + | |
- | > def aPoint := Point.new(2, | + | |
- | >>< | + | |
- | </ | + | |
- | + | ||
- | Every object understands the message '' | + | |
===== Sending messages ===== | ===== Sending messages ===== | ||
Line 40: | Line 32: | ||
< | < | ||
- | > aPoint.x | + | > point.x |
>>2 | >>2 | ||
- | > aPoint.sumOfSquares() | + | > point.sumOfSquares() |
>>13 | >>13 | ||
</ | </ | ||
- | This code shows two messages sent to the '' | + | This code shows two messages sent to the '' |
===== Cloning and instantiation ===== | ===== Cloning and instantiation ===== | ||
+ | As said before in this section, AmbientTalk objects are created [[objects# | ||
+ | < | ||
+ | > def anotherPoint := point.new(2, | ||
+ | </ | ||
- | + | Every object understands the message '' | |
- | ===== Delegation | + | |
===== Delegation and cloning ===== | ===== 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 '' | ||
+ | |||
+ | < | ||
+ | > def point3D := extend: point with: { | ||
+ | def z := 0; | ||
+ | def sumofsquares() { | ||
+ | super.sumofsquares() + z*z | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 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 ===== | ||
+ | The parent of an object is bound to a field named '' | ||
+ | |||
+ | < | ||
+ | > def OpenConnection := object: {...}; | ||
+ | def ClosedConnection := object: {...}; | ||
+ | def Connection := object: { | ||
+ | def open() { | ||
+ | super := OpenConnection.new(); | ||
+ | }; | ||
+ | def close() { | ||
+ | super := ClosedConnection.new(); | ||
+ | }; | ||
+ | } | ||
+ | </ | ||
===== First-class Delegation ===== | ===== First-class Delegation ===== | ||
+ | |||
===== Encapsulation ===== | ===== Encapsulation ===== | ||
+ | In AmbientTalk, | ||
+ | |||
+ | < | ||
+ | > def makeObject(hidden) { | ||
+ | object: { | ||
+ | def foo() { /* use hidden */ } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | This instruction fails: | ||
+ | |||
+ | < | ||
+ | > makeObject(5).hidden; | ||
+ | >> | ||
+ | < | ||
+ | </ | ||
+ | |||
at/tutorial/objects.txt · Last modified: 2013/05/17 20:23 by tvcutsem