Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Sobre los modificadores 'static' y 'abstract' (https://www.clubdelphi.com/foros/showthread.php?t=54660)

xaguilars 26-03-2008 19:52:32

Sobre los modificadores 'static' y 'abstract'
 
Hola quería saber si es posible hacer una clase estática o abstracta en delphi (version 2006), al estilo de java y demás.

Quiero hacer una clase abstracta para que no se pueda instanciar más que en sus descendientes, pero no me deja poner el modificador abstract (MyClass = abstract class ??). Lo mismo me pasa cuando intento hacer toda una clase estática.

Sé como hacer miembros abstractos y estáticos... pero clases enteras no.

Gracias por la ayuda

dec 26-03-2008 20:29:38

Hola,

Hasta donde yo llego, basta que una clase tenga un método "abstracto" o "estático" para que la clase que lo implementa se considere "abstracta" o "estática", respectivamente. No recuerdo ahora mismo que pueda explicitarse de otro modo esto. A lo mejor me equivoco. ;)

mamcx 26-03-2008 23:03:46

Si se puede...

http://dn.codegear.com/ru/article/33963

xaguilars 26-03-2008 23:19:48

Gracias, pero no se muestra ningún ejemplo de como usar clases estáticas.

He probado 'class abstract' y va bien.

dec 26-03-2008 23:22:41

Hola,

Pues así es la verdad. Después de Delphi 2007 pueden declararse clases como esta:

Código Delphi [-]
type
  TAbstractClass = class abstract
    procedure SomeProcedure;
end;

Este artículo también puede interesar. No obstante, creo que hasta Delphi 7, lo que he dicho arriba sirve...

dec 26-03-2008 23:24:09

Hola,

Cita:

Gracias, pero no se muestra ningún ejemplo de como usar clases estáticas.
Porque en este caso, si no me equivoco, se aplica lo que digo arriba. Revisa los artículos que enlazamos Mario y yo. ;)

Cita:

Classes can have static class methods -- i.e. methods that can be called from a class type. Class static methods can be accessed without an object reference. Unlike ordinary class methods, class static methods have no Self parameter at all. They also cannot access any instance members. (They still have access to class fields, class properties, and class methods.) Also unlike class methods, class static methods cannot be declared virtual.
Esto vendría a decir que no se declara una clase como estática porque esta puede contener métodos estáticos, pero, no ser estática ella misma, es decir, podría crearse una instancia suya. Claro que esto contradice un poco lo que he dicho más arriba, pero, ahora mismo no me queda claro si porque me nos liamos con versiones de Delphi hasta la 7 y versiones posteriores.

Yo tengo entendido que se considera una clase estática si esta cuenta con algún método estático. Pero parece posible instanciar una clase, aun teniendo algún método estático. Y, por otro lado, a partir de Delphi 7 se incluyen mejoras, como declarar propiedades estáticas, que no sé si podía hacerse en versiones anteriores, pero, creo que no.

xaguilars 26-03-2008 23:25:00

Creo que no es así, si declaras un miembro estático (class var nombreCampo / class procedure/function) o abstracto (function/procedure; virtual; abstract;) sólo son estáticos o abstractos esos miembros, no toda la clase, ya que tienes que instanciarla para acceder a los demás campos que no son ni estáticos ni abstractos.

En C#, cuando hay una clase estática todos los miembros tienen que ser obligatoriamente estáticos y las clases abstractas no se pueden instanciar a no ser que sea una clase heredada de esta.

Conclusión: Con Delphi > 7 se puede hacer lo mismo, lo que usa nombres diferentes (lo que no entiendo es porqué cuando escribo static se vuelve de color azul, como si fuera keyword).

Gracias


La franja horaria es GMT +2. Ahora son las 19:40:29.

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