close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Ticket #722: ticket_2.ClassCommonMembers.tol

File ticket_2.ClassCommonMembers.tol, 1.4 KB (added by pgea@…, 16 years ago)
Line 
1//////////////////////////////////////////////////////////////////////////////
2// Creación clases
3// No hay miembros comunes a la clase.
4// Incluso los métodos se copian con las instancias.
5// Eso supone un aumento innecesario de la memoria que ocupa cada objeto.
6
7Class CPrueba {
8  Real _.valor;
9  Real GetValor(Real unused) { Copy(_.valor) };
10  Real SetValor(Real val) { Real _.valor := val }
11};
12
13CPrueba CPrueba.New(Real val) {
14  CPrueba newPrueba = [[ Real _.valor = val ]]
15};
16
17//////////////////////////////////////////////////////////////////////////////
18
19CPrueba a = CPrueba.New(0);
20CPrueba b = CPrueba.New(1);
21
22// [1]: Usamos el método 'GetValor'
23Real a::GetValor(?); //--> 0
24Real b::GetValor(?); //--> 1
25
26// [2]: Si redefinimos un método lo hacemos sólo para una instancia.
27Code a::GetValor := {Real (Real unused){ 8 }};
28Real a::GetValor(?); //--> 8
29Real b::GetValor(?); //--> 1
30
31// [3]: Si intentamos redefinir un método accediendo a sus atributos
32//      no lo conseguiremos.
33Code a::GetValor := {Real (Real unused) { Copy(_.valor) }};
34/*
35Real a::GetValor(?); //--> ERROR
36// ERROR: _.valor no es un objeto valido para el tipo Real
37*/
38
39// [4]: Si se nos ocurre "copiar" el método de otro objeto,
40//      accederemos a sus miembros.
41Code a::GetValor := b::GetValor;
42Real a::GetValor(?); //--> 1
43
44//////////////////////////////////////////////////////////////////////////////
45