Comunidad de diseño web y desarrollo en internet online

pregunta acera de POO y acceso a atributos

Citar            
MensajeEscrito el 27 Sep 2006 03:47 pm
Que es mas, correcto /elegante /usable ???

Si tengo una clase que tiene una propiedad (atributo publico), de que manera debe accederse a ella??

Código :

//asignar
mibojeto.propiedad =  valor;
//obtener
variable = mibojeto.propiedad;

ó via getter/setter

Código :

//asignar
mibojeto.setPropiedad(valor);
//obtener
variable = mibojeto.getPropiedad(valor);

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 27 Sep 2006 04:22 pm
Lo cierto es que depende de lo que quieras hacer. Yo personalmente uso siempre que puedo getters y setters auténticos, (public function get/set nombreFuncion(...){...}) ya que estos te permiten trabajar como si fueran propiedades, (más cómodo al acceder a la clase) y ejecutar acciones cuando los ves o cambias.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 27 Sep 2006 04:53 pm
Cuando los atributos son "vitales" para el funcionamiento del objeto, lo adecuado es hacerlo como privado, pero un atributo privado no puede ser accedido fuera de la definicion de la clase o de un hijo de ella, aqui es donde entra los getters y setters. Ellos te permiten crear como un "alias" para llegar a esos atributos privados. Ejemplo:

Código :

class MyClass
{
   private var prop:Number;
   
   function MyClass()
   {
   }
   
   public function set privateProp(param:Number)
   {
      this.prop = param;
   }
   public function get privateProp()
   {
      return prop;
   }
}


y el .fla

Código :

import MyClass;

var obj:MyClass = new MyClass();

obj.privateProp = 3;

trace(obj.prop);  // genera un error, una propiedad privada no puede ser acceddida

trace(obj.privateProp); // salida: 3


Hacer getter y setter para un atributo público es algo casi que "inutil" porque muy bien puedes acceder a él directamente. Con un setter puede hacer validaciones extras que necesites, por ejemplo:

Código :

   public function set privateProp(param:Number)
   {
      if (param > 5)
         this.prop = param;
      else
         this.prop = 5;
   }


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 27 Sep 2006 06:10 pm

Maikel escribió:



Código :

class MyClass
{
   private var prop:Number;
   
   function MyClass()
   {
   }
   
   public function set privateProp(param:Number)
   {
      this.prop = param;
   }
   public function get privateProp()
   {
      return prop;
   }
}


Y conviértete en un java-monkey picador de código redundante y sin sentido.

En cambio en este otro caso SI es válido (desde mi punto de vista)

Maikel escribió:


Código :

   public function set privateProp(param:Number)
   {
      if (param > 5)
         this.prop = param;
      else
         this.prop = 5;
   }


saludos


Es decir, usa SETTERs/GETTERs cuando las variables tengan restricciones tales como que no debas ponerle ciertos valores, o simplemente por seguridad.

En el POO Estricto NINGUNA variable ha de ser pública, pero esto deja de ser funcional, por ello has de encontrar un equilibrio entre funcionalidad y seguridad... ya que no debes dejar todas las variables públicas por mucha alegría que te dé o puede llevar a errores

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

clabbrowser
Citar            
MensajeEscrito el 27 Sep 2006 06:33 pm
La necesidad es que los valida _CONEJO :wink:

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 27 Sep 2006 08:06 pm
Ohh , interesante, esto me da nuevas perspectivas. ^^^^ ^^
Gracias!!!

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 28 Sep 2006 05:04 am

Maikel escribió:

pero un atributo privado no puede ser accedido fuera de la definicion de la clase o de un hijo de ella


Mm.. un hijo sabe todo lo que debe saber del padre, incluidas las propiedades privadas.

Código :

class a{
   private var var1:Number;
}


Código :

class b extends a{
   function b(var1:Number){
      this.var1=var1;
      trace(this.var1);
   }
}


Código :

var obj:b = new b(5);


Esto muestra por pantalla "5".

Un saludo ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

firefox
Citar            
MensajeEscrito el 28 Sep 2006 12:28 pm
Si lees bien dije eso :wink: .

Además es algo particular en Actionscript y en realidad NO lo debería saber.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.