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.
- Timestamp:
-
Aug 27, 2009, 9:29:29 AM (15 years ago)
- Author:
-
Víctor de Buen Remiro
- Comment:
-
--
Legend:
- Unmodified
- Added
- Removed
- Modified
-
v4
|
v5
|
|
3 | 3 | La principal diferencia del nuevo TOL 2.0.1 con respecto a sus predecesores será la apuesta por la programación orientada al objeto (OOP). |
4 | 4 | |
5 | | Se trataría de que el usuario pudiera definir estructuras de NameBlock, es decir clases virtuales puras en la nomenclatura OOP, con una API mínima para poder usarla como descriptor de argumento en funciones de forma similar al Struct en Set sólo que se permite establecer la API de los métodos. |
| 5 | Se trataría de que el usuario pudiera definir estructuras de NameBlock, es decir clases virtuales puras en la nomenclatura OOP, con una API mínima para poder usarla como descriptor de argumento en funciones de forma análoga al Struct en Set. Así como a los conjuntos con estructura se les denomina usualmente registros, a los NameBlock con clase les llamaremos instancias. |
| 6 | |
| 7 | == Miembros y métodos == |
| 8 | A los elementos de una estructura se les suele llamar campos, pero en una clase hay que distinguir los métodos de los miembros. |
| 9 | Un método es una función de una clase con un prototipo o definición conocida y fija, es decir, que el tipo devuelto y los argumentos, incluidos sus nombres, están prefijados de antemano. |
| 10 | Todos los demás elementos de una clase se denominarán miembros. Nótese que un elemento de tipo {{{Code}}} no es un método. |
| 11 | Tanto unos como otros pueden estar definidos desde un principio o pueden estar solamente declarados a la espera de que se implementen posteriormente. |
| 12 | * '''Declaración de miembro''': [[BR]] {{{ Text _.name; }}} |
| 13 | * '''Declaración de método''': [[BR]] {{{ Text getName(Real unused); }}} |
| 14 | * '''Definición de miembro''': [[BR]] {{{ Text _.name = "nobody"; }}} |
| 15 | * '''Definición de método''': [[BR]] {{{ Text getName(Real unused) { _.name}; }}} |
| 16 | Los métodos deben ser definidos en la propia clase o en alguna de sus clases heredadas y serán almacenados en la propia clase mientras que los métodos pertenecen a las instancias y pueden ser definidos por estas. |
6 | 17 | |
7 | 18 | == Clases primarias == |
… |
… |
|
126 | 137 | }}} |
127 | 138 | |
| 139 | == Predeclaración de clases == |
| 140 | |
| 141 | Es posible predeclarar una clase sin definir sus métodos ni las clases de las que hereda, para poder ser usada dentro de otra clase que a su vez la use, tal y como se ilstra en el siguiente ejemplo: |
| 142 | |
| 143 | {{{ |
| 144 | |
| 145 | //Forward declaration |
| 146 | Class ClHeight; |
| 147 | |
| 148 | //This class uses ClHeight as a method argument |
| 149 | Class ClAge |
| 150 | { |
| 151 | Text _.name; |
| 152 | Real _.age; |
| 153 | Real equalName(ClHeight arg) |
| 154 | { |
| 155 | _.name==arg::_.name |
| 156 | } |
| 157 | }; |
| 158 | |
| 159 | //This class uses ClAge as a method argument |
| 160 | Class ClHeight |
| 161 | { |
| 162 | Text _.name; |
| 163 | Real _.height; |
| 164 | Real equalName(ClAge arg) |
| 165 | { |
| 166 | _.name==arg::_.name |
| 167 | } |
| 168 | }; |
| 169 | }}} |
| 170 | |
128 | 171 | == Otros ejemplos de clases == |
129 | 172 | |