Clases: como planos para objetos
Actualización: noviembre 2007
Las clases son representaciones simbólicas de objetos; describen las propiedades, campos, métodos y eventos que forman objetos de la misma forma que los planos describen los elementos que componen un edificio. Así como un plano puede utilizarse para crear varios edificios, una única clase puede utilizarse para crear tantos objetos como sea necesario. Del mismo modo que un plano define qué partes de un edificio son accesibles a las personas que lo utilizan, las clases también pueden controlar el acceso de los usuarios a los elementos de objetos a través de la encapsulación.
Clases y objetos
Los términos clase y objeto se utilizan a veces indistintamente, pero en realidad, las clases describen la estructura de los objetos, mientras que los objetos son instancias de clases que se pueden utilizar. Cada instancia es una copia exacta pero diferente de su clase. Puesto que un objeto es una instancia de una clase, la acción de crear un objeto se denomina creación de instancias.
Con la analogía de plano, una clase es un plano y un objeto es un edificio construido a partir de ese plano. Normalmente, al cambiar los datos en un objeto, no se cambian los datos en ningún otro objeto. (La excepción la constituyen los miembros compartidos, miembros de clase declarados con el modificador Shared, que existen de forma independiente de las instancias específicas de una clase).
Encapsulación
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. En el ejemplo siguiente, la clase BankAccount encapsula los métodos, campos y propiedades que describen una cuenta bancaria.
Sin la encapsulación, debería declarar diferentes procedimientos y variables para almacenar y administrar la información de la cuenta bancaria, y sería difícil trabajar con más de una cuenta bancaria a la vez. La encapsulación permite utilizar datos y procedimientos de la clase BankAccount como una unidad. Puede trabajar con varias cuentas bancarias al mismo tiempo sin confusión, puesto que cada cuenta se representa mediante una instancia única de la clase.
La encapsulación también permite controlar la forma de utilizar los datos y los procedimientos. Se pueden utilizar modificadores de acceso, como Private o Protected, para evitar que unos procedimientos externos ejecuten métodos de clase o lean y modifiquen datos en propiedades y campos. Debe declarar detalles internos de una clase como Private para evitar que se utilicen fuera de su clase; esta técnica se llama ocultación de datos y es el modo de proteger información del cliente, como un saldo de cuenta por ejemplo.
Una regla básica de la encapsulación es que los datos de clase sólo se deben modificar o recuperar mediante métodos o procedimientos Property. Al ocultar los detalles de implementación de las clases se evita que sean utilizados de forma no deseada y hace posible la modificación posterior de tales elementos sin problemas de compatibilidad. Por ejemplo, en las versiones posteriores de la clase BankAccount se podría cambiar el tipo de datos del campo AccountBalance sin peligro de interrumpir otras aplicaciones que se basan en que ese campo tenga un tipo de datos específico.
Herencia
Al igual que para las estructuras de Visual Basic, puede utilizar las clases para definir tipos de datos que encapsulan un grupo de elementos relacionados. No obstante, a diferencia de las estructuras, las clases de Visual Basic pueden heredar y extender las características de otras clases. Las clases que sirven de base para nuevas clases se denominan clases base. Las clases que se derivan de clases base se denominan clases derivadas. Las clases derivadas heredan todos los campos, propiedades, métodos y eventos de la clase base. Esto significa que puede desarrollar y depurar una clase una vez y reutilizarla después como base de otras clases.
En el siguiente ejemplo se define una clase base que representa una cuenta bancaria genérica y una clase específica que hereda las propiedades de la clase base pero que se personaliza para describir una cuenta corriente.
Class BankAccount
Private AccountNumber As String
Private AccountBalance As Decimal
Private HoldOnAccount As Boolean = False
Public Sub PostInterest()
' Add code to calculate the interest for this account.
End Sub
ReadOnly Property Balance() As Decimal
Get
' Return the available balance.
Return AccountBalance
End Get
End Property
End Class
Class CheckingAccount
Inherits BankAccount
Sub ProcessCheck()
' Add code to process a check drawn on this account.
End Sub
End Class
Para obtener más información sobre herencias, consulte Fundamentos de la herencia.
Miembros compartidos
De forma predeterminada, los datos de clase se especifican para cada instancia de la clase, pero en ocasiones puede ser deseable compartir un solo elemento de datos entre todos los objetos creados a partir de una clase. En casos como éste, utilice el modificador Shared para hacer que una variable comparta el mismo valor en todas las instancias de una clase (los miembros Shared a veces se llaman "miembros estáticos" en otros lenguajes de programación). Los métodos compartidos pueden llamarse directamente mediante un nombre de clase sin necesidad de crear previamente una instancia de la clase.
Para obtener más información acerca de miembros compartidos, consulte Miembros compartidos en Visual Basic.
Sombrear
Las clases derivadas pueden utilizar la palabra clave Shadows para declarar un miembro con el mismo nombre que un miembro heredado. El tipo de datos de los miembros sombreados no es necesario que sea el mismo que el del miembro que se sombrea. Por ejemplo, una propiedad puede sombrear una variable de tipo Integer.
Para obtener más información acerca de miembros compartidos, consulte Sombrear en Visual Basic.
Vea también
Conceptos
Miembros compartidos en Visual Basic