lunes, 22 de febrero de 2010

Encapsulamiento

Una de las maneras más eficientes de mantener la seguridad en las aplicaciones Web y de Escritorio en cualquier lenguaje de programación es el Encapsulamiento, además de brindar seguridad a las aplicaciones permite tener una organización muy precisa a la hora de desarrollar sin embargo en muchas ocasiones se vuelve tedioso manejar todos los métodos de encapsulamiento de un objeto, en especial cuando son muchos los atributos de la clase.


Empecemos por definir ciertos conceptos básicos de la programación orientada a objetos (POO). Está compuesta por clases, una clase en términos coloquiales, es el plano de un objeto, es donde se deben definir todas las características de los objetos de la vida real o de objetos abstractos, en POO siempre se habla de dos conceptos claves: Atributos y Métodos.

Atributos: Son las características de los objetos, por ejemplo, los atributos de una persona son, nombre, apellidos, número de documento, estatura, color de piel, peso, etcétera.

Métodos: Son las funciones o acciones del objeto en caso de la persona, los métodos son, caminar, hablar, reír, pensar, gritar, etcétera.

Una de las premisas de POO, es que la mayoría, sino todos, los atributos de un objeto deben ser privados, esto para tener seguridad sobre los valores del objeto, pero entonces...¿cómo acceder a los atributos de una clase?, la respuesta, encapsulamiento, los métodos de encapsulamiento se utilizan sólo cuando es apropiado entregar los datos a otro objeto que solicite la información. Un ejemplo por favor.

Piensa en tus atributos, tienes nombres, apellidos, bla, bla bla, esto ya lo habíamos dicho, todos esos atributos son privados, ¿pero si son privados...porque la gente me llama por mi nombre? fácil, por los métodos de encapsulamiento que permiten al objeto entregar la información que sea solicitada por otro objeto... sigamos con el ejemplo, te encuentras en un Bar, a lo lejos en la penumbra vez una sombra que se acerca a tu mesa, estás sólo/a era de esperarse porque nadie te quiere...(sí estás leyendo esto es porque eres programador, los programadores no tienen amigos, eso todo el mundo lo sabe)...pero la sombra se sigue acercando, cuando la reducida luz que se encuentra sobre tu persona, alcanza a iluminar ligeramente al desconocido/a vez que es lo que estabas esperando, sí eres hombre, es la mujer más hermosa del mundo y te tiene ganas. Sí eres mujer es un fulano guapo que te tiene ganas, él/ella atravesó todo el bar para conocer tu atributo privado nombre, tu utilizas tú método de des-encapsulamiento para entregarle a el/la desconocido/a ese valor...pfff entonces, ¿para qué encapsulo si al final voy a entregar el valor a cualquier desconocido?. Imagina la misma escena, sólo que esta vez no es el amor de tu vida sino un ladrón que te va a hacer el paseo millonario y que esta vez no está interesado en tu nombre sino en tu clave de la tarjeta, ¿tu se lo entregas?, NO! por eso es importante encapsular los atributos de una clase, para que los objetos sólo puedan entregar los valores que sean programados por ti y no por nadie más.

Ahora si, vamos al código, en esta oportunidad voy a utilizar C#, sin embargo en la mayoría de los lenguajes es igual o por lo menos muy parecido. Sigamos con el ejemplo, voy a usar la clase Persona, que tendrá 3 atributos básicos:

namespace Encapsulamiento{

class Persona{

//primero que todo definimos los atributos

private string nombre;

private string apellidos;

private int clave;


}

}


Teniendo la clase lista, ahora lo que debemos hacer es generar los métodos de encapsulamiento, en C# es muy fácil, en el código se encuentra la explicación:


namespace Encapsulamiento

{

class Persona

{

//primero que todo definimos los atributos

private string nombre;

private string apellidos;

private int clave;


//Los métodos de encapsulamiento NO pueden llamarse igual

//a los atributos, por eso la diferencia está en la mayuscula

public string Nombre

{

//GET es el métodos que utilizaras para entregar tu nombre al desconocido

get { return nombre; }

//SET es el método que se utiliza para asignar un valor al atributo

//cuando naciste tu mamá y tu papá utilizarón este bloque para bautizarte

set { nombre = value; }

}


public string Apellidos

{

get { return apellidos; }

set { apellidos = value; }

}


public int Clave

{

get { return clave; }

set { clave = value; }

}

}

}



Básicamente, el encapsulamiento se usa para dar más seguridad en tus aplicaciones, para evitar que la información se filtre y para dar mucho más orden en las clases.

Dejen sus comentarios.

31 comentarios:

  1. un concepto muy claro para entender la POO buena sebastian.....

    ResponderEliminar
  2. Muy buena manera de explicar el termino..bastante clara

    ResponderEliminar
  3. Esta interesante y muy bien ilustrado....
    profe explique los metodos creados en una clase
    para luego llamarlos en la clase principal.
    gracias...

    ResponderEliminar
  4. no pudo haber una analogía mas pertinente señor vanegas, muy bien!

    ResponderEliminar
  5. profe sebastian, un consejo, deberia publicar mas mensajes como este usted entiende para dummies...
    es enserio jeje

    ResponderEliminar
  6. porque el método no recibe ningun tipo de atributo como en Java para asignar los valores..... la palabra reservada VALUE hace todo el trabajo por debajo?

    ResponderEliminar
  7. Exactamente la diferencia entre Java y C#, está en que en JAVA se usan métodos como setCarro y getCarro. Mientras que en C#, se utilizan propiedades y se manejan como si fueran variables es decir para llamar atributo carro por medio de su encapsulamiento, lo llamo Carro = valor o valor = Carro.

    Y listo

    ResponderEliminar
  8. Gracias profe, con este simple ejemplo me despejó una que otra duda, debería seguir poniendo ejemplos como este son muy interesantes y fáciles de comprender

    ResponderEliminar
  9. Gracias Gustavo, con gusto escribiría más artículos, sin embargo no me queda mucho tiempo, por eso tengo algo descuidado el Blog, toda colaboración que ustedes puedan realizar será bien recibida!

    ResponderEliminar
  10. Felicidades profe !!! todo biene entendido
    Por favor mas articulos !! muchos s elo agradeceriamos ...

    ResponderEliminar
  11. Profe puede escribir sobre Herencia y Polimorfismo? por favor ...

    ResponderEliminar
  12. Dos preguntas maestro.

    1)¿Se puede sobre-escribir un metodo M de una clase C sin extender la clase C (sin hacer uso de la herencia)?

    2) ¿Podría Ud. explicar IoC (Inversion of Controls), en alguno de sus posts?

    Desde ya muchas gracias por compartir este fantastico blog.

    Reciva Ud. un cordial saludo.

    ResponderEliminar
  13. Cito "...(sí estás leyendo esto es porque eres programador, los programadores no tienen amigos, eso todo el mundo lo sabe)...". (ajajajaj).
    Muy claro el ejemplo gracias.

    ResponderEliminar
  14. QUE BUEN REPORTE AMIGO

    ResponderEliminar
  15. k buen aporte usted muy bn profe

    ResponderEliminar
  16. Gracias me sirvió de mucha ayuda, se aclararon las dudas que tenia.Que buen profe eres:)

    ResponderEliminar
  17. Mejor explicado, no pudo haber sido.. Excelente. Me llamó mucho la atención eso de "Los programadores no tienen amigos".. ahora ya entiendo porque me aislo y me encierro en mi mundo.. obvio, un saludo!!

    ResponderEliminar
  18. me gusta tu blog igual que tu...........................





    sarcasmo :p

    ResponderEliminar
  19. MUY BIEN EXPLICADO,GRASIAS PODRIA EXPLICAR MAS COSAS
    SE LO AGRADESERIA MUCHO,SALUDOS

    ResponderEliminar
  20. gracias profe Sebastian Vanegas, en su forma de explicar entendí que era el encapsulamiento, en el tiempo que me tomo leer el articulo cosa que no pudo dejar claro el que me dicta la materia de POO Ing. en tres clses y es verdad los programadores no somos muy sociables y eso que yo solo empiezo en este interesante mundo :) (Y)

    ResponderEliminar
  21. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  22. Muy buena explicacion, hasta me hiciste reir. :D

    ResponderEliminar
  23. Felicitación una explicación clara amigo, saludos!!!

    ResponderEliminar
  24. Maravillosa explicación. Espero que seas profesor o algo así, tu manera de dar los ejemplos, con todo y chiste, hacen que sea súper fácil entender.

    ResponderEliminar
  25. Profe, como seria el código para pedir o esos atributos que estan encapsulados?

    ResponderEliminar
  26. Siguiendo su ejemplo, ¿como el objeto desconocido pide el atributo?

    ResponderEliminar
  27. Excelente explicación, me despejo mi duda y me hizo reir mucho

    ResponderEliminar
  28. Gracias por la explicación un tanto doloroso pero gracioso el "nadie te quiere"
    ¿Podríamos relacionar los métodos de encapsulamiento con los constructores?

    ResponderEliminar
  29. muy bueba explicaciom gracias por aclararlo de manera facil

    ResponderEliminar