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.

Changes between Version 2 and Version 3 of TolOop


Ignore:
Timestamp:
Jul 13, 2009, 5:04:01 PM (16 years ago)
Author:
Víctor de Buen Remiro
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TolOop

    v2 v3  
    55Se 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.
    66
    7 La siguiente sería una declaración de clase primaria estructural, ya que no tiene ningún método
     7== Clases primarias ==
     8Son aquellas clases que no heredan de ninguna otra previa sino que se definen por sí mismas. En cierta manera, una clase primaria es a un NameBlock lo que un Struct es para un Set: le obliga a seguir una pauta organizativa, aunque los requisitos que conlleva son algo distintos.
    89
     10== Clases estructurales ==
     11
     12Llamaremos clase estructural a aquella que no tiene ningún método.
    913
    1014{{{
     
    1620}}}
    1721
    18 La siguiente sería una declaración de clase primaria virtual pura, ya que ningún miembro ni método tiene una definición por defecto
     22== Clases no estructurales ==
     23
     24Si tiene algún método le diremos no estructural.
     25
     26{{{
     27Class Doc
     28{
     29  Text _.name;
     30  Text _.description;
     31  Text getName(Real unused) { _.name }
     32};
     33}}}
     34
     35
     36=== Clases virtuales ===
     37
     38Una clase no estructural será virtual si tiene algún método no definido, el cual deberá ser definido en alguna clase heredada de esta, o bien en la propia instanciación de objetos.
     39
     40{{{
     41Class Doc
     42{
     43  Text _.name;
     44  Text _.description;
     45  Text getName(Real unused) { _.name };
     46  Text getSize(Real unused)
     47};
     48}}}
     49
     50=== Clases virtuales puras ===
     51
     52Una clase primaria virtual pura es aquella que en la que ningún método tiene una definición por defecto
    1953
    2054{{{
     
    2963}}}
    3064
     65== Clases heredadas ==
    3166Es posible crear clases heredadas de otras que implementen métodos o asignen valores por defecto a miembros. También está permitida la herencia múltiple siempre y cuando no exista conflicto entre los métodos y miembros heredados. Si no desea cambiar ninguno de los miembros o métodos por defecto ni añadir nada nuevo, simplemente se listan las clases de las que se quiere heredar. En otro caso se abrirían llaves y se harían las modificaciones o añadidos pertinentes:
    3267
     
    5994}}}
    6095
     96== Instancias ==
    6197Una instancia de una clase es un NameBlock que cumple la API definida por dicha clase y define al menos todos los miembros sin valor por defecto y todos los métodos no implementados. Obsérvese que el orden de declaración de los miembros es irrelevante e independiente del orden de herencia de las clases.
    6298
     
    77113}}}
    78114
    79 Los nombres de clase funcionarán como tipos definidos por el usuario a todos los efectos. Es posible entonces declarar argumentos de función de una clase determinada lo cual admitirá cualquier NameBlock que sea instancia de esa clase o cualquier clase heredada de ella.
     115== Las clases vistas como tipos de usuario ==
     116
     117Los nombres de clase funcionarán como tipos definidos por el usuario a todos los efectos, salvo alguna excepción debida a las limitaciones del parser de TOL y que quedarán debidamente documentadas. Es posible entonces declarar argumentos de función de una clase determinada lo cual admitirá cualquier NameBlock que sea instancia de esa clase o cualquier clase heredada de ella.
    80118
    81119{{{
     
    87125Matrix c = sum(vd.ser, vd.mat);
    88126}}}
     127
     128== Otros ejemplos de clases ==
    89129
    90130Esta otra sería una clase primaria parcialmente virtual pues tiene algunos miembros y métodos definidos por defecto y otros no
     
    116156}}}
    117157
     158== El miembro privado reservado _this ==
     159
     160Todos los NameBlock, sean o no instancia de una clase, tienen un miembro privado llamado _this al que se puede acceder desde todos sus métodos.
     161
     162{{{
     163//Example of using implicit private member _this
     164NameBlock a =
     165[[
     166  Text _.name = "a";
     167  Text getName(Real unused) { _this::_.name }
     168]];
     169
     170//User cannot overwrite _this due to it's a reserved word
     171NameBlock b =
     172[[
     173  Text _.name = "b";
     174  NameBlock _this = a;
     175  Text getName(Real unused) { _this::_.name }
     176]];
     177 
     178}}}