Está en la página 1de 45
Los puntos siguientes introducen las caracteristicas mas importantes relati- vas a la definicién de clases en Visual Basic .NET, acompafiando las explicacio- nes con algunos ejemplos breves. Para obtener una descripcién completamente detallada de cada modificador o técnica consulte la referencia del lenguaje Vi- sual Basic .NET. Definicién de una clase Ya en los ejemplos previos ha visto, de forma basica, cual es la definicion de una clase sencilla. La palabra clave es Class, tras la cual dispondremos el identificador de la clase. La lista de miembros iria en las lineas siguientes, ha ta finalizar la definicién con End Class. Tanto la clase como sus miembros pueden contar con multiples modificadores, parte de los cuales va a tener oca- sion de conocer de inmediato: Las clases se definen en el interior de un ambito con nombre. A diferencia de éstos, que son meros contenedores, las clases son estructuras de imple- mentacion. Las clases se usan para modelar las aplicaciones como si estuvieran compuestas de objetos mas o menos discretos. Al igual que ocurre con los am- bitos, en el interior de una clase es posible definir otras. De manera implicita, a menos que indiquemos lo contrario, toda clase esta derivada del tipo Object que, como ya sabe, es la base de todos los tipos de datos de Visual Basic .NET. Este cuenta con una serie de miembros que, por tanto, son heredados por todas las clases que podamos definir. Si nuestra clase esta derivada de otra heredara, asimismo, todos los miembros de su clase ba- se y los de las clase base de la base, ascendiendo en la jerarquia hasta llegar a Object. Vigibilidad de una clase y sus miembros Las clases, como acaba de decirse, pueden estar incluidas en un ambito con nombre o en otras clases. Su visibilidad, fuera de ese Ambito, dependera de los modificadores que dispongamos delante de la palabra Class en el momento de la definicién. Estos modificadores pueden tambien aplicarse a los miembros de la clase: métodos, propiedades, variables, etc. Las posibilidades son las si- guientes: © Public — La clase, o el miembro, es visible en todos los ambitos, no sdlo en el que se ha definido. Las clases publicas, por ejemplo, pueden utili- zarse desde ambitos con nombre externos al propio. Los miembros publi- cos de una clase son accesibles, al crear un objeto, desde fuera de la propia clase. * Protected — Este modificador solo es aplicable a los miembros de una clase, no a la clase en si. La visibilidad esta reducida a la propia clase y las que pudieran derivarse de ella. Es decir, un miembro protegido no es accesible externamente. * Private — Es el ambito mas reducido. Una clase privada sdlo puede uti- lizarse en el interior del ambito en que se encuentra incluida, ya sea un que tienen este modificador, igual- namespace u otra clase. Los miembros mente, solo pueden ser usados desde el interior de la clase donde se han definido, nunca desde fuera, ni siquiera en clases derivadas. * Priend ~ Es similar a Public. Si bien la clase o el miembro es visible desde fuera de su ambito inmediato, esta regla s6lo se aplica dentro del ensamblado al que pertenece. Una clase Public puede utilizarse desde otros ensamblados, mientras que una Friend no. * Protected Friend ~ Como puede suponer, es una combinacion de Protected y Friend. El resultado es que los identificadores pueden utilizarse en el ensamblado en que se han definido, asi como en clases de- tivadas a pesar de que se encuentren en otros ensamblados. La visibilidad de las clases y sus miembros es algo que debe deducirse di- rectamente de! disefio Iégico de la propia aplicacién. Normalmente ésta cons- tard de una serie de clases publicas a partir de las cuales se crearan los objetos fundamentales, exponiendo métodos y propiedades que permitan a las aplica- ciones configurar su funcionamiento. Internamente, estas clases pueden utili- zar otras no visibles desde el exterior, asi como miembros privados y protegidos. Clases derivadas y herencia Uno de los mecanismos mas interesantes de los lenguajes orientados a obje- tos, categoria en la que cae Visual Basic .NET, es el de herencia. Gracias a él, es posible definir una nueva clase partiendo de otra existente, de tal forma que la derivada hereda de la base todos sus miembros, lo cual implica contar, ya de partida, con la misma funcionalidad. La clase derivada puede acceder a todos los miembros de la base exceptuando aquellos que son privados. Mediante el mecanismo de herencia se contribuye a la reutilizacion del co- digo, algo habitual en todos los lenguajes orientados a objetos. La novedad, en Visual Basic .NET, es que dicho codigo no tiene por qué estar escrito en el mis- mo lenguaje. Desde Visual Basic .NET podemos derivar una nueva clase toman- do como base otra escrita en C#, J#, C++ o COBOL, por poner algunos ejemplos. Tenemos, de esta forma, lo mejor del modelo de componentes COM, que era la independencia de lenguaje, y lo mejor de los lenguajes orientados a objetos, la herencia de implementacion inexistente en COM. Como se dijo anteriormente, todas las clases derivan por defecto de Object. Si deseamos otra base distinta tendremos que indicarla mediante la palabra clave Inherits, como puede verse en el ejemplo mostrado a continuacién. Public Class ClaseBase Public Function Saludo() As String Return "Hola mundo" End Function End Class Public Class ClaseDerivada Inherits ClaseBase Public Function Cuedrado(Byval N As Integer} As Integer Return N * W End Function End Class La clase ClaseDerivada hereda los métodos de CLaseBase y también los de Object, que es la ascendiente de ClaseBase. Disponiendo el codigo ante- rior en un modulo de un proyecto de consola, podriamos ahadir el fragmento siguiente para crear un objeto de la clase ClaseDerivada ¢ invocar a los mé- todos Cuadrado() y Saludo() Public Class Aplicacion Public Shared Sub Main() Dim MiClase As ClaseDerivada = New ClaseDerivada(} Console.WriteLine("{0}, {1}", _ MiClase.Saludo(), MiClase.Cuadrado(5)) End Sub End Class En caso de que haya escrito una clase de la cual no le interese que se deriven otras, por considerarla una clase de uso final, no tiene mas que anteponer la palabra NotInheritable delante de Class. Pruebe a ponerla en Ia clase ClaseBase, vera como no puede compilar el programa obteniendo un mensa- je de crror (véase figura 7.6). Esa clase, por lo tanto, s6lo podria utilizarse para crear objetos, pero nunca para derivar otras partiendo de ella. También podemos encontrarnos justamente en el caso contrario: haber defi nido una clase cuyo objetivo es servir de base para otras. La clase puede no te- ner funcionalidad propia, sirviendo simplemente como raiz comuin de clases que compartirian algunos miembros, Suponga que va a definir una serie de clases que representaran entidades graficas y, para facilitar el trabajo, quicre que todas esas clases compartan una serie de miembros comunes. Definir una raiz comun tendra diversas ventajas. Esta clase base podria ser la siguiente: Public MustInherit Class Entidad Protected X, Y AS Integer Protected Color As Integer Public Sub Dibuja() End Sub End Class

También podría gustarte