Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-03-2008
xaguilars xaguilars is offline
Miembro
 
Registrado: jul 2007
Posts: 22
Poder: 0
xaguilars Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 26-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 26-03-2008
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Si se puede...

http://dn.codegear.com/ru/article/33963
__________________
El malabarista.
Responder Con Cita
  #4  
Antiguo 26-03-2008
xaguilars xaguilars is offline
Miembro
 
Registrado: jul 2007
Posts: 22
Poder: 0
xaguilars Va por buen camino
Gracias, pero no se muestra ningún ejemplo de como usar clases estáticas.

He probado 'class abstract' y va bien.
Responder Con Cita
  #5  
Antiguo 26-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 26-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 26-03-2008 a las 23:28:55.
Responder Con Cita
  #7  
Antiguo 26-03-2008
xaguilars xaguilars is offline
Miembro
 
Registrado: jul 2007
Posts: 22
Poder: 0
xaguilars Va por buen camino
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

Última edición por xaguilars fecha: 26-03-2008 a las 23:34:42.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error Abstract Error y Access violation zvf OOP 33 08-09-2010 18:50:33
Articulo sobre la facilidad de probar componentes open source en windows sobre linux gmontes Noticias 0 22-08-2007 22:34:16
Static Controls carlos_nielsen API de Windows 0 16-01-2007 16:59:24
Abstract Error al cerrar aplicación jymy788 Varios 6 01-07-2005 20:55:01
formStyle=fsMDIForm, formStyle=fsMDIChild == "Abstract Error" Essato Varios 16 15-06-2005 19:55:34


La franja horaria es GMT +2. Ahora son las 12:51:57.


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
Copyright 1996-2007 Club Delphi