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 Initial Version and Version 1 of TargetsV201


Ignore:
Timestamp:
Mar 12, 2009, 2:52:05 PM (16 years ago)
Author:
Víctor de Buen Remiro
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TargetsV201

    v1 v1  
     1= Targets of TOL 2.0.1 =
     2
     3== OOP ==
     4La principal diferencia del nuevo TOL con respecto a sus predecesores será la apuesta por la programación orientada al objeto (OOP).
     5
     6Se 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.
     7
     8La siguiente sería una declaración de clase primaria estructural, ya que no tiene ningún método
     9
     10
     11{{{
     12Class Doc
     13{
     14  Text _.name;
     15  Text _.description
     16};
     17}}}
     18
     19La 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
     20
     21{{{
     22Class Vector
     23{
     24  Matrix  get.column  (Anything unused);
     25  Real    has.timeInfo(Anything unused);
     26  TimeSet dating      (Anything unused);
     27  Date    firstDate   (Anything unused);
     28  Date    lastDate    (Anything unused)
     29};
     30}}}
     31
     32Es 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:
     33
     34{{{
     35//Si no se quiere cambiar nada con herencia múltiple se enumeran las clases
     36//antecesoras
     37Class VectorDoc: Vector, Doc;
     38
     39//Con herencia simple no tiene mucho sentido no cambiar nada
     40//pues sería una simple clonación de tipos
     41Class VectorDoc.Ser: VectorDoc
     42{
     43  Serie  _ser;
     44  Matrix  get.data    (Anything unused) { Tra(SerMat(_ser)) };
     45  Real    has.timeInfo(Anything unused) { True };
     46  TimeSet dating      (Anything unused) { Dating(_ser) };
     47  Date    firstDate   (Anything unused) { First(_ser) };
     48  Date    lastDate    (Anything unused) { Last(_ser) }
     49};
     50
     51Class VectorDoc.Mat: VectorDoc
     52{
     53  Matrix _mat;
     54  Matrix  get.data    (Anything unused) { _mat }
     55  Real    has.timeInfo(Anything unused) { False };
     56  TimeSet dating      (Anything unused) { W };
     57  Date    firstDate   (Anything unused) { UnknownDate };
     58  Date    lastDate    (Anything unused) { UnknownDate }
     59};
     60}}}
     61
     62Una 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.
     63
     64{{{
     65VectorDoc.Ser vd.ser =
     66[[
     67  Text    _.name = "Viernes";
     68  Text    _.description = "Es 1 los días viernes y 0 el resto";
     69  Serie   _ser = CalInd(WD(5),C)
     70]];
     71
     72VectorDoc.Mat vd.mat =
     73[[
     74  Text   _.name = "Constante";
     75  Matrix _mat = SetCol(NCopy(1,100));
     76  Text   _.description = "Siempre vale 1"
     77]];
     78}}}
     79
     80Los 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.
     81
     82{{{
     83Matrix sum(Vector a, Vector b)
     84{
     85  a::get.data(0) + b::get.data(0)
     86};
     87
     88Matrix c = sum(vd.ser, vd.mat);
     89}}}
     90
     91Esta otra sería una clase primaria parcialmente virtual pues tiene algunos miembros y métodos definidos por defecto y otros no
     92
     93{{{
     94Class Input
     95{
     96  VectorDoc _.data;
     97  Real  _.enabled = True;
     98  Polyn _.omega = 1;
     99  Polyn _.delta = 1;
     100  Ratio transferFunction (Anything unused)
     101  {
     102    _.omega / _.delta
     103  };
     104  Matrix eval(Polyn omega, Polyn delta)
     105  {
     106    Polyn  _.omega := omega;
     107    Polyn  _.delta := delta;
     108    MatDifEq(transferFunction, _.vector::get.column(0))
     109  }
     110};
     111
     112Class Output
     113{
     114  VectorDoc _.data;
     115  Set _.arima
     116};
     117}}}
     118
     119== BSR ==
     120
     121 El sistema completo BSR se migra al paradigma OOP para permitir una claridad de uso y eliminar ambigüedad en las API de definición y manejo de los modelos.
     122