Python R2


Encapsulamiento en python

Posted in Python por Arturo Elias Antón en 27 agosto 2008
Tags: , , , ,

La idea de encapsulamiento segun Grady Booch es

“La abstracción y el encapsulamiento son conceptos complementarios: la abstracción se centra en el comportamiento observable de un objeto, mientras el encapsulamiento se centra en la implementación que da lugar a este comportamiento. El encapsulamiento se consigue a menudo mediante la ocultación de información, que es el proceso de ocultar todos secretos de un objeto que no contribuyen a sus caracteristicas esenciales; típicamente, la estructura de un objeto esta oculta, así como la implementación de sus metodos.”[Análisis y diseño orientado a objetos con aplicaciones *]

En otras palabras es impedir el acceso al los métodos o variables del objeto, para que solo se puedan usar dentro de la instancia del objeto. Esto en los lenguajes como Java o C# lo logran con unos modificadores de acceso (anteponen a la definición del método o propiedad public, private, protected, etc.).
Los modificadores de acceso permiten al diseñador de clases delimitar la frontera entre lo que es accesible para los usuarios de la clase, lo que es estrictamente privado y ‘no importa’ a nadie más que al diseñador de la clase e incluso lo que podría llegar a importar a otros diseñadores de clases que quisieran alterar, completar o especializar el comportamiento de la clase.
Python no cuenta con estos modificadores de acceso para lograr el encapsulamiento. Por que el acceso a una variable o método viene dado por su nombre. Para que un método sea privado en Python lo que hay que hacer es anteponerle dos guiones bajos “__” antes del nombre y no dejar que termine con dos guiones bajos “__”. Lo mismo para las variable.

Un ejemplo se vera en encapsulacion.py

#!/usr/bin/env python
# Nombre de Fichero : encapsulacion.py

class Persona(object) :
    "Calse Persona"
    def __init__(self, pNombre,pEdad,pSueldo) :
        self.setNombre(pNombre)
        self.setEdad(pEdad)
        self.__setSueldo(pSueldo);

    def setEdad(self, pEdad) :
        self.__edad = pEdad

    def getEdad(self) :
        return self.__edad

    def setNombre(self, pNombre) :
        self.__nombre = pNombre

    def getNombre(self) :
        return self.__nombre

    def __setSueldo(self,pSueldo):
        self.__sueldo = pSueldo
    def getSueldo(self):
        return self.__sueldo

    nombre = property(getNombre, setNombre)
    edad = property(getEdad, setEdad)

class Gerente(Persona) :
    def __init__(self, pNombre,pEdad):
        Persona.__init__(self, pNombre,pEdad,5000)

class Secretaria(Persona) :
    def __init__(self, pNombre,pEdad) :
        Persona.__init__(self, pNombre,pEdad,500)

if __name__ == '__main__':
    g = Gerente("Mariano", 56)
    s  = Secretaria("Rocio", 33)

    print "El Gerente es", g.nombre , " gana ", g.getSueldo()
    print "La Secretaria es ", s.getNombre(), " gana ",s.getSueldo()

Veran que la clase Persona hereda de object esto es asi por que tiene que usar propiedades.
También varan que el objeto “g” imprime su nombre por medio de su propiedad.

*ISBN 968 444 3528 Editorial Pearson

Anuncios

2 comentarios to 'Encapsulamiento en python'

Subscribe to comments with RSS o TrackBack to 'Encapsulamiento en python'.

  1. yyeshua said,

    Jejeje, interesante artículo. Ya lo había leído, y como dije en mi artículo, no es realmente un atributo privado porque siempre es accesible mediante una sintaxis diferente: objeto.__atributoPrivado (creo que es así, no estoy seguro, no recuerdo :P). Pero de lo que estoy seguro es que si es accesible.

    Aunque claro, como dijimos es cuestión es gustos 😛
    Esto no hace malo a python, pero no me gusta el modificador de acceso, jejeje, si tuviese el public, private y protected creo que sería más sencillo y más entendible por parte de los nuevos programadores que comienzan sus carreras con python.

    Saludos 😀

  2. fenrir said,

    mmmmm interesante


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: