Encapsulamiento en Objetos

publicado en: BlitzMax, Programación | 0

El encapsulamiento consiste en que tanto las propiedades como los métodos sean de uso exclusivo de el objeto en si mismo. Esto implica que no se pueda usar o modificar esos métodos y variables miembros desde afuera del objeto mismo.

Continuando pensando en un objeto Globo que en su clase o tipo de fine propiedades o métodos, por defecto son publicas. Esto permite modificar su dato desde afuera del objeto como tal.

Type CGlobo
     Field color:string
     Field material:String
     Field aire:Byte

     Method New(  color:String = "Blanco", material:String = "Negro")

           Self.color = color
           self.material = material 
     End Method 
End Type

Local miGlobo:CGlobo = New CGlobo("Azul", "Papel")

miGlobo.color = "Rosado"

El anterior código, muestra como se crea un objeto y se pasa sus características al momento de crearlo en el constructor. Un globo azul y de material de papel. Sin embargo afuera de la clase, se puede modificar su color y su material accediendo directamente a esas propiedades.

Entonces para hacer privadas esas variables miembros que nos interese o métodos usamos la palabra reservada “Private” y tiene dos variantes de uso.

Type CGlobo
     Private
     Field color:string
     Field material:String
     Field aire:Byte
     Public
     Method New(  color:String = "Blanco", material:String = "Negro")

           Self.color = color
           Self.material = material
     End Method

End Type

Local miGlobo:CGlobo = New CGlobo("Azul", "Papel")

miGlobo.color = "Rosado"

Se puede observar en el anterior código que las tres propiedades serían privadas, y que el método o constructor es publico. Es importante que para que esto funcione como se espera, la clase se debe declarar un en un fichero aparte y anexarla al principal mediante el comando “Import” donde se crea el objeto Globo.

Fichero exclusivo para definir una clase en concreto.
Fichero Principal Main – Encapsulamiento.

Ya cuando intentamos compilar el programa nos encontramos con un error de ejecución que nos informa que esa propiedad no se puede modificar. Esto debido a que dentro de el tipo se declaro como privada.

Encapsulamiento en Programación

La otra variante para declarar propiedades o métodos privados o públicos es hacerlo directamente cuando definimos la variable o el método. Para mí esto es lo mejor, pues facilita la lectura y el mantenimiento del código en el tiempo.

Type CGlobo
     
     Private Field color:string
     Private material:String
     Private aire:Byte
     
     Public Method New(  color:String = "Blanco", material:String = "Negro")

           Self.color = color
           Self.material = material
     End Method

End Type

Cambiando el valor de propiedades privadas

La única forma de cambiar esos datos definidos como privados, es desde adentro de la misma clase o tipo cuando el objeto ya esta creado. Para hacer esto podemos crear un método publico que modifique ese valor con algún parámetro.

Type CGlobo
     
     Private Field color:string
     Private material:String
     Private aire:Byte
     
     Public Method New(  color:String = "Blanco", material:String = "Negro")

           Self.color = color
           Self.material = material
     End Method

     Public Method SetColor( color:String )
           self.color = color
     End Method

End Type

Ahora en el fichero principal creamos el objeto como tal.

Import "CGlobo.bmx"
Local miGlobo:CGlobo = New CGlobo

miGlobo.SetColor("Amarillo")

Por defecto se crea un objeto Blanco de material de goma, pues no se pasan parámetros en el constructor. Ya posteriormente se pinta el color de amarillo.

Ahora bien, igualmente se puede recuperar el dato de una variable miembro privada, solo es crear un método que se puede llamar por ejemplo “GetColor que retorne un tipo de dato cadena de texto.

Type CGlobo
     
     Private Field color:string
     Private material:String
     Private aire:Byte
     
     Public Method New(  color:String = "Blanco", material:String = "Negro")

           Self.color = color
           Self.material = material
     End Method

     Public Method SetColor( color:String )
           self.color = color
     End Method

     Public Method GetColor:String()
           Return Self.color 
     End Method

End Type

Y ya en el fichero principal fuera de cambiar el valor o asignar uno nuevo podemos leer el contenido de la propiedad color del objeto.

Import "CGlobo.bmx"
Local miGlobo:CGlobo = New CGlobo

miGlobo.SetColor("Amarillo")

Print( miGlobo.GetColor() )

Ya para finalizar, en BlitzMax el asunto de la encapsulación es limitado, pero si decide dar el paso a lenguajes como c# o c++, verá que esos lenguajes extienden aún mas el tema de encapsulación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *