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 TargetsV201


Ignore:
Timestamp:
Mar 12, 2009, 7:41:13 PM (16 years ago)
Author:
Víctor de Buen Remiro
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TargetsV201

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