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 16-02-2011
FelixInasa FelixInasa is offline
Registrado
NULL
 
Registrado: ene 2011
Posts: 1
Poder: 0
FelixInasa Va por buen camino
clase estatica D7

Hola

se pude definir una clase estática en D7?

gracias
Responder Con Cita
  #2  
Antiguo 16-02-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Que yo sepa, no.

De todas formas puedes usar una unidad Pascal como "pseudo-objeto". Yo lo hago muchas veces.

El compilador Pascal crea automáticamente "nombres de espacio" por cada unidad Pascal, de forma que pueden utilizarse para identificar objetos. Por ejemplo:
Código Delphi [-]
UNIT Unidad1;

INTERFACE

(* Método cualquiera. *)
  PROCEDURE ElMetodo;

IMPLEMENTATION
  PROCEDURE ElMetodo;
  BEGIN
    WriteLn ('Estamos en ElMetodo de la unidad 1.');
  END;
END.
Código Delphi [-]
UNIT Unidad2;

INTERFACE

(* Método cualquiera. *)
  PROCEDURE ElMetodo;

IMPLEMENTATION
  PROCEDURE ElMetodo;
  BEGIN
    WriteLn ('Estamos en ElMetodo de la unidad 2.');
  END;
END.
Código Delphi [-]
PROGRAM Ejemplo;

USES
  Unidad1, Unidad2;

BEGIN
  Unidad1.ElMetodo;
  Unidad2.ElMetodo;
END;
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 16-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por FelixInasa Ver Mensaje
Hola

se pude definir una clase estática en D7?

gracias
Todo depende de a qué le llames clase estática. Yo, por clase estática entenderia una cuyos métodos son todos estáticos, es decir, métodos asociados a la clase en sí y no a una instancia particular de la clase.

Y sí, delphi cuenta con los llamados métodos de clase que son sinónimos de los estáticos.

// Saludos
Responder Con Cita
  #4  
Antiguo 16-02-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

A partir de una version superior de Delphi 7 (Delphi 2007 por ejmplo)sí se puede, pero de Delphi 7 para abajo no se puede...
En Delphi 2007 se puede hacer así:
Código Delphi [-]
...
type
  TEntidad = class sealed //<-clase cerrada
  private
    Numero: Integer;
    Nombre: String;
  public
    constructor Create;
    procedure SetNombre( s: String );
  end;
..
Si intentamos crear una nueva clase descendiente de TEntidad
Código Delphi [-]
...
TCliente = class( TEntidad )
private
  CIF: String;
end;
..
El compilador gritará un error...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #5  
Antiguo 16-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No es lo mismo sealed que static.

// Saludos
Responder Con Cita
  #6  
Antiguo 16-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Todo depende de a qué le llames clase estática. Yo, por clase estática entenderia una cuyos métodos son todos estáticos, es decir, métodos asociados a la clase en sí y no a una instancia particular de la clase.

Y sí, delphi cuenta con los llamados métodos de clase que son sinónimos de los estáticos.

// Saludos
¿Será que yo ya estoy olvidando la teoría OO?
No recuerdo si existe, formalmente el concepto Clase estática, pero si métodos estáticos o métodos de clases.

Ahora me pregunto, El que una clase tenga métodos de clase es suficiente criterio como para concluir que la clase es estática.
A lo que voy: Si hay métodos estáticos, ergo: la clase es estática.

Me voy a los libros... porque ya estoy dudando.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 16-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Delphius Ver Mensaje
No recuerdo si existe, formalmente el concepto Clase estática, pero si métodos estáticos o métodos de clases.
Por eso dije yo que todo depende de lo que entienda por clase estática. Que yo sepa, ni Java ni C++ ni Delphi tienen clases estáticas. Pero, informalmente, se entiende por estática una clase en la que todos sus miembros son estáticos.


Cita:
Empezado por Delphius Ver Mensaje
Ahora me pregunto, El que una clase tenga métodos de clase es suficiente criterio como para concluir que la clase es estática.
No lo creo. No habiendo una definición formal de clase estática (*), tal apelativo sólo podría aplicarse si la totalidad de miembros son estáticos.


----------------------------
(*) Al parecer, C# sí implementa explícitamente las clases estáticas.


// Saludos
Responder Con Cita
  #8  
Antiguo 16-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Pues, creeme roman si lo que he dicho no iba en plan de humor... es una DUDA REAL que me asalta ahora ¿Siendo correctos, en la teoría OO, existe el concepto de clase estática? No apunto a si un lenguaje tiene o no soporte a eso... ¿Está el concepto en la teoría?

Sorprendentemente intento recordar la teoría... pero es como si esa zona en mi cabeza justo estuviera dañada. Recuerdo clases abstractas, virtuales, métodos estáticos, sobrecargados, etc. Pero en si... el concepto clase estática es como si no estuviera en mi cabeza

Me hace falta algo para la memoria

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 16-02-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por roman Ver Mensaje
No es lo mismo sealed que static.
Tal parece que entendí mal la pregunta..., quizás nuestro amigo FelixInasa debe aclararnos mejor lo que busca.
Cita:
Empezado por roman Ver Mensaje
Por eso dije yo que todo depende de lo que entienda por clase estática. Que yo sepa, ni Java ni C++ ni Delphi tienen clases estáticas. Pero, informalmente, se entiende por estática una clase en la que todos sus miembros son estáticos.
...
Pues en Java si existe el concepto de clase Estática aunque solo ésta permitido dentro de clases anidadas.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #10  
Antiguo 16-02-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Delphius Ver Mensaje
¿Será que yo ya estoy olvidando la teoría OO?
No, no has olvidado la teoría de la "Orientación a Objetos", porque las clases estáticas no son parte de esa teoría, sino un añadido posterior. Puede haber OO sin clases estáticas.
Cita:
Empezado por Delphius Ver Mensaje
¿Siendo correctos, en la teoría OO, existe el concepto de clase estática?
La teoría OO "sólo" exige:
  • Encapsulación
  • Herencia
  • Polimorfismo

Todo lo demás es accesorio. Además, las "clases estáticas" sólo pueden ser aplicadas a lenguajes orientados a clases . Hay lenguajes orientados a objetos que no tienen clases, como Small-Talk (el "Lenguaje Original").
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 16-02-2011 a las 19:02:19.
Responder Con Cita
  #11  
Antiguo 16-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Off topic

Fuera de tema:

Los creadores de lenguajes no sólo evitan suprimir la más perniciosa que provechosa sección privada de las clases, sino que encima se dan el lujo de inventar el concepto de clase sellada.

¿Qué sigue? ¿Clases de pago por evento? ¿Canon por redefinir métodos virtuales?

¡Pabernoslimitao!

Cierro este off topic de desahogo teórico-filosófico.
Responder Con Cita
  #12  
Antiguo 17-02-2011
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
A ver si aclaro...

Una "clase estática" es una clase que no tiene instancia... O mejor dicho, una clase que tiene una sola instancia que se crea automágicamente.

Por ejemplo en Java (de donde, se me ocurre, viene el término) uno puede hacer Numero= Math.Random() y obtener un número aleatorio entre 0 y 1 *SIN* tener que instanciar Math.

¿Adivinen qué es Math? Sí, una clase estática.

En otras palabras, en un lenguaje que sólo soporta programación OO, en algún momento se va a necesitar llamar a una función... El problema es que las funciones no existen en OO, solamente métodos adentro de clases. Es decir que sin instanciar una clase, no hay método. De ahí la clase estática. En Delphi llamás a random y listo, feliz de la vida... pero Java es otro cantar.

En este sentido, creo que en las versiones modernas de Delphi existe el modificador static, pero no podría asegurarlo, pero en D7 seguro que no.
Responder Con Cita
  #13  
Antiguo 17-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Lord Delfos Ver Mensaje
A ver si aclaro...
En este sentido, creo que en las versiones modernas de Delphi existe el modificador static, pero no podría asegurarlo, pero en D7 seguro que no.
Tal como dije desde el principio:

Cita:
Empezado por roman Ver Mensaje
Y sí, delphi cuenta con los llamados métodos de clase que son sinónimos de los estáticos.
Es decir, Delphi no cuenta con el modificador static pero sí cuenta con métodos estáticos, sólo que se llaman métodos de clase:

Código Delphi [-]
TMiObjeto = class(...)
  class procedure HazAlgo(...);
end;

Son estáticos en tanto que no requieren una instancia particular de la clase. Estos métodos existen también en delphi 7 y versiones anteriores.

Por otra parte, una misma clase puede tener métodos estáticos y métodos no estáticos.

// Saludos
Responder Con Cita
  #14  
Antiguo 17-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Tengo una duda en cuanto a las definiciónes de método estático y método de clase, que a fines prácticos, quizá no tenga mayor importancia.
Pero la comento a ver si me la pueden aclarar.

Un artículo de Ian Marteens que leí hace un tiempo en una parte dice:
Cita:
Primero, es necesario aclarar la diferencia entre un método estático y un método de clase, porque estos últimos ya existían en Delphi nativo. Aunque ambos tipos de métodos se aplican sobre un nombre de clase, en el caso del método estático no hay un parámetro oculto Self, como en los métodos de instancias; los métodos de clase sí utilizan un parámetro oculto Self, aunque éste apunta a una referencia de clase, en vez de apuntar a un objeto.
Y por otro lado encuentro esta definición en Wikipedia y en muchas páginas más, donde se considera a los términos como sinónimos:
Cita:
En la programación orientada a objetos, un método es una subrutina asociada exclusivamente a una clase (llamados métodos de clase o métodos estáticos) ...
Para mí ambos conceptos son cláramente antagónicos...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
INFO: DLL's, BPL's, carga dinámica, carga estática y Packages en Runtime Neftali [Germán.Estévez] OOP 26 13-12-2013 19:29:55
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 11:26:55
Clase jakuna OOP 2 30-08-2007 21:50:35
variable estatica no muere con el form !!!!!!!!!!! david_uh Varios 5 28-07-2007 00:51:14
...la clase... Jure Humor 0 27-07-2004 20:00:47


La franja horaria es GMT +2. Ahora son las 00:50:26.


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