1. ENCAPSULACIÓN
Según Visual Studio.NET:
"La encapsulación es la capacidad de contener y controlar el acceso a un
grupo de elementos asociados. Las clases proporcionan una de las formas
más comunes de encapsular elementos."
Cuando usamos las clases, éstas tienen una serie de características (los datos
que manipula) así como una serie de comportamientos (las acciones a
realizar con esos datos). La encapsulación es esa capacidad de la clase de
ocultarnos sus interioridades para que sólo veamos lo que tenemos que ver,
sin tener que preocuparnos de cómo está codificada para que haga lo que
hace... simplemente nos debe importar que lo hace.
Resumiendo: Establece la separación entre la interfaz del objeto y su
implementación.
2. ENCAPSULAMIENTO EN VB.NET
En todos los lenguajes el encapsulamiento se consigue con
los operadores de ámbito, private, protected,... pero
visualmente va más allá. Supongamos que queremos que el
valor de una cierta propiedad pueda ser leído externamente
pero no modificado, o bien que cada vez que se modifique
pueda controlar el nuevo valor para saber si es válido. Para
solucionar esto VB.NET nos proporciona la definición de las
propiedades tal y cómo nosotros las necesitamos.
3. DEFINICIÓN DE UNA PROPIEDAD
La definición se efectúa con la palabra Property, tras la cual dispondremos el nombre de la propiedad, la
palabra As y el tipo. Opcionalmente, delante de Property es posible usar los modificadores de ámbito.
El final de la definición vendrá marcada por End Property. En el cuerpo de la propiedad introduciremos dos
apartados, llamados Get y Set, que serán ejecutados cuando se recupere el valor de la propiedad y se asigne,
respectiva- mente. Se asume que el apartado Get devolverá un valor del tipo indicado en la cabecera de la
propiedad, mientras que Set tomará dicho parámetro. Lo habitual es que el valor se almacene internamente en
alguna variable y se devuelva cuando sea necesario, aunque en realidad nada nos impide implementar una
funcionalidad distinta.
Sintaxis:
Ambito Property Nombre_Propiedad () As Tipo
Get
....
End Get
Set
....
End Set
End Property
4. A continuación puede ver la definición completa de la hipotética propiedad Nombre ( ) .En este
fragmento de código se asume que _Nombre es una variable privada declarada al principio de la clase y
usada para almacenar el valor de la propiedad.
Public Property Nombre() As String 'property para identificar la propiedad
Get 'Es lo que se ejecuta cuando recuperamos el valor de la propiedad
Return _Nombre
End Get
Set(ByVal Value As String) 'es cuando asignamos un valor
_Nombre = Value
End SetEnd Property
Aunque en este ejemplo nos limitamos a almacenar el valor o devolverlo, en la práctica podríamos
efectuar comprobaciones o elaborar el valor a devolver a partir de otros datos. El acceso a la propiedad,
creando un objeto de esta clase, sería idéntico al acceso a cualquier miembro de datos.
5. PROPIEDADES DE SÓLO LECTURA Y SÓLO ESCRITURA
Mientras no se indique lo contrario de manera explícita, toda propiedad debe contar con los
apartados Get y Set, de tal manera que el usuario de los objetos pueda tanto leer el valor como
modificarlo. En ocasiones, sin embargo, puede interesarnos que una determinada propiedad sólo
pueda ser leída, a modo informativo, pero no modificada. Aunque es menos habitual también
puede darse el caso contrario, tener una propiedad que sólo pueda modificarse pero nunca
leerse.
Para indicar que una propiedad será sólo de lectura hay que disponer el
modificador ReadOnly delante de la palabra Property. En el cuerpo de la propiedad existirá tan
sólo el apartado Get, facilitando la recuperación del valor. De manera análoga, existe el
modificador WriteOnly para aquellas propiedades que sólo sean de escritura. En el código
siguiente puede ver una clase con dos propiedades, siendo una de ellas de sólo lectura.