Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   método estático (https://www.clubdelphi.com/foros/showthread.php?t=3978)

shaktale 26-09-2003 12:09:22

método estático
 
Una pregunta sencilla:
¿Cómo se define en Delphi un método de una función como estático?

haron 26-09-2003 12:48:53

no estoy seguro, pero creo que no se puede.

si quieres un metodo estatico, simplemente declaralo en tu unidad coo un procedimiento normal:

Código:

UNIT libreria;

INTERFACE

procedure metodo;

IMPLEMENTATION

procedure metodo;
begin
  // implementacion del metodo
end;

END.


shaktale 26-09-2003 12:58:46

gracias haron

Lo de implementarlo en forma de funcion normal es la forma en que lo había solucionado, pero no me parecía muy elegante lo de andar mezclando OOP con programación estructurada, por eso quería saber si se puede hacer con un estático.

Si es cierto que no se puede hacer, ¿alguién sabe a qué se debe esto?

saludos

Viet 26-09-2003 13:45:39

Tal ves esto aclare un poco las cosas (del help de delphi):

All methods are static unless you specify otherwise when you declare them. Static methods work like regular procedures or functions. The compiler determines the exact address of the method and links the method at compile time.

The primary advantage of static methods is that dispatching them is very quick. Because the compiler can determine the exact address of the method, it links the method directly. Virtual and dynamic methods, by contrast, use indirect means to look up the address of their methods at runtime, which takes somewhat longer.

A static method does not change when inherited by a descendant class. If you declare a class that includes a static method, then derive a new class from it, the derived class shares exactly the same method at the same address. This means that you cannot override static methods; a static method always does exactly the same thing no matter what class it is called in. If you declare a method in a derived class with the same name as a static method in the ancestor class, the new method simply replaces the inherited one in the derived class.


Saludos ;)

haron 26-09-2003 18:07:37

essattamente.

realmente cuando se declara un metodo dentro de una clase, la referencia a ese metodo es estatica, si quieres que no lo sea tienes que incorporar la directiva 'override', y tambien existe otra que se llama 'overload' y otra que se llama 'reintroduce' y otra que se llama... no me acuerdo, pero hay otra.

en definitiva, la programacion en Delphi, sinceramente, no merece un premio por simplicidad.

creo que a lo que se referia shaktale es a lo siguiente

Código:

TObjeto=class
..
..

procedure metodo; static;

end;

de manera que pudiese invocar ese metodo:

Código:

TObjeto.metodo;
sin necesidad de crear una instancia de la clase TObjeto (si no es eso a lo que se refiere shaktale, porfavor que me corrija)

esto no se puede hacer en Delphi.

esto se puede hacer en Java y aunque algunos creen que va en contra de la OOP si viene muy bien en muchos casos.

bueno, como lenguaje, Delphi, cada vez me decepciona mas...

roman 26-09-2003 18:19:49

Cita:

Posteado originalmente por haron

creo que a lo que se referia shaktale es a lo siguiente

Código:

TObjeto=class
..
..

procedure metodo; static;

end;

de manera que pudiese invocar ese metodo:

Código:

TObjeto.metodo;
sin necesidad de crear una instancia de la clase TObjeto (...)

esto no se puede hacer en Delphi.

Yo creo, sin ánimo de ofender, que estás mal entendiendo.

Los métodos que puedes llamar como TObjeto.metodo sí que existen en Delphi pero se llaman métodos de clase y se declaran así:

Código:

TMiClase = class
  class procedure metodo;
end;

La referencia de Viet a lo que indica la ayuda de Delphi es bastante clara. Por "default" los métodos en Delphi son estáticos. En otros lenguajes por "default" son virtuales y hay que declararlos como estáticos si así los quiere uno

Cita:

Posteado originalmente por haron

bueno, como lenguaje, Delphi, cada vez me decepciona mas...

Lamento que tengas esta opinión; sólo puedo decirte que me parece que hay que entender un poco más el lenguaje para poder juzgarlo tan severamente.

// Saludos

Viet 26-09-2003 18:20:42

No quiero hacer un debate... pero: yo he programado en VC++(donde si se puede hacer un metodo Static), VB , algo en java y obviamente Delphi . (Sin contar ASP y algo de PHP) . Y salvando las obvias diferencias que existen con los lenguajes Web, Delphi me sigue pareciendo ampliamente superior a todos los que probe.

Pero como dice el dicho " nadie es perfecto".... :p

haron 26-09-2003 18:33:34

:o eso me pasa por bocazas.

he estado a punto de poner 'creo que no se puede'.

Código:

TMiClase = class
  class procedure metodo;
end;

pues me parece muy interesante esta forma de declarar metodos 'estaticos' como en Java.

de todas formas Java como lenguaje me parece infinitamente mas sencillo que Delphi y creo que deberia tomarse como referencia.

creo que le voy a poner los cuernos a Delphi.

Al González 29-09-2003 01:42:53

:) ¡Buen día a todos!

En Definitiva Delphi es una de las mejores opciones para programación orientada a objetos, en gran parte porque paradójicamente uno decide que tan orientado a objetos programar: Libertad.

Se pueden definir métodos estáticos, virtuales, dinámicos, redefinidos, sobrecargados, clase, constructores, destructores, de lectura y escritura para propiedades, etc: Flexibilidad.

La manera en que el compilador genera el código máquina le haría brillar los ojos a Einstein: Potencia.

El lenguaje fuente es bastante legible, intuitivo, fácil de memorizar y fácil de teclar: Amigabilidad.

Sus herramientas auxiliares, su biblioteca nativa, las ya existentes de otros fabricantes y la posibilidad de crear otras, son un pilar invaluable: Recursos.

Hay muchas herramientas de programación que dan libertad, que son flexibles, potentes, amigables y que cuentan con útiles recursos. Sólo que Delphi es una de las pocas que presentan estas cinco características.

Espero esto sea de utilidad. Seguimos en contacto.

Al González :).


La franja horaria es GMT +2. Ahora son las 12:23:05.

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