Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como tener un Array Constante dentro de una clase (https://www.clubdelphi.com/foros/showthread.php?t=27257)

cmurua71 16-11-2005 02:35:21

Como tener un Array Constante dentro de una clase
 
Hola !

Tengo un problema: tengo una clase en la cual tengo que hacer una conversion de valores utilizando 10 coeficientes. Estos coeficientes son fijos, por lo que los puse dentro de una matriz. Una posibilidad es declarar el array como un atributo cualquiera y ¨llenarlo¨ en el constructor.

Otra posibilidad supongo que es declararlo como un atributo Constante, pero el problema es que no sé como se hace esto ultimo. Si me pueden ayudar, les agradecería mucho

Carlos

dec 16-11-2005 03:07:14

Hola,

¿Te refieres a algo así?

Código Delphi [-]
 const
   MiArrayDeEnteros: array[1..3] of integer = (1, 2, 3);
   MiArrayDeCadenas: array[1..3] of string = ('Una cadena', 'Otra cadena', 'Otra cadena más');

cmurua71 16-11-2005 03:23:49

Pero como lo declaro en una clase ?
 
Me refiero a algo así, pero necesito que el Array sea un atributo constante privado de una clase, y no sé donde declarar (o cómo) las constantes de una clase.

Te paso el codigo que me funciona, pero me gustaria saber como hacerlo de una manera ¨mas elegante¨ por asi decirlo

Código Delphi [-]
 INTERFACE
 
     TTemperaturaAmbiente = Class(TParametro)
 
     Private
 
     TempToVolt:array[0..9] of double;
 
     Public
       Constructor Create();
       Function GetValue(): double; Override;
       Function GetVolt(): double; Override;
       Function toVTermK():double;
     End;
 
 IMPLEMENTATION
 
 {########## TTemperaturaAmbiente ################}
 {--------------------------------------------------------}
   Constructor TTemperaturaAmbiente.Create;
   Begin
     TempToVolt[0] := -1.7600413686E-2;
     TempToVolt[1] := 3.8921204975E-2;
     TempToVolt[2] := 1.8558770032E-5;
     TempToVolt[3] := -9.9457592874E-8;
     TempToVolt[4] := 3.1840945719E-10;
     TempToVolt[5] := -5.6072844889E-13;
     TempToVolt[6] := 5.6075059059E-16;
     TempToVolt[7] := -3.2020720003E-19;
     TempToVolt[8] := 9.7151147152E-23;
     TempToVolt[9] := -1.2104721275E-26;
   End;
 
 {--------------------------------------------------------}
   Function TTemperaturaAmbiente.GetVolt;
   Begin
        Result := (((MaxVolt-MinVolt)/(Power(2,NumBits)))*(Fuente.getFromBuffer(Ubicacion)/Multiplicador))+MinVolt;
   End;
 {--------------------------------------------------------}
   Function TTemperaturaAmbiente.GetValue;
   Begin
        Result := (Self.GetVolt*Pendiente)+Ordenada;
   End;
 {--------------------------------------------------------}
   Function TTemperaturaAmbiente.toVTermK():double;
   Var
     Aux: Double;
     i:Integer;
 
   Begin
     Aux:= 0;
     For i:=0 to 9 do
       Aux:=Aux+(TempToVolt[i]*Power(Self.GetValue,i));
     Result:= Aux;
   End;
 {--------------------------------------------------------}
Gracias

Carlos

dec 16-11-2005 03:46:34

Hola,

Se me ocurre que declares la constante en la parte "implementation" de la clase. De este modo podrás "inicializarla" como arriba se refiere. Los métodos de la clase que devuelvan determinados valores basándose en el array constante podrán seguir haciéndolo refieriéndose a dicha constante, y no a ningún miembro de la clase (léase variable) que ya no sería preciso usar. A ver si a alguien se le ocurre otra cosa. ;)

Lepe 16-11-2005 11:53:16

No sé si lo he entendido bien, ¿es algo así?
Código Delphi [-]
 INTERFACE
const
    // ta = Temperatura Ambiente
{ estos nombres me los he inventado, supongo que tu  puedes
  darle nombres más adecuados
}
     taAlSol = -1.7600413686E-2;
     taSinViento= 3.8921204975E-2;
     taConViento := 1.8558770032E-5;
    ....

 type
     TTemperaturaAmbiente = Class(TParametro)
 
     Private
 
     TempToVolt:array[0..9] of double;
 
     Public
       Constructor Create();
       Function GetValue(): double; Override;
       Function GetVolt(): double; Override;
       Function toVTermK():double;
     End;
 
 IMPLEMENTATION
 
 {########## TTemperaturaAmbiente ################}
 {--------------------------------------------------------}
   Constructor TTemperaturaAmbiente.Create;
   Begin
     TempToVolt[0] := taAlSol;
     TempToVolt[1] := taSinViento;
     TempToVolt[2] := taConViento;
     ....
   End;
 
 {--------------------------------------------------------}
   Function TTemperaturaAmbiente.GetVolt;
   Begin
        Result := (((MaxVolt-MinVolt)/(Power(2,NumBits)))*(Fuente.getFromBuffer(Ubicacion)/Multiplicador))+MinVolt;
   End;
 {--------------------------------------------------------}
   Function TTemperaturaAmbiente.GetValue;
   Begin
        Result := (Self.GetVolt*Pendiente)+Ordenada;
   End;
 {--------------------------------------------------------}
   Function TTemperaturaAmbiente.toVTermK():double;
   Var
     Aux: Double;
     i:Integer;
 
   Begin
     Aux:= 0;
     For i:=0 to 9 do
       Aux:=Aux+(TempToVolt[i]*Power(Self.GetValue,i));
     Result:= Aux;
   End;
 {--------------------------------------------------------}

De esta forma, el usuario de la clase, puede usar las constantes para saber qué temperatura se devuelve.

Ya nos contarás. Saludos

roman 16-11-2005 16:34:48

Cita:

Empezado por dec
A ver si a alguien se le ocurre otra cosa.

Pues no. Ésta es la forma de simular variables de clase en Delphi, ya que no cuenta con ellas.

// Saludos

dec 16-11-2005 17:22:19

Hola,


Cita:

Empezado por roman
Pues no. Ésta es la forma de simular variables de clase en Delphi (...)

Eso me había parecido, sí. ;)

cmurua71 18-11-2005 02:52:45

Ok, gracias por la ayuda
 
Muchas gracias, exactamente era eso lo que queria encontrar, como declarar una variable de clase en Delphi, creí que las tenia

Gracias de nuevo

Carlos


La franja horaria es GMT +2. Ahora son las 01:09:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi