C# y Properties. Una alternativa mas sana a los setters y getters.

Si han tenido que diseñar software aunque sea un poco trivial, se deben haber dado cuenta de lo necesarios que son los setters y los getters. ¿Cómo para qué? . Bueno, imaginemos que diseñamos la hipotética clase Punto; que representa un punto en un plano cartesiano.

Class Punto
{
public int x;
public int y;
}

Ahora algún cliente que vaya a usar la clase podría hacer algo así:

Punto miPunto;
miPunto.x = 500;
miPunto.y = 0;


Todo simple y sin problemas no?... Bueno ¿Qué pasa si de repente nos damos cuenta que necesitamos asegurarnos que las entradas no sean negativas? Ahí es donde entran los setters y los getters. Ahora rediseñaremos nuestra clase usandolos:

Class Punto
{
private int x;
private int y;

public int getX()
{
return x;
}

public int getY()
{
return y;
}

public void setX(int new)
{
if(new < x =" new;" y =" new;">

Y ahora ya podemos estar seguros que nunca se van a signar valores negativos a nuetras coordenadas : D . Ahora lo malo es que esta notación lleva al cliente a TENER que cambiar su código. Ahora el código del cliente de la clase quedaría así:

Punto miPunto;
miPunto.setX(500);
miPunto.setY(0);


Y no solo eso, sino que la notación es bastante incómoda y poco intuitiva. Qué pasa si por ejemplo queremos incrementar a x ? El cliente tendría que:

miPunto.setX(miPunto.getX() + 1);


¿De verdad se entiende la intención de esa linea claramente?. No mucho!!!.

C# proporciona un truquito muy lindo para manejar este tipo de asuntos, y una alternativa mucho más sana (mentalmente hablando) a los getters y setters; las propiedades.

Las propiedades son un tipo especial de método que C# (bueno también mi querido Python) nos ofrece para hacer más transparente este proceso de getting y setting. Vamos directo al grano, rediseñemos nuestra clase haciendo uso de las Properties.

Class Punto
{
private int _x;
private int _y;

public int x
{
get
{
return this._x;
}
set
{
if(value < _x =" value;" _y =" value;">

Listo. Ahora el cliente no tendría que cambiar su código, y aún así podríamos estar seguros de no asignar valores negativos! No solo eso, sino que en general el uso se vuelve más claro, ahora por ejemplo si queremos incrementar x, solo tenemos que hacer:

miPunto.x++;
Mucho más claro ¿no?. Bueno, gracias por leer, espero les haya sido útil la información.

Happy Coding!

0 comentarios: