Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   clase estatica D7 (https://www.clubdelphi.com/foros/showthread.php?t=72391)

FelixInasa 16-02-2011 09:22:19

clase estatica D7
 
Hola

se pude definir una clase estática en D7?

gracias

Ñuño Martínez 16-02-2011 10:11:02

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;

roman 16-02-2011 15:36:59

Cita:

Empezado por FelixInasa (Mensaje 391085)
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

rgstuamigo 16-02-2011 15:39:49

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...:)

roman 16-02-2011 16:12:36

No es lo mismo sealed que static.

// Saludos

Delphius 16-02-2011 16:21:06

Cita:

Empezado por roman (Mensaje 391126)
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. :eek: :o

Saludos,

roman 16-02-2011 16:34:13

Cita:

Empezado por Delphius (Mensaje 391140)
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 (Mensaje 391140)
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

Delphius 16-02-2011 17:50:33

Pues, creeme roman si lo que he dicho no iba en plan de humor... es una DUDA REAL que me asalta ahora :eek: ¿Siendo correctos, en la teoría OO, existe el concepto de clase estática? :confused: 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 :eek:

Me hace falta algo para la memoria :o

Saludos,

rgstuamigo 16-02-2011 18:20:16

Cita:

Empezado por roman (Mensaje 391135)
No es lo mismo sealed que static.

Tal parece que entendí mal la pregunta...:o, quizás nuestro amigo FelixInasa debe aclararnos mejor lo que busca.;)
Cita:

Empezado por roman (Mensaje 391144)
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...:)

Ñuño Martínez 16-02-2011 18:58:19

Cita:

Empezado por Delphius (Mensaje 391140)
¿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 (Mensaje 391150)
¿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").

Al González 16-02-2011 19:12:25

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! :D

Cierro este off topic de desahogo teórico-filosófico. :o

Lord Delfos 17-02-2011 02:44:22

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.

roman 17-02-2011 09:26:48

Cita:

Empezado por Lord Delfos (Mensaje 391198)
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 (Mensaje 391126)
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

ecfisa 17-02-2011 10:48:11

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.


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

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