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 06-06-2011
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
Creacion de una clase

Hola chavales, tengo la siguiente duda

¿que diferencia hay entre definir las variables con property o con funciones y procedures que ataquen a la propiedad? ¿Cual es mejor?

Código Delphi [-]
 
unit Unit2;
interface
type
Tcoche=class
private
// varaiables privadas
cocheMarca:string;
cocheRuedas:integer;
public
// funciones para la variable cocheRuedas
function getRuedas: integer;
procedure setruedas(const Value: integer);
// propiedad marca que guarda y lee de cocheMarca
property marca:string read cocheMarca write cocheMarca;
// propiedad ruedas que lee y guarda en cocheRuedas
property ruedas:integer read getRuedas write setruedas;
// constructor de la clase
constructor create(marcaP:string;ruedasP:integer);
end;
implementation
{ Tcoche }
constructor Tcoche.create(marcaP:string;ruedasP:integer);
begin
      cocheMarca := marcaP;
      cocheRuedas := ruedasP;
end;
function Tcoche.getRuedas: integer;
begin
     getRuedas := cocheRuedas;
end;
procedure Tcoche.setruedas(const Value: integer);
begin
     cocheRuedas := Value;
end;
end.

un saludo y muchas gracias!
Responder Con Cita
  #2  
Antiguo 06-06-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.
Cita:
¿que diferencia hay entre definir las variables con property o con funciones y procedures que ataquen a la propiedad? ¿Cual es mejor?
Siempre que sea posible, es mejor implementar la propiedad modificando en forma directa a un atributo, ya que una llamada a un método es mucho más lenta y costosa en recursos que una asignación a un atributo.

Es decir que es más eficiente:
Código Delphi [-]
  ...
  private
    cocheRuedas:Integer;
  public
    property ruedas:Integer read CocheRuedas write CocheRuedas;
  ...

Que:
Código Delphi [-]
  ...
  private
    cocheRuedas:Integer
    function GetRuedas: Integer;
    procedure SetRuedas(const Value: Integer);
  public
    property ruedas:Integer read GetRuedas write SetRuedas;
  ...


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-06-2011 a las 18:15:01.
Responder Con Cita
  #3  
Antiguo 06-06-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

El uso de "setters" y "getters" para definir las propiedades depende mucho de como quieres que se comporten estas. Si solo necesitas que la propiedad guarde un valor, puedes indicarle que use una variable privada:

Código Delphi [-]
TMyClass = class
private
  FName: string;
public  // o published
  property Name: string
    read FName
    write FName;
end;

Pero si quieres que al asignar una propiedad se produzca un efecto secundario (repintar el control) o se calcule el valor de la propiedad, entonces usas los métodos:

Código Delphi [-]
TMyClass = class(TGraphicObject)
private
  FColor: TColor;

  procedure SetColor(Value: TColor);
published
  property Color: TColor
    read FColor
    write SetColor;
end;

implementation

procedure TMyClass.SetColor(Value: TColor);
begin
  if FColor <> Value then
  begin
    FColor := Value;
    Invalidate
  end
end;

Espero que esta pequeña explicación disipe tu duda.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #4  
Antiguo 06-06-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
ecfisa podrá ser más rápido pero es una via no demasiado segura.

El uso de los métodos get y set para las propiedades están hechos para dar seguridad e implementar mecanismos de control.
Quizá por naturaleza del problema algunas propiedades no requieran de un método set y/o get pero no por ello hay que argumentar que mientras sea posible hay que evitar el uso de métodos e irse por la lectura y escritura directa en el campo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 06-06-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: 29
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
Cita:
Empezado por ecfisa Ver Mensaje
Siempre que sea posible, es mejor implementar la propiedad modificando en forma directa a un atributo, ya que una llamada a un método es mucho más lenta y costosa en recursos que una asignación a un atributo.
Cita:
Empezado por Delphius Ver Mensaje
ecfisa podrá ser más rápido pero es una via no demasiado segura.

El uso de los métodos get y set para las propiedades están hechos para dar seguridad e implementar mecanismos de control.
Quizá por naturaleza del problema algunas propiedades no requieran de un método set y/o get pero no por ello hay que argumentar que mientras sea posible hay que evitar el uso de métodos e irse por la lectura y escritura directa en el campo.
Entiendo la interpretación que haces, Marcelo, pero creo que, dado el código puesto por el compañero mierda, lo qué comentó ecfisa va en relación a los métodos que únicamente leen o escriben el valor de la propiedad en un campo privado de la clase.

Saludos.

Al.
Responder Con Cita
  #6  
Antiguo 06-06-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 Delphius.

No estoy diciendo lo contrario, no afirmé en ningún momento que fuera más seguro asignar directo a un atributo que mediante un método,
sólo digo que es más eficiciente en el caso presentado.
No es posible (o al menos buena práctica) utilizar esa forma de asignación si el valor a modificar es foráneo o si sobre el mismo se deben imponer restricciones de algún tipo, en ese caso, indudablemente se debe asignar mediante un método.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-06-2011 a las 19:02:48.
Responder Con Cita
  #7  
Antiguo 06-06-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 ecfisa Ver Mensaje
Hola Delphius.

No estoy diciendo lo contrario, no afirmé en ningún momento que fuera más seguro asignar directo a un atributo que mediante un método,
sólo digo que es más eficiciente en el caso presentado.
No es posible (o al menos buena práctica) utilizar esa forma de asignación si el valor a modificar es foráneo o si sobre el mismo se deben imponer restricciones de algún tipo, en ese caso, indudablemente se debe asignar mediante un método.

Saludos.
Cita:
Empezado por Al González Ver Mensaje
Entiendo la interpretación que haces, Marcelo, pero creo que, dado el código puesto por el compañero mierda, lo qué comentó ecfisa va en relación a los métodos que únicamente leen o escriben el valor de la propiedad en un campo privado de la clase.

Saludos.

Al.
Entiendo, había interpretado mal el mensaje. Debería haber leído de nuevo para captarlo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 06-06-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 de nuevo Delphius.

No no, está muy bién tu acotación.
Yo presupuse que que se sobreentendía y mierda (perdón pero me causa) hizo una pregunta por la cuál tendría que haberme dado cuenta que tenía sólo conocimientos básicos sobre el tema. Así que de última el que se limitó al ejemplo dejando un vacío de información fuí yo...

Solamente te quería aclarar que estoy conciente y de acuerdo con vos, que es más seguro vía método por que permite comprobaciónes que serían imposibles hacíendo la asiganción de forma directa.

Es decir, redondeando la idea: Siempre es deseable la eficiencia excepto a costa de sacrificar seguridad.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 07-06-2011
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
Muchas gracias

Muchas gracias a todos los que habéis contestado ... entendido
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
Pasar mi clase a una clase de 3 capas o lo mas parecido elarys OOP 2 07-04-2011 23:02:54
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
Duda sobre creación de clase (Free y Destroy) adlfv OOP 3 09-10-2005 06:11:16
...la clase... Jure Humor 0 27-07-2004 20:00:47


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


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