Constructors in Turing
Author |
Message |
uncompetence
|
Posted: Tue Jun 09, 2009 10:58 pm Post subject: Constructors in Turing |
|
|
I'm toying with Object-Oriented in Turing and looked through the reference under 'class' and found no means of writing a constructor for an object. All calls to new perform the initialization of the object, but there seems to be no way of passing in variables. Is there no other way than to write and call a method of my own? |
|
|
|
|
![](images/spacer.gif) |
Sponsor Sponsor
![Sponsor Sponsor](templates/subSilver/images/ranks/stars_rank5.gif)
|
|
![](images/spacer.gif) |
wtd
|
Posted: Tue Jun 09, 2009 11:44 pm Post subject: RE:Constructors in Turing |
|
|
As far as I know, there is no way to have a constructor in the sense that other object-oriented programming languages have. |
|
|
|
|
![](images/spacer.gif) |
[Gandalf]
![](http://compsci.ca/v3/uploads/user_avatars/189297994e4c716fec7f1.png)
|
Posted: Wed Jun 10, 2009 1:49 am Post subject: RE:Constructors in Turing |
|
|
Indeed, you are stuck with creating your own initialize() function and always calling that. |
|
|
|
|
![](images/spacer.gif) |
DemonWasp
|
Posted: Wed Jun 10, 2009 8:03 am Post subject: RE:Constructors in Turing |
|
|
Similarly, there's no way to have a proper destructor. |
|
|
|
|
![](images/spacer.gif) |
Tyr_God_Of_War
|
Posted: Thu Jun 18, 2009 7:03 pm Post subject: Re: Constructors in Turing |
|
|
I do not think that you can have any class methods (also know as static methods) at all. That's why I think it's better to use a type and a module. You can treat it like python, where you have to list 'self' as a parameter for your methods.
Turing: |
module Boxes
export unqualified opaque /* if you want the boxes to be only moddified inside the class*/ Box, draw, create
type Box :
record
left, bottom, right, top : int
end record
fcn create (l, b, r, t : int) : Box
var temp : Box
temp.left := l
temp.bottom := b
temp.right := r
temp.top := t
result temp
end create
proc draw (b : Box, col : int)
Draw.Box (b.left, b.bottom, b.right, b.top, col )
end draw
%.......................
end Boxes
var myBox : Box := Boxes.create (20, 40, 30, 50)
Boxes.draw (myBox, black)
|
Compare this to a class version.
Turing: |
class Box
export left, bottom, right, top,
create, draw % and so on
var left, bottom, right, top : int
proc create (l, b, r, t : int)
left := l
bottom:=b
right:=r
top:=t
end create
proc draw (col : int)
Draw.Box (left, bottom, right, top, col )
end draw
% ect...
end Box
var myBox : ^Box
new Box, myBox
Box (myBox ).create (20, 40, 30, 50)
Box (myBox ).draw (black)
free myBox
|
Or if you really want dynamically allocated stuff:
Turing: |
module Boxes
export ~.Box, draw, create, delete
type Box :
record
left, bottom, right, top : int
end record
fcn create (l, b, r, t : int) : ^Box
var temp : ^Box
new temp
^temp.left := l
^temp.bottom := b
^temp.right := r
^temp.top := t
result temp
end create
proc draw (b : ^Box, col : int)
Draw.Box ( ^b.left, ^b.bottom, ^b.right, ^b.top, col )
end draw
proc delete (var b:^Box )
free b
end delete
end Boxes
var boxPtr:^Box:=Boxes.create (20, 40, 30, 50)
put "Left = ",^boxPtr.left
Boxes.draw (boxPtr, blue)
Boxes.delete (boxPtr )
|
As you can see, using a module and a type is much like using a class.
Modules can have static methods, while classes get inheritence and polymorphism. |
|
|
|
|
![](images/spacer.gif) |
|
|