Вы находитесь на странице: 1из 43

Visual .

NET
Microsoft Visual Studio 2005 Unidades Didctica 21

UNIDAD 21. PROGRAMACION ORIENTADA A OBJETOS

1. Introduccin

Para entender lo que es Visual Basic .NET es necesario entender lo que es el


concepto de .NET (Net Framework).

Se trata de un entorno de desarrollo multilenguaje diseado por Microsoft para


simplificar la construccin, distribucin y ejecucin de aplicaciones para Internet.

Precisamente Visual Basic es uno de los lenguajes de programacin de alto nivel


que pertenecen al paquete .NET (otros lenguajes son C#, C/C++. Etc).

Con Visual Basic .NET se pueden escribir tanto programas convencionales como
para Internet. Las aplicaciones podrn mostrar una interfaz grfica al usuario, o
bien una interfaz de texto (denominada de consola).

Los componentes clave de la plataforma .NET son: CLR (Common Languaje


Runtime) y la biblioteca de clases.
El lenguaje CLR pretende reunir las ventajas de los lenguajes que pertenecen a .Net
en uno solo.
Esta herramienta de desarrollo compila el cdigo fuente de cualquiera de los
lenguajes soportados por .NET en un cdigo intermedio (MSIL).
Para ejecutarse se necesita un segundo paso, un compilador JIT (just in time) que
es el que genera el cdigo mquina real que se ejecuta en la mquina cliente.
La compilacin JIT la realiza el CLR a medida que el programa invoca mtodos. El
cdigo ejecutable obtenido se almacena en la memoria cach del ordenador, siendo
recompilado de nuevo slo en el caso de producirse algn cambio en el cdigo
fuente.

Programa Cdigo
escrito en .NET Escrito en Compilador Cdigo
Compilador
(cdigo fuente) JIT mquina
MSIL

MSIL, es un lenguaje mquina que no es especfico de ningn procesador, sino de


la mquina virtual de .NET.
Luego las ventajas de Visual Basic Net respecto a otros lenguajes de programacin
es que es independiente de la plataforma (lo mismo con todos los lenguajes
incluidos en .NET), es decir, que el cdigo producido por el compilador Visual Basic
puede transportarse a cualquier plataforma (Intel, Motorota..) que tenga instalada
una mquina virtual .NET y ejecutarse. Pensando en Internet es muy importante ya
que esta red conecta ordenadores muy distintos.

2. Realizacin de un programa en Visual Basic .NET

Los pasos a seguir por un usuario de Visual Basic .NET son:

Editar el programa
Compilarlo
Ejecutarlo
Depurarlo

2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Para poder escribir programas se necesita un entorno de desarrollo Visual Basic


.NET. Microsoft, propietario de Visual Basic, proporciona uno de forma gratuito,
.NET Framework SDK, que se puede obtener en la direccin:

www.microsoft.com/downloads

Solo falta un editor de cdigo fuente. Es suficiente con un editor de texto sin
formato; por ejemplo el bloc de notas de windows.

Vamos a ver un ejemplo sencillo, donde muestra en pantalla el mensaje Buenos


das.

Usando el bloc de notas escribimos el siguiente cdigo y guardamos con el nombre


primerprog.vb

Imports System
Public Module test
Public Sub Main()
Console.writeline("Buenos dias")
End Sub
End Module

Algunos detalles del cdigo:

Imports System

Esta lnea permite tener directamente accesibles los elementos del Namespace
System. Sin ella, se tendran que utilizar los nombres completos para todos los
elementos contenidos dentro del Namespace. En nuestro caso, deberamos utilizar:

System.Console.writeline(Buenos das)

Public Module test .. End Module

En Visual Basic, toda parte de cdigo debe estar contenida dentro de un mdulo o
clase.

Public Sub Main().. End Sub

Todas las instrucciones que no sean declaraciones deben colocarse dentro de un


procedimiento o una funcin. La mayor parte del cdigo se coloca por lo tanto entre
las instrucciones Sub y End Sub o Function y End Function. En todos estos
procedimientos y funciones se define uno como punto de partida, de forma que al
ejecutarse ese procedimiento se ejecuta la aplicacin. Este procedimiento debe ser
pblico y denominarse Main.

Console.writeline(Buenos das)

La clase console definida dentro del Namespace System proporciona un conjunto


de mtodos, que permiten mostrar informacin en la consola o leer informacin de
ella. El procedimiento writeline permite mostrar una cadena de caracteres en la
consola.

Hay que destacar que Visual Basic no hace distincin entre minsculas y
maysculas dentro de las instrucciones.

2VBNET 2
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Compilacin

El framework .NET incluye un compilador en lnea de comando para Visual Basic.


Para compilar el cdigo fuente del programa anterior debemos abrir una ventana
de comandos para poder lanzar el compilador.

Inicio/Programas/Microsoft .NET framework SDK v2.0 /Smbolo del sistema del SDK

Una vez la ventana abierta, conviene colocarse en el directorio en el que se


encuentra el archivo fuente.
La compilacin se lanza con el comando vbc primerprog.vb

Tras un instante, el compilador nos devuelve a la pantalla principal. Veremos que


nos ha creado un ejecutable .exe

Una vez creado el ejecutable ejecutamos el programa y vemos por pantalla el


mensaje Buenos das.

2VBNET 3
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Para aplicaciones mas complicadas suele ser til especificar ciertas opciones para el
funcionamiento del compilador. El conjunto de las opciones disponibles se puede
obtener lanzando el comando vbc / ?.

Sin embargo, todo este trabajo de edicin, compilacin, ejecucin y depuracin, se


har mucho ms fcil si se utiliza un entorno de desarrollo con interfaz grfica de
usuario que integre todas las herramientas anteriores, en lugar de utilizar la
interfaz de lnea de ordenes del SDK.

El entorno de desarrollo integrado que ms destaca es Microsoft Visual Studio .NET,


para aplicaciones empresariales ya que incorpora utilidades que facilitan mucho los
desarrollos ms complejos.
El entorno Visual Basic 2005 Express (gratuito), permite escribir aplicaciones de
consola y aplicaciones con interfaz grfica.

Nosotros utilizaremos Microsoft Visual Studio 2005 .NET.


Antes de empezar con la programacin orientada a objetos vamos a ver qu una
pequea introduccin.
El contenedor de alto nivel es la solucin en la que se puede colocar ms de un
proyecto. Estos proyectos, a su vez, contendrn todos los elementos para que el
compilador sea capaz de generar un archivo ejecutable.

Al crear un nuevo proyecto se abrir la siguiente ventana donde podremos indicar:

- el lenguaje utilizado para el desarrollo del proyecto,


- el tipo de proyecto a crear
- el nombre del proyecto
- la carpeta donde se almacenarn los archivos del proyecto.

Nota: si no aparece al comienzo donde guardar el proyecto se lo indicaremos


luego a travs de la opcin archivo/guardar todo

Despus de aceptar, en el explorador de soluciones se presenta la nueva


solucin con la que se puede trabajar.

2VBNET 4
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Una solucin contiene por lo menos los siguientes archivos:

- Un archivo con extensin .sln es el archivo de configuracin de la solucin, y


contiene entres otras cosas la lista de todos los proyectos que componen la
solucin.
- Un archivo con extensin .suo que registra las opciones asociadas a la
solucin.
- Un archivo para el proyecto, .vbproj. Este archivo contiene todas las
informaciones de configuracin del proyecto, junto con la lista de archivos
que constituyen el proyecto, lista de referencias usadas.
- Numerosos archivos con extensin .vb que contendrn el cdigo fuente de
todas las clases, pginas y mdulos que constituyen el proyecto.
- Un archivo .resx asociado a cada pgina de su aplicacin. Su formato es
XML.
- Otros archivos en funcin de los elementos utilizados en el proyecto (bases
de datos, archivos html)

Dentro de las plantillas disponibles en Visual Studio tenemos:

Aplicacin Windows

Esta plantilla de proyecto es la ms utilizada. Permite el desarrollo de aplicaciones


Windows estndar.
La plantilla aade al proyecto los siguientes elementos:

- Un archivo AssemblyInfo.vb utilizado para la descripcin de la aplicacin,


con los datos relativos a la versin.
- Un formulario de base con su archivo fuente form1.vb.

Las siguientes referencias se aaden automticamente y se importan:

-System
-System.Data
-System.Drawing
-System.Windows.Forms
-System.Xml

Biblioteca de clases

Esta plantilla se puede utilizar para crear clases y componentes que podrn
compartirse con otros proyectos.
La plantilla aade al proyecto los siguientes elementos:

- Un archivo AssemblyInfo.vb utilizado para la descripcin de la aplicacin,


con los datos relativos a la versin.
- Una clase de base con su archivo fuente class1.vb.

Las siguientes referencias se aaden automticamente y se importan:

-System
-System.Data
-System.Xml

Biblioteca de controles Windows

2VBNET 5
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Permite crear una biblioteca de clases utilizable en otros proyectos. Esta biblioteca
es ms especfica, ya que se dedica a crear controles utilizables en una aplicacin
Windows.
La plantilla aade al proyecto los siguientes elementos:

- Un archivo AssemblyInfo.vb utilizado para la descripcin de la aplicacin,


con los datos relativos a la versin.
- Una clase UserControl1 que hereda de la clase
System.Windows.Forms.UserControl y que proporciona las funcionalidades
de base para un control Windows, con su archivo UserControl1.vb.

Las siguientes referencias se aaden automticamente y se importan:

-System
-System.Data
-System.Drawing
-System.Windows.Forms
-System.Xml

Aplicacin de consola

Este tipo de aplicacin debe ser ejecutada a partir de la lnea de comandos de una
ventana de comandos. No tiene interfaz grfica, y las entradas y salidas se realizan
a partir de la lnea de comando y hacia la consola.
La plantilla aade al proyecto los siguientes elementos:

- Un archivo AssemblyInfo.vb utilizado para la descripcin de la aplicacin,


con los datos relativos a la versin.
- Una clase de base con su archivo fuente class1.vb.

Las siguientes referencias se aaden automticamente y se importan:

-System
-System.Data
-System.Xml

Servicios Windows

Est plantilla est pensada para la creacin de aplicaciones que se ejecutan como
tareas del sistema.

Proyecto Vaco

Esta plantilla se debe utilizar cuando se quiere crear un tipo personalizado de


proyecto. Se crea solo el archivo del proyecto. No se aaden automticamente
elementos y no se crean ni se importan referencias.

Vamos a crear unos ejemplos sencillos de programacin utilizando el entorno de


desarrollo Visual Studio 2005.

Ejemplo 1: Saludar al mundo


Dentro del entorno seleccionaremos archivo/nuevo proyecto dentro del
lenguaje Visual Basic Aplicacin de Consola, le llamamos holamundo.vb y
automticamente se crear

2VBNET 6
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Dentro del Sub Main() .. End Sub introducimos el cdigo.


Se puede indicar de diferentes formas:

Module HolaMundo
'
' Punto de entrada al programa.
'
Sub Main()
System.Console.WriteLine("Hola mundo!!!")
System.Console.Readline()
End Sub

End Module

Esto es posible si la clase


console de system esta
importada.

Al ejecutar visualizaremos lo siguiente:

2VBNET 7
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Ejemplo 2: Operaciones aritmticas. Aritmetica.vb

En este caso calculamos la suma, resta, producto, y la divisin de dos datos cuyo
valor son 20 y 10.

Volvemos a utilizar el mtodo WriteLine para mostrar el resultado por pantalla ,


su formato en este caso es:

dentro de esa cadena podemos usar unos indicadores o marcadores en los que se
mostrarn los parmetros indicados en esos dos mtodos de la clase Console.

{0} + {1} = {2} indicadores o marcadores que sern sustituidos por el


contenido de las variables que se indiquen a continuacin dato1, dato2, dato3.

Los indicadores siempre comienzan por cero.

Tambin se puede mejorar el formato de la informacin indicndolo de la siguiente


forma en los marcadores:

{N [, M ][: Formato ]}

N ser el nmero del parmetro, empezando por cero.


M ser el ancho usado para mostrar el parmetro, el cual se rellenar
con espacios. Si M es negativo, se justificar a la izquierda, y si es
positivo, se justificar a la derecha.
Formato ser una cadena que indicar un formato extra a usar con ese
parmetro.

Veamos algunos ejemplos para aclarar todo esto:

Console.WriteLine("---------- ----------")
Console.WriteLine("{0,10} {1,-10} {2}", 10, 15, 23)
Console.WriteLine("---------- ----------")
Console.WriteLine("{0,10:#,###.00} {1,10}", 10.476, 15.355)

El resultado de este ejemplo sera este:

2VBNET 8
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Estas especificaciones de formato son aplicable a nmeros, pero tambin lo es a


cadenas de caracteres y fechas. Veamos algunos ejemplos ms:

Console.WriteLine("Hoy es: {0:G}", DateTime.Now)


Console.WriteLine("Hoy es: {0:dd/MM/yy}", DateTime.Now)
Console.WriteLine("Hoy es: {0:ddd, dd/MMM/yyyy}", DateTime.Now)

El resultado de estas lneas ser el siguiente (al menos usando la configuracin


regional que tengo en mi equipo, y de las funciones no te preocupes ya las veremos
mas adelante...):

Dim s As String = "Esta es una cadena larga de ms de 20 caracteres"


Dim s1 As String = "Cadena ms corta"

Console.WriteLine("--------------------")
Console.WriteLine("{0,20}", s)
Console.WriteLine("{0,20}", s1)
Console.WriteLine("--------------------")

La salida de este cdigo es la siguiente:

Ejemplo 3: Procedimientos

2VBNET 9
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Module Aritmtica
'
' Procedimiento sumar:
' parmetros x e y de tipo double
' devuelve x + y
'
Function sumar(ByVal x As Double, ByVal y As Double) As Double
Dim resultado As Double = 0
sumar = x + y
'resultado = x + y
'Return resultado
End Function

Sub Main()
Dim a As Double, b As Double, r As Double = 0
Console.WriteLine("Introduzca un numero: ")
a = Console.ReadLine()
Console.WriteLine("Introduzca un numero: ")
b = Console.ReadLine()
r = sumar(a, b)
System.Console.WriteLine("Suma = " & r)

End Sub

End Module

Este mtodo Readline() se usa para recoger la informacin que el usuario


introduce a travs del teclado. Cuando invocamos al mtodo Console.ReadLine() el
sistema queda en espera hasta que el usuario pulsa la tecla Intro.

Si se asigna la llamada a Console.ReadLine() a una variable se consigue capturar el


dato introducido por el usuario, para despus poder operar con l.

3. Programacin orientada a objetos

2VBNET 10
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

En un lenguaje clsico, el funcionamiento de una aplicacin est organizado por una


sucesin de llamadas a los diferentes procedimientos y funciones disponibles en el
cdigo.
La programacin orientada a objetos (POO) es un modelo de programacin que
utiliza objetos que dialogan entre s (mensajes) para realizar las distintas
tareas programadas. La idea central es simple: organizar los programas a
imagen y semejanza de la organizacin de los objetos en el mundo real.

En un lenguaje orientado a objetos, se intenta agrupar al mximo los datos y el


cdigo para manipularlos. Las clases son la representacin simblica de los
objetos. Describen los campos, las propiedades, los mtodos y los eventos(tal y
como el plano de un arquitecto describe las diferentes partes de un edificio).

Siguiendo con la analoga entre una clase y un plano de un edificio. Sabemos que
es posible construir diferentes edificios a partir del mismo plano. De la misma
manera, se pueden construir muchos objetos a partir de la misma clase.

3.1 Objetos.Clases

La clase no es otra cosa que el conjunto de especificaciones o normas que definen


cmo va a ser creado un objeto de un tipo determinado; por un lado definimos los
datos que dicha clase puede manipular o contener y por otro la forma de acceder a
esos datos.

Objeto es una agrupacin de cdigo, compuesta de propiedades y mtodos, que


pueden ser manipulados como una entidad independiente.

Digamos que la clase es la "plantilla" a partir de la cual podemos crear un objeto en


la memoria.

Los trminos clase y objeto por lo tanto son diferentes. Una clase representa la
estructura de un elemento, mientras que el objeto es un ejemplar creado
basndose en el modelo de esta estructura. La modificacin de un objeto no
cambia para los otros objetos creados a partir del mismo modelo (clase).En nuestro
ejemplo: aadir una parte a un edificio existente no cambia en los dems edificios
construidos siguiendo el mismo plano. Al revs, la modificacin del plano(clase)
lleva una serie de modificaciones para todos los nuevos edificios (todos los nuevos
objetos).

Ejemplo 2: pensamos en un molde de hacer flanes; el molde es la clase y los flanes


los objetos. Esto es, si disponemos de un molde de un litro para hacer flanes de
vainilla (ingredientes: leche, vainailla, azucar etc..), el molde agrupa las
propiedades comunes a todos los flanes de vainilla, pero no todos los flanes tienen
que tener la misma cantidad de ingredientes.

Ejemplo 3:

Las clases estn constituidas por campos, propiedades, mtodos y eventos.

2VBNET 11
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Los campos y propiedades representan las informaciones contenidas en los objetos.


Los campos se consideran variables y es posible leer su contenido o asignarles
directamente un valor. Las propiedades se manipulan de la misma manera que
los campos, pero se crean con los procedimientos Get y Set. Esto permite un mayor
control en la manera en que se leen y se devuelve los valores.

Los mtodos representan las acciones que un objeto puede realizar. Se aplican
creando procedimientos o funciones en una clase.

Los eventos son informaciones que un objeto recibe o transmite desde o hacia otro
objeto o aplicacin. Estos permiten que los objetos ejecuten ciertas acciones al
verificarse una situacin especial (p.e. evento que puede venir cuando el usuario
realiza una accin con el ratn o teclado)

3.2 Polimorfismo, encapsulacin y herencia.

En la programacin orientada a objetos hay tres caractersticas fundamentales que


le hacen diferentes al resto de tipo de programacin: polimorfismo,
encapsulacin y la herencia.

Herencia: La herencia es la capacidad de crear nuevas clases a partir de una clase


existente. La nueva clase hereda todas las propiedades, mtodos y eventos de la
clase base y puede personalizarse agregando nuevas propiedades y mtodos. La
herencia se usa habitualmente en el entorno .NET Framework. Cada vez que se
crea un objeto, se deriva de la clase base y se utiliza sus propiedades y mtodos.

Encapsulacin: Cuando usamos las clases, stas tienen una serie de


caractersticas (los datos que manipula) as como una serie de comportamientos
(las acciones a realizar con esos datos). Pues la encapsulacin es esa capacidad de
la clase de ocultarnos sus interioridades para que slo veamos lo que tenemos que
ver, sin tener que preocuparnos de cmo est codificada para que haga lo que
hace... simplemente nos debe importar que lo hace.

Poliformismo: es la capacidad para utilizar indistintamente los mtodos y


propiedades de mltiples clases con el mismo nombre, aunque cada una de ellas
implemente las propiedades y mtodos de forma diferente. En VB .NET, esta
propiedad se conoce como polimorfismo basado en herencia. El objetivo del
polimorfismo es permitir la anulacin de la funcionalidad de un mtodo o propiedad
al heredar la clase.

Veamos con un ejemplo: consideramos una entidad bancaria. En ella identificamos


entidades que son cuentas: cuenta del cliente 1, cuenta del cliente 2, Luego una
cuenta puede verse como un objeto que tiene unos atributos, nombre, nmero de
cuenta, y saldo, y un conjunto de mtodos como IngresarDinero, RetirarDinero,
AbonarIntereses, SadoActual, Transferencia.

Ordenar una transferencia de una cuenta a otra podra indicarse de la siguiente


forma:

Cuenta01.Transferencia(cuenta02)

Donde transferencia sera el mensaje que el objeto cuenta02 enva al objeto


cuenta01, solicitando le sea una hecha una transferencia, siendo la respuesta a tal
mensaje la ejecucin del mtodo transferencia.
Declaracin de una clase

2VBNET 12
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Cuando escribimos un POO lo que hacemos es disear un conjunto de clases, desde


las cuales se crearn los objetos necesarios cuando el programa se ejecute.
Este proceso por el cul se obtiene un objeto a partir de las especificaciones de una
clase se conoce como instanciacin de objetos
Cada una de estas clases incluye dos partes: los atributos y los mtodos. Los
atributos definen el estado de cada uno de los objetos de esa clase y los mtodos
su comportamiento.

Objeto

mensajes
atributos

mtodos

Normalmente, los atributos, la estructura ms interna del objeto, se ocultan a los


usuarios del objeto (encapsulacin), manteniendo como nica conexin con el
exterior los mensajes. Esto quiere decir que los atributos de un objeto solamente
podrn ser manipulados por los mtodos del propio objeto. Este conjunto de
mtodos reciben el nombre de interfaz: medio de comunicacin con un objeto.

Vamos a crear la clase de objetos CCuenta que representa una cuenta bancaria.

Abrimos Visual Studio 2005, seleccionamos el lenguaje Visual Basic y aplicacin de


consola.

Borramos todo y creamos la clase de la siguiente forma:

Public Class ccuenta

Private nombre As String ' nombre del cliente del banco al que pertenece
Private cuenta As String ' nmero de cuenta
Private saldo As Double ' saldo actual de la cuenta
Private tipoDeInteres As Double ' tipo de interes en tanto por cien

End Class

Entre Class y End Class indicamos los atributos asociados a la clase cuenta.

Una clase puede ser:

Public: se podr utilizar en todo su proyecto, pero tambin en otros proyectos.


Friend: el acceso a la clase est limitado al proyecto en el que est definida.
Private: la clase slo se puede utilizar en el mdulo en el que est definida.
Protected:l a clase slo se puede utilizar en una subclase de la clase en la que
est definida. Esta palabra slo se puede utilizar en una clase definida dentro de
otra clase.
Protected Friend: la unin de los alcances de protected y friend.

Antes se ha mencionado que los atributos de un objeto de una clase se ocultan a


los usuarios del mismo. Esto significa que un usuario que utilice la clase CCuenta en

2VBNET 13
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

su programa no podr escribir su cdigo basado directamente en estos atributos ,


sino que tendr que acceder a ellos a travs de los mtodos que implemente la
clase. Esto se consigue con el modificador Private, suele utilizarse dos
modificadores private y public , si se utiliza dim se supone como private.

Si definimos un campo(variable) de forma Public desde el programa principal


main() podremos acceder a dicho campo sin ningn problema desde la instancia de
clase ccuenta.

Un miembro declarado private es accesible solamente por los mtodos de su propia


clase, y por lo tanto no se puede acceder a l por los mtodos de cualquier otra
clase, incluidas las subclases.

Afortunadamente no se tendr que escribir todas las clases que se necesiten en un


programa, porque .NET proporciona una biblioteca de clases estndar para realizar
las operaciones ms habituales.

Clases de uso comn

Vemos que todos nuestros programas van a estar estructurados en clases.


Dada la gran cantidad de clases se intenta buscar un modo coherente de
organizarlas y para ello se crean en todos los lenguajes .NET los espacios
de nombres o namespaces.

Un espacio de nombres no es ms que un identificador que permite organizar las


clases que estn contenidas en l as como otros espacios de nombres.

Dentro de los diferentes espacios de nombres hay uno que destaca por las clases
de propsito general que incluye: System en este encontraremos la clase console
que proporciona los mtodos para manipular la entrada/salida estndar, la clase
string para manipular los mtodos correspondientes para manipular cadenas, la
clase Math que proporciona los mtodos correspondientes a las funciones
matemticas de uso ms frecuente,

System.Windows
Contiene el conjunto de elementos que permiten la creacin de interfaces para
usuarios de Windows.

System.Web
Contiene todos los recursos necesarios para crear aplicaciones Web, como por
ejemplo las clases de la tecnologa ASP.NET o las clases usadas para crear servicios
Web XML.

System.Data
Contiene un conjunto de clases especializadas en el acceso a la base de datos, con
el soporte ADO.NET

System.Xml
El lenguaje XML est ahora por todas partes y este Namespace contiene las clases
que permiten la manipulacin de documentos XML.

La entrada y salida queda reforzada con la clase System.IO, que a su vez, aporta
clases para el manejo de ficheros.
En visual studio 2005 se pueden visualizar a travs de ver/examinador de
objetos

2VBNET 14
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Cuando se realiza un programa orientado a objetos, no se definen objetos


verdaderos, se definen clases de objetos, donde una clase se ve como una plantilla
para mltiples objetos con caractersticas similares.

Por ejemplo, en un proyecto de un edificio sabemos que es posible construir


diferentes edificios a partir del mismo plano

MENSAJES Y MTODOS: un programa orientado a objetos se compone solamente


de objetos. Cada uno de ellos es una entidad que tiene unas propiedades
particulares, los atributos, y unas formas de operar sobre ellos, los mtodos. Por
ejemplo, una ventana de una aplicacin de Windows es un objeto. El color de
fondo, la anchura, la altura, etc son atributos. Las rutinas (cdigo), transparentes al
usuario, que permiten maximizar la ventana, minimizarla, etc. son los mtodos.

Cuando se ejecuta un programa orientado a objetos, los objetos estn recibiendo,


interpretando y respondiendo a mensajes de otros objetos. En la POO un mensaje
est asociado con un mtodo, de tal forma que cuando un objeto recibe un mensaje
la respuesta a ese mensaje es ejecutar el mtodo asociado. Por ejemplo, cuando un
usuario quiere maximizar una ventana de una aplicacin Windows, lo que hace se
hace es simplemente pulsar el botn correspondiente lo que provoca que Windows
enve un mensaje a la ventana para indicar que tiene que maximizarse. Como
respuesta a este mensaje se ejecutar el mtodo programado para ello.

Un mtodo se escribe en una clase de objetos y determina cmo tiene que actuar el
objeto cuando recibe el mensaje vinculado con ese mtodo. A su vez, un mtodo
puede tambin enviar mensajes a otros objetos solicitando una accin o
informacin. Adems los atributos definidos en la clase permitirn almacenar
informacin para dicho objeto.

El comportamiento queda definido por las acciones que se pueden realizar con la
clase CCuenta. Por ejemplo, de una cuenta de un cliente se puede:

Asignar el nombre de un cliente a una cuenta


Obtener el nombre del cliente de una cuenta
Asignar el nmero de cuenta
Obtener el nmero de cuenta
Realizar un ingreso
Realizar un reintegro
Asignar un tipo de inters
Obtener un tipo de inters
Obtener un saldo.
Para definir estas acciones hay que aadir mtodos a la clase. Los mtodos son
rutinas de cdigo definidas dentro del cuerpo de la clase.

Vamos agregar a la clase CCuenta un mtodo que responda a la accin asignar el


nombre de un cliente a una cuenta.

Public Sub AsignarNombre(nom As String)


If nom.Length = 0 Then
System.Console.WriteLine("error: cadena vacia")
Else
nombre = nom
End If
End Sub
Se ha declarado el mtodo como pblico para que pueda ser accesible para
cualquier otra clase o subclase que necesite utilizarlo.

2VBNET 15
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Un mtodo consta de un nombre precedido por Function si devuelve un valor, o


bien Sub si no devuelve un valor. Adems indicaremos los parmetros si fueran
necesarios (byval por valor y byref por referencia).
Por omision es byval.
El mtodo AsignarNombre asegura que el nombre a asignar no sea una cadena
vaca (atributo length de la clase string )

Vamos a crear otro mtodo: queremos obtener el estado de la cuenta, es decir , el


saldo.

Public Function estado() As Double


Return saldo
End Function

Realizar los mtodos que faltan.

PROGRAMA MAIN

Para poder crear objetos de esta clase y trabajar con ellos, tendremos que escribir
un programa. En un programa tiene que haber un mdulo con un procedimiento
Main, puesto que ste es el punto de entrada y salida del programa.

Esto se puede hacer de diferentes formas:

1. Aadir a la clase CCuenta un procedimiento Main declarado Shared que


incluya el cdigo del programa (crear objetos CCuenta y realizar operaciones
con ellos)
2. Aadir en el mismo fichero fuente en el que esta almacenada la clase
CCuenta, otro mdulo estandar Test, que incluya el procedimiento Main. En
un modulo estandar (module) todos sus miembros son Shared por omision.
3. Tenemos un fichero fuente CCuenta.vb, con la clase CCuenta. Aadir en la
misma carpeta otro fichero fuente, Test.vb, con un modulo estandar que
incluya el procedimiento Main.

Un objeto de una determinada clase se crea en el momento en que se invoca al


operador New para dicha clase.

Hay 3 formas posibles, de instanciar una clase existente:


Suponiendo que tenemos la clase CCuenta

Forma 1: declarar primero la variable y despus instanciar el objeto

Dim cuenta01 As CCuenta


Cuenta01 = New CCuenta()

Forma 2: declaracin e instanciacin simultnea

Dim cuenta02 As New CCuenta()

Forma 3: declaracin y posterior instanciacin en ' la misma lnea de cdigo

2VBNET 16
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Dim cuenta03 As CCuenta = New CCuenta()

De esta forma podemos decir que cuenta01, cuenta02 y cuenta03 son objetos
(instancias) de la clase CCuenta.

Vamos a utilizar la segunda forma. En Visual Studio 2005 proyecto/agregar modulo

Module Test
Public Sub Main()
' declaramos los objetos de la clase cuenta
Dim cuenta01 As CCuenta = New CCuenta()

cuenta01.asignarNombre("Un nombre")
cuenta01.asignarCuenta("Una cuenta")
cuenta01.asignarTipoDeInteres(2.5)

cuenta01.ingreso(1000000)
cuenta01.reintegro(500000)

System.Console.WriteLine(cuenta01.obtenerNombre())
System.Console.WriteLine(cuenta01.obtenerCuenta())
System.Console.WriteLine(cuenta01.estado())
System.Console.WriteLine(cuenta01.obtenerTipoDeInteres())
System.Console.WriteLine()
System.Console.Readline()

End Sub

CONSTRUCTORES/DESTRUCTORES

Un constructor es un mtodo especial de una clase que es llamado


automticamente siempre que se crea una instancia de esa clase. Su funcin es
crear un objeto.

Un constructor se distingue fcilmente porque tiene el nombre New y no puede


retornar un valor (procedimiento Sub).
Por ejemplo, si aadimos un constructor a la clase CCuenta, se escribira un mtodo
Sub New(). Si en una clase no se escribe un constructor explcitamente , Visual
Basic asume uno por omisin. Por ejemplo, la clase CCuenta que hemos escrito
tiene por omisin el siguiente constructor definido:

Public Sub New()

End Sub

Como vemos es un constructor sin parmetros que no hace nada. Sin embargo, es
necesario porque ser invocado cada vez que se construya un objeto sin especificar
ningn argumento, donde los valores predeterminados sern los indicados por el
sistema (numricos ceros , alfanumricos y referencias a objetos a nothing).

Para comprobar que un constructor es un mtodo especial de una clase y que es


llamado automticamente cada vez que se crea una instancia de una clase , vamos
a aadir lo siguiente en el mtodo.

Public Sub New()

2VBNET 17
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Console.WriteLine(Instancia CCuenta creado)

End Sub

Se puede crear un constructor con el fin de poder dar unos valores


predeterminados al crear una instancia de la clase CCuenta.
Para ello crearemos el siguiente constructor:

Public Sub New(ByVal nom As String, ByVal cue As String, _


ByVal sal As Double, ByVal tipo As Double)
asignarNombre(nom)
asignarCuenta(cue)
ingreso(sal)
asignarTipoDeInters(tipo)
End Sub

Siempre que en una clase se define explcitamente un constructor , el constructor


implcito (constructor por omisin) es reemplezado por ste. Por ello es necesario
definirlo para que no de error.

Los constructores deben declararse siempre pblicos para que sean invocados
desde cualquier parte.

Si creamos dos instancias de esta forma en el main()

Dim cuenta01 As CCuenta = New CCuenta()

En este caso invocar al constructor New()

Dim cuenta02 As CCuenta = New CCuenta("Un nombre dos",_


"Una cuenta dos", 1000000, 3.5)

En este caso se invocar al constructor con parmetros que hemos definido.


Y para comprobar que ha inicializado bien introduciremos en el programa lo
siquiente:

Console.WriteLine(cuenta02.obtenerNombre())
Console.WriteLine(cuenta02.obtenerCuenta())
Console.WriteLine(cuenta02.estado())
Console.WriteLine(cuenta02.obtenerTipoDeInters())

Vemos que se ha definido en un clase dos mtodos con el mismo nombre New,
cuando esto ocurre se define que el mtodo est sobrecargado, esto es posible
si los dos mtodos tienen un nmero parmetros distintos o con el mismo nmero
pero diferencindose en al menos un prametro sea de tipo diferente.

Cuando una clase sobrecarga un mtodo una o ms veces , Visual Basic se fijar en
el nmero y tipos de argumentos en la llamada para saber cual de los mtodos
tiene que ejecutar , por ello las instancias en el main() no da ningun error.

Un destructor es otro mtodo especial de una clase. Este se ejecutar cuando el


objeto creado en la memoria ya no sea necesario, es decir, cuando acabe la vida
del objeto creado.

2VBNET 18
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

El destructor de Visual Basic 2005 es un mtodo llamado Finalize, el cual se hereda


de la clase Object, por tanto no es necesario que escribamos nada en l. Al igual
que el constructor se llama implcitamente y debe ser protected y overrrides sin
parmetros.

Luego no puede haber ms de un destructor por clase, su declaracin sera:

Protected Overrides Sub Finalize()

End Sub

La forma en que se destruyen los objetos pueden ser de dos formas: Porque los
destruyamos nosotros asignando un valor Nothing a la variable que lo referencia, o
bien porque el objeto est fuera de mbito, es decir, haya salido de su espacio de
ejecucin, por ejemplo, si declaramos un objeto dentro de un mtodo, cuando ese
mtodo termina, el objeto se destruye, (hay algunas excepciones a esta ltima
regla, como puede ser que ese mismo objeto tambin est referenciado por otra
variable externa al mtodo.)

Si nuestra clase utiliza recursos externos, por ejemplo un fichero o una base de
datos, debemos definir un mtodo que se encargue de liberarlos y a ese mtodo
debemos encargarnos de llamarlo cuando ya no lo necesitemos. Por definicin a
este tipo de mtodos se les suele dar el nombre Close o Dispose, aunque este
ltimo hay que tener cuidado.

CREACION DE UNA LIBRERA .DLL

Una vez creada una clase esta puede ser utilizada en otros proyectos para ello
deberemos crear la clase como .dll

Para ello seguiremos los siguientes pasos:

1) Al crear el nuevo proyecto en VisualBasic.NET seleccionar Biblioteca de


clases. Guardamos el proyecto.

2) Crear clase (propiedades, variables y mtodos) que corresponda hasta que


tengamos el proyecto listo.

3) Generar (Volver a generar) el proyecto y con ello obtendremos ya el archivo


.dll correspondiente. Concretamente en el directorio bin\Release de nuestro
proyecto.

Ya tenemos pues el archivo nombreDeNuestraLibreria.dll. Ahora para poder


utilizar dicha .dll y para ello lo que tenemos que hacer es lo siguiente:

1) En el nuevo proyecto, ir a Proyecto (en el men superior), seleccionar Agregar


referencia, ir a la pestaa Examinar y desde all buscar el archivo .dll
correspondiente y aceptar.

Vamos crear un .dll con nuestra clase ccuenta.

2VBNET 19
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

1. Creamos el proyecto de biblioteca de clases y lo guardamos con el nombre


cuentalibreria.

2. Creamos la clase, en nuestro caso como la tenemos creada realizamos una


copia de ella.

3. Generamos el proyecto para obtener el .dll

A continuacin creamos un proyecto de aplicacin de windows y creamos el


siguiente el formulario donde utilizaremos la clase ccuenta.

Para poder utilizar la clase cuenta , seleccionar Agregar referencia, ir a la pestaa


Examinar y desde all buscar el archivo .dll

A continuacin desde el cdigo importamos la clase y creamos un objeto de tipo


ccta.

Imports Cuenta
Public Class Form1
Dim cta As New CCuenta

End Class

Se crea los cdigos de los tres botones: Botn CrearCuenta

Botn Obtenerdatos

2VBNET 20
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Operacin

Vamos a realizar otro ejemplo pero en este caso creando una aplicacin windows.

Para ello vamos a crear un formulario de forma que al pulsar un botn me muestre
la informacin de la clase reloj que vamos a crear.

El cdigo ser el siguiente:


1. Deber establecida la clase form1
2. A continuacin las diferentes clases que se quieren definir

2VBNET 21
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Qu ocurre si las variables las ponemos Private?

Public Class reloj

Private segundo As Integer


Private minuto As Integer
Private hora As Integer
.

End Class

Vemos que desde el procedimiento Button1_Click y Button2_Click todas las


variables que pertenecan a clase quedan subrayadas, porque no las reconoce.
Como podemos solucionar esto? Mediante la definicin de propiedades.

CREACIN DE PROPIEDADES

2VBNET 22
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Las variables simples sirven para almacenar las informaciones de su clase, pero los
procedimientos de propiedades proporcionan flexibilidad y control sobre el
almacenamiento de informaciones en una clase. Permiten que la clase proteja y
valide sus propios datos.

Mediante la definicin de propiedades, sta permiten acceder a un atributo


privado como si estuviera definido como publico.

Un procedimiento de propiedad se define entre las palabras clave Property- End


Property.

Y dentro se definen 2 bloques de cdigo entre las palabras clave Get-End Get y
Set-End Set.

- Bloque Get: instrucciones que se ejecutarn cuando a travs de un objeto de la


clase se realice la lectura de la propiedad (al recuperar el valor de la propiedad).

- Bloque Set: instrucciones que se ejecutarn al asignar un valor a la propiedad de


un objeto.
En el interior del bloque set puede hacerse uso de la palabra value para hacer
referencia al valor asignado desde cdigo a la propiedad.

A partir de ahora si queremos acceder a la variables de la clase lo haremos a travs


de las propiedades segundos, minutos y horas.

Luego el cdigo correspondiente al formulario ser:

2VBNET 23
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim obreloj As New reloj

obreloj.establecerhora(60, 4, 12)
TextBox1.Text = "La hora establecida es " & obreloj.horas & ":" &
obreloj.minutos & ":" & obreloj.segundos

End Sub

End Class

Podemos modificar la visibilidad de los campos de la clase y convertirlos en campos


privados. As de esta forma se respeta el principio de encapsulacin.

PROPIEDADES DE SLO LECTURA O SLO ESCRITURA

Podemos definir propiedades en la que solamente se quiere utilizar un dato de solo


lectura o de solo escritura solamente se debe de indicar de la siguiente forma:

En el ejemplo anterior podemos definir:

ReadOnly Property segundos() As integer


Get
Return segundo
End Get
End Property

WriteOnly Property tiempo() As String


Set (ByVal Value As String)
Eltiempo= Value
End Set
End Property

Vemos que el bloque GET desaparece para una propiedad WriteOnly. Y el boque
SET desaparece para ReadOnly.

EJERCICIO1 RESUELTO

2VBNET 24
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

En el siguiente ejercicio vamos a crear un clase COrdenador para simular el


trabajo con ordenadores.

La clase COrdenador puede incluir los siguientes atributos:

- Marca: Mitac, Toshiba, HP.


- Procesador: Intel, AMD.
- Peso: 2, 2.5,3.

Adems podemos inluir como atributos el estado del ordenador

- encendido?
- pantalla activa?

Creamos un proyecto nuevo con el nombre Ordenador y aadimos la clase


COrdenador (proyecto/agregar clase) y definimos los atributos definidos arriba.

Public Class COrdenador


Private m_marca As String
Private procesador As String
Private peso As Integer = 0
Private encendido As Boolean = False
Private pantalla As Boolean = False

End Class

Hemos inicializado algunos atributos.

A continuacin hay que pensar las acciones que se pueden realizar sobre un objeto
de la clase COrdenador, por ejemplo:

- encender el ordenador
- apagar el ordenador
- desactivar la presentacin en pantalla
- activar la presentacin en pantalla
- ver la informacin

Para definir estas acciones debemos realizar los mtodos correspondientes. Vamos
a empezar con la primera accin: encender el ordenador

Public Sub EncenderOrdenador()


If encendido = True Then
Console.WriteLine("El ordenador ya esta encendido")
Else
encendido = True
pantalla = True
Console.WriteLine("El ordenador ha sido encendido")
End If
End Sub

Este mtodo comprueba si el ordenador esta encendido; si lo est, visualizar un


mensaje que lo indica; si no lo est, lo enciende y lo comunica mediante un
mensaje.

Vamos a crear un nuevo mtodo ver el estado del ordenador y sus propiedades.

2VBNET 25
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Public Sub Estado()


Console.WriteLine("El estado del ordenador es el siguiente: ")
Console.WriteLine("Marca: " & m_marca)
Console.WriteLine("Procesador: " & procesador)
Console.WriteLine("Peso " & peso & " Kg ")
If encendido = True Then
Console.WriteLine("El ordenador esta encendido")
Else
Console.WriteLine("El ordenador esta apagado")
End If
If pantalla = True Then
Console.WriteLine("La pantalla esta encendida")
Else
Console.WriteLine("La pantalla esta apagada")
End If
Console.WriteLine()
Console.ReadLine()
End Sub

En principio no vamos a crear ms metodos.


El siguiente paso es crear un objeto de la clase COrdenador (instancia) para poder
trabajar con dicha clase. Para ello necesitamos un modulo que tenga un
procedimiento Main() para poder definir la clase y poder utilizarla.
Aadimos un modulo (proyecto/agregar modulo) y le damos el nombre
MOrdenador.vb.

Module MOrdenador
Public Sub Main()
Dim miordenador As COrdenador = New COrdenador()

End Sub
End Module

En la primera lnea hemos creado una instancia de la clase COrdenador llamada


miordenador.

A continuacin queremos dar valores a los atributos del ordenador y utilizar los
mtodos para obtener la informacin que queramos.

Vamos a dar el valor Toshiba al atributo m_marca .

miordenador.m_marca=Toshiba

sin embargo vemos que cuando escribo la instancia miordenador. solamente


apareceden los mtodos de la clase y no los atributos.

2VBNET 26
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

A que es debido? Por qu no aparecen los atributos de la clase?. Muy sencillo


porque se han definido como privates y por lo tanto solamente pueden acceder a
ellas los mtodos definidas en la misma clase.
Cmo se puede solucionar? Mediante la definicin de propiedades, sta permiten
acceder a un atributo privado como si estuviera definido como publico.

Nosotros adems vamos a aadir ms cdigo de forma que si el valor es vacio


indicaremos que la marca es desconocida y sino guardamos con el valor recibido.

Set(ByVal dato As String)


If (dato = Nothing) Then
m_marca = "marca desconocida"
Else
m_marca = dato
End If
End Set

Luego la propiedad debe quedar de la siguiente forma:

Public Property marca() As String


Get
Return m_marca
End Get
Set(ByVal dato As String)
If (dato = Nothing) Then
m_marca = "marca desconocida"
Else
m_marca = dato
End If
End Set
End Property

Ahora si intentamos acceder a este atributo desde nuestro modulo MOrdenador


veremos que si podemos.

Public Sub Main()


Dim miordenador As COrdenador = New COrdenador()
miordenador.marca = "Toshiba"
miordenador.EncenderOrdenador()
miordenador.Estado()
End Sub

Con la orden miordenador.marca = "Toshiba" invocara a Set de marca.

2VBNET 27
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

EJERCICIO1 A REALIZAR: crea los mtodos que quedan y cambia el programa


principal para que salga la siguiente informacin. Tambin debers controlar que el
peso del ordenador no sea inferior a 0.

EJERCICIO 2 RESUELTO

Vamos a realizar una clase que representa nmeros racionales. Esta clase puede
ser til porque muchos nmeros no pueden ser representados exactamente
utilizando un nmero fraccionario. Por ejemplo, el nmero racional 1/3
representado como fraccionario sera 0,33333, valor mas facil de manipular pero a
costa de perder precisin.

Pensando un nmero racional como si fuera un objeto, deducimos que sus atributos
son : el numerador y el denominador. Y los mtodos aplicables sobre los nmeros
racionales son numerosos: suma, resta, multiplicacin,
Nosotros vamos aadir otros dos mtodos: AsignarDatos, para establecer los
valores del numerador y el denominador; y otro, VisualizarRacional, para visualizar
un nmero racional.

1. Creamos un proyecto en modo consola y lo denominamos Quebrados.vbprj


2. Creamos la clase CRacional.vb

Class CRacional
Private Numerador As Integer
Private Denominador As Integer

Public Sub AsignarDatos(num As Integer, den As Integer)


Numerador = num
If den = 0 Then den = 1 ' el denominador no puede ser cero
Denominador = den
End Sub

Public Sub VisualizarRacional()


System.Console.WriteLine(Numerador & "/" & Denominador)
End Sub
End Class

2VBNET 28
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

3. Creamos el modulo Racionales.vb

Module Racionales
Public Sub Main()
' Punto de entrada a la aplicacin
Dim r1 As CRacional = New CRacional() ' crear un objeto CRacional

r1.AsignarDatos(2, 5)
r1.VisualizarRacional()
End Sub
End Module

EJERCICIO A REALIZAR

1. Crea un formulario con una clase que te represente, con propiedades que
describan el color de tu pelo, de tus ojos y tu fecha de nacimiento.
Crea dos mtodos uno para obtener el da de la semana en que naciste y otro
para indicar la nacionalidad en funcin del color del pelo y de los ojos.
Utiliza la propiedad dayofweek del tipo de dato datetime para determinar el
da de la semana en que naciste. La propiedad devuelve un entero, convirtelo
al da de la semana.

El formulario inicialmente tendr el siguiente aspecto:

Se seleccionar el color del pelo y el color de los ojos. A continuacin se pulsar el


botn Ver donde aparecer una ventana indicando que se introduzca la fecha de
nacimiento:

Una vez introducida la fecha en el cuadro de texto aparecer la siguiente


informacin:

2VBNET 29
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

HERENCIA

La herencia es una caractersticas ms importantes de POO porque permite que


una clase herede los atributos y mtodos de otra clase (los constructores
no se heredan).
Esta carcterstica garantiza la reutilizacin del cdigo.
Con la herencia todas las clases estn clasificadas en una jerarqua estricta. Cada
clase tiene una superclase (la clase superior en la jerarqua, tambin llamada clase
base), y cada clase puede tener una o ms subclases( clases inferiores en la
jerarqua; tambin llamadas clases derivadas).

Clase CCuenta

Clase CCuentaCorriente Clase CCuentaAhorro

Las clases que estn en la parte inferior en la jerarqua se dice que heredan de la
clase superior.

El trmino heredar significa que las subclases disponen de todos los mtodos y
propiedades de su superclase. Este mecanismo proporciona una forma rpida y
cmoda de extender la funcionalidad de una clase. En Visual Basic cada clase slo
puede tener una superclase(o clase base), lo que se denomina herencia simple.

La clase Object es la clase raiz de la jerarqua de clases de la biblioteca .NET;


pertenece al paquete System. Por lo tanto, cualquier clase que implementemos en
nuestras aplicaciones pasar a ser automticamente una subclase de esta clase.

Como ejemplo aadimos al programa anterior una nueva clase denominada


CCuentaAhorro que sea subclase de CCuenta.

Class CCuentaAhorro

Inherits CCuenta

End Class

Con la palabra Inherits indicamos que la clase CCuentaAhorro se deriva de


CCuenta.

Ahora si modificamos el modulo test de nuestro ejemplo y ponemos

Dim cuenta01 As CCuentaAhorro = New CCuentaAhorro

cuenta01.asignarNombre("Un nombre")
cuenta01.nombre = "HOLA"
cuenta01.asignarCuenta("Una cuenta")
cuenta01.ingreso(1000000)
cuenta01.reintegro(500000)

2VBNET 30
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

System.Console.WriteLine(cuenta01.obtenerNombre())
System.Console.WriteLine(cuenta01.obtenerCuenta())
System.Console.WriteLine(cuenta01.estado())

Vemos que crea un objeto cuenta1 de la clase CCuentaAhorro y despus ,


utilizando los mtodos de la superclase, inicia los atributos del objeto y muestra el
resultado. Esto es posible ya que ha heredado todos los atributos y mtodos de la
clase CCuenta excepto los constructores.

Luego si queremos construir objetos CCuentaAhorro iniciados con unos


determinados valores, tendremos que aadir a esta clase un constructor con los
parmetros necesarios. Adems si queremos aadir funcionalidad a la clase
podemos aadir nuevos atributos y mtodos.

En el ejemplo vamos a aadir un constructor sin argumentos y otro con ellos, un


nuevo atributo cuotaMantenimiento y los mtodos asignarCuentaManten y
obtenerCuotaManten:

' Atributo
Private cuotaMantenimiento As Double

' Mtodos
Public Sub New() ' constructor sin parmetros
End Sub

Public Sub New(nom As String, cue As String, _


sal As Double, tipo As Double, mant As Double)
MyBase.New(nom, cue, sal, tipo) ' invoca al constructor de
' CCuenta; esto es, al de la clase base.
asignarCuotaManten(mant) ' inicia cuotaMantenimiento
End Sub

Public Sub asignarCuotaManten(cantidad As Double)


If cantidad < 0 Then
System.Console.WriteLine("Error: cantidad negativa")
Else
cuotaMantenimiento = cantidad
End If
End Sub

Public Function obtenerCuotaManten() As Double


Return cuotaMantenimiento
End Function

Si ahora modificamos el modulo test y ponemos

2VBNET 31
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Obtendremos el siguiente resultado:

En el caso de la clase reloj podemos definir una nueva clase relojanalogico y


podemos heredar las propiedades y mtodos de la clase reloj, para que crear de
nuevo todo!!!!! , y adems aadir nuevas propiedades y mtodos.

Vamos a ver como:

Definimos al final del cdigo (recuerda que la primera clase debe se la del
formulario) la defincin de la nueva clase.

Aadimos un nuevo botn al formulario

2VBNET 32
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Redefinir un mtodo
Una subclase puede redefinir cualquier mtodo heredado de su clase padre,
siempre que sea necesario que su comportamiento en la subclase sea diferente.

Redefinir un mtodo heredado significa volverlo a escribir en la subclase


con el mismo nombre, la misma lista de parmetros y el mismo tipo del
valor retornado que tena en la superclase; su cuerpo ser adaptado a las
necesidades de la subclase. Por ejemplo, supongamos que queremos obligar a
disponer de un saldo positivo superior 1.500 para las cuentas de ahorro con un
inters igual o mayor a 3,5; esto supone redefinir el mtodo reintegro de la
siguiente forma:

En este caso cuando se haga referencia desde la subclase al mtodo redefinido ser
por defecto el definido en la subclase.
Se puede utilizar de forma opcional palabra Overrides a la hora de hacer la
sustitucin en la subclase. Y en la clase base utilizar la palabra Overridable dando
autorizacin a la sustitucin.

Public Sub reintegro(cantidad as Double)


Dim saldo As Double = estado()
Dim tipoDeInters As Double = obtenerTipoDeInters()

If tipoDeInters >= 3.5 Then


If saldo - cantidad < 1500 Then
System.Console.WriteLine("Error: no dispone de esa cantidad")
Return
End If
End If
MyBase.reintegro(cantidad) ' mtodo reintegro de la clase base,
' tambin llamada superclase
End Sub

Una vez escrita la clase CCuentaAhorro, vamos a ver como ser la estructura de un
objeto de esta clase comparada con la clase CCuenta.

La clase CCuenta est soportada por los miembros:

Atributos Mtodos

Nombre Constructores de CCuenta


Cuenta asignarNombre
Saldo obtenerNombre
TipoDeInteres asignarCuenta
obtenerCuenta
Estado
Ingreso
Reintegro
asignarTipoDeInteres
obtenerTipoDeInteres

La clase CCuentaAhorro esta soportado por los miembros heredados de CCuenta


(en cursiva) y los suyos:

Atributos Mtodos

Nombre Constructores de CCuenta


Cuenta asignarNombre

2VBNET 33
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Saldo obtenerNombre
TipoDeInteres asignarCuenta
obtenerCuenta
Estado
Ingreso
Reintegro
asignarTipoDeInteres
obtenerTipoDeInteres
cuotaMantenimiento Constructores CCuentaAhorro
asignarCuotaManten
obtenerCuotaManten
Reintegro

Vemos que los constructores de la clase CCuenta no se heredan , puesto que cada
clase define el suyo por omisin, y que el mtodo reintegro queda oculto por el
mtodo del mismo nombre de la clase CCuentaAhorro. Se puede acceder al
miembro oculto con la siguiente sintaxis: MyBase.miembro_oculto.

Segn los cuadros anteriores, mientras un posible objeto CCuenta contendra los
datos, nombre, cuenta , saldo y tipoDeInteres, un objeto CCuentaAhorro contiene
datos, nombre, cuenta , saldo ,tipoDeInteres y cuotaMantenimiento.
Cmo se crea un objeto de subclase CCuentaAhorro?. Si observamos el
constructor CCuentaAhorro con parmetros vemos que tiene cinco: los cuatro
pimeros proveen valores para los atributos heredados de CCuenta, y el quinto para
el nuevo atributo .
Para iniciar los atributos heredados de la clase base lo ms sencillo es invocar al
constructor de la misma; esto se hace mediante la llamada MyBase.New seguida
de los argumentos correspondientes; esta llamada tiene que ser la primera
sentencia en el constructor de la subclase, como vemos en el ejemplo:

Public Sub New(nom As String, cue As String, _


sal As Double, tipo As Double, mant As Double)
MyBase.New(nom, cue, sal, tipo) ' invoca al constructor de
' CCuenta; esto es, al de la clase base.
asignarCuotaManten(mant) ' inicia cuotaMantenimiento
End Sub

Otra posible solucin hubiera sido:

Public Sub New(nom As String, cue As String, _


sal As Double, tipo As Double, mant As Double)

asignarNombre(nom)
asignarCuenta(cue)
ingreso(sal)
asignarTipoDeInters(tipo)
asignarCuotaManten(mant)

End Sub

2VBNET 34
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

En modo de resumen, los siguientes puntos exponen las reglas a tener en cuenta
cuando se define una subclase:

1. Una subclase hereda todos los miembros de su superclase, excepto los


constructores, lo que no significa que tenga acceso directo a todos los
miembros. Una consecuencia inmediata de esto es que la estructura interna
de datos de un objeto de una subclase estar formada por los atributos que
ella define y por los heredados de su superclase.

Una subclase no tiene acceso directo a los miembros privados (Private) de


su superclase.

Una subclase si puede acceder directamente a los miembros pblicos


(Public) de su superclase.

2. Una subclase puede aadir sus propios atributos y mtodos. Si el nombre de


alguno de estos miembros coincide con el de un miembro heredado, este
ltimo queda oculto para la subclase, que se traduce en que la subclase ya
no puede acceder directamente a ese miembro.

3. Los miembros heredados por una subclase pueden, a su vez, ser heredados
por ms subclases de ella. A esto se llama propagacin de herencia.

Siguiendo el ejemplo reloj, si queremos cambiar algo del mtodo establecerhora


para el relojanalogico , tan solo tendremos que generar otro mtodo con el mismo
nombre:

Class relojanalogico
Inherits reloj
' declaramos un nueva variable
Private cuerdaalreloj As Boolean = False
' declaramos un nuevo mtodo

Function darcuerdaalreloj() As Boolean

darcuerdaalreloj = True

End Function

Sub establecerhora(ByVal seg As Integer, ByVal min As Integer, ByVal


hor As Integer)
If hor > 12 Then
horas = hor - 12
End If
segundos = seg
minutos = min
horas = hor
End Sub

End Class

Ahora obrelojanalogico.establecerhora utilizar el mtodo modificado, es decir, el


definido dentro de su clase.

2VBNET 35
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Creacin Control de usuario

Por medio de la herencia crear versiones personalizadas de prcticamente


cualquier clase incluida en el propio .NET, entre esas clases se incluyen todos los
controles de Windows Forms, por tanto, con un poco de trabajos podemos
personalizar la funcionalidad de cualquiera de ellos.

En este ejemplo nos vamos a centrar en el control TextBox de forma que


crearemos una versin que solo acepte nmeros.

1. Crear un nuevo proyecto : biblioteca de controles de Windows al que


llamaremos LibreriaControles.

Como lo que pretendemos crear es una nueva clase que se deriva de otra,
podramos pensar en crear un proyecto del tipo Biblioteca de clases (Class Library),
de hecho podemos empezar usando ese tipo de proyecto, pero como queremos
crear una clase derivada de uno de los controles que residen en el espacio de
nombres System.Windows.Forms tambin podemos optar por crear un nuevo
proyecto del tipo Biblioteca de controles de Windows (Windows Control Library).

En el primer tipo de proyecto (biblioteca de clases) simplemente tendremos una


clase vaca y las referencias mnimas a las DLL de .NET, por tanto tendremos que
aadir como mnimo una referencia a la DLL que contiene los controles de
Windows.
En el proyecto del tipo biblioteca de controles ya tendremos las referencias
necesarias para acceder a las clases de Windows.Forms, aunque en lugar de tener
una clase "normal", nos encontraremos con una clase del tipo UserControl (control
de usuario), a la que tendremos que quitar prcticamente todo el cdigo que
contiene.

2. Cambiamos el nombre del fichero, para que en lugar de llamarse


userControl1.vb se llame como la clase que queremos crear:
TextBoxNum.vb
3. Cerramos la ventana de diseo.
4. Desde la ventana de soluciones seleccionamos el botn mostrar todos los
archivos

Y seleccionamos el archivo

2VBNET 36
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Borramos todo el cdigo que el diseador de Windows gener.

5. Seleccionamos el archivo TextBoxNum.vb y creamos la clase basada en la


clase textBox, para ello utilizamos la herencia.

Public Class TexBoxNumero


Inherits System.Windows.Forms.TextBox
End Class

Como lo que queremos es crear una caja de textos que solo admita nmeros, lo
que tendremos que hacer es detectar las teclas pulsadas y filtrarlas para que solo
pasen los dgitos numricos y los caracteres que creamos conveniente, por ejemplo
los signos de puntuacin y los smbolos ms y menos. Aunque tambin tendremos
que permitir al usuario que pueda borrar los caracteres introducidos.

Si miramos en los miembros de la clase Textbox, veremos que existen ciertos


mtodos "protegidos". Esos mtodos al estar declarados como "protected" solo los
podremos usar en clases derivadas, es decir en clases que hayan usado la
instruccin Inherits para indicar que quieren derivarse de ellas.

La idea de usar miembros protegidos es que solamente puedan ser accedidos desde
la propia clase en la que se declara y en todas las que estn derivadas de ella, ya
sea directa o indirectamente. De esta forma podremos modificar la funcionalidad de
la clase base de una forma "controlada".

Para saber que funcionalidad de la clase TextBox podemos "reemplazar" por la


nuestra propia; cuando estamos en modo de escritura de cdigo, tendremos dos
listas desplegable, una (la de la izquierda) que nos muestra las clases que tenemos
y otra (la de la derecha) que nos muestra los miembros de ducha clase. En nuestro
caso, podemos seleccionar de la lista desplegable de la izquierda la opcin
(Reemplazos) que est justo debajo del nombre de nuestra clase: TextBoxNum.
Una vez seleccionado ese elemento de la lista izquierda, en la lista de la derecha
tendremos todos los miembros "reemplazables" de la clase heredada.

De esos miembros vamos a seleccionar OnKeyPress que ser el mtodo que se va


a ejecutar cuando el usuario pulse cualquier tecla "normal". Y lo vamos a redefinir.

Porque cogemos este mtodo: porque en una aplicacin normal utilizaramos el


evento KeyPress del control TextBox para detectar las pulsaciones de teclas, lo
nico que tenemos que hacer es buscar un mtodo que tenga el mismo nombre que
el evento pero que tenga el prefijo On.

Nota: Toda clase que produce eventos , por cada evento que la clase defina, existe
un mtodo asociado . Por convenciones de nomenclatura, se recomienda que dichos
mtodos empiecen con la palabra On seguida del nombre del evento.

Protected Overrides Sub OnKeyPress(ByVal e As KeyPressEventArgs)


If (e.KeyChar < Chr(48) Or e.KeyChar > Chr(57)) And e.KeyChar
<> Chr(8) And e.KeyChar <> Chr(12) And e.KeyChar <> "," And e.KeyChar
<> "." And e.KeyChar <> "-" Then
e.Handled = True
End If
MyBase.OnKeyPress(e)
End Sub

2VBNET 37
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Recuerda que en el parmetro e podemos saber que tecla es la que se ha


pulsado, (propiedad KeyChar), si queremos que se ignore la pulsacin de esa tecla,
podemos usar la propiedad Handled, para ello tendremos que asignarle un valor
verdadero (True).

Finalmente, llamamos al mismo mtodo de la clase base para que siga haciendo
sus comprobaciones. Esto siempre es recomendable hacerlo, para no romper el
flujo de mensajes.

Por qu OnKeyPress?
Como es de suponer, la eleccin del mtodo OnKeyPress no es fortuita, lo voy a
usar porque yo se que es ese el mtodo que debo reemplazar.
Cmo saber qu mtodo escoger?
Normalmente en las clases que producen eventos, por cada evento que la clase
defina, existe un mtodo asociado que es el que se utiliza para lanzar el evento, es
decir, en lugar de llamar directamente al evento mediante la instruccin
RaiseEvent, lo que hacemos es llamar a un mtodo que es el que se encarga de
lanzar dicho evento; de esta forma siempre usaremos el mismo mtodo para lanzar
el mismo evento. Por convenciones de nomenclatura, se recomienda que dichos
mtodos empiecen con la palabra On seguida del nombre del evento.
Dicho esto y sabiendo que en una aplicacin normal utilizaramos el evento
KeyPress del control TextBox para detectar las pulsaciones de teclas, lo nico que
tenemos que hacer es buscar un mtodo que tenga el mismo nombre que el evento
pero, como hemos comentado, que tenga el prefijo On.

6. Compilamos el proyecto o seleccionamos Generar/Generar LibreriaControles,


de forma que detecte si hay algn error, as de paso creamos la DLL con el
contenido del control.
7. Guardamos el proyecto.

Ahora solo nos falta probarlo en otras aplicaciones.

1. Creamos un nuevo proyecto de tipo Windows Form.


2. Agregar dicho control a la paleta de controles del cuadro de herramientas.
Para ello, primero creamos una ficha donde guardaremos los controles
creados por el usuario y no mezclar con los dems. Con el botn derecho
sobre el cuadro de herramientas seleccionamos Agregar ficha . A la nueva
ficha le damos el nombre de MisControles.

3. Agregamos el nuevo control en la ficha MisControles. Para ello pulsamos


botn derecho y seleccionamos Elegir Elementos.

2VBNET 38
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Seleccionamos Examinar y buscamos la librera creada (LibreriaControl.dll) en el


proyecto anterior. Recuerda que se encuentra en la carpeta obj/release

4. Ya tenemos el control para aadir al formulario cuando queramos.

Sobrecarga de un mtodo

La sobrecarga consiste en crear ms de un mtodo en una misma clase con el


mismo nombre y distintos tipos de argumento.

La sobrecarga es especialmente til cuando un modelo de objeto exige el uso de


nombres idnticos para procedimientos que operan en diferentes tipos de datos.

Cada mtodo sobrecargado debe tener distintas listas de parmetros. No se puede


cambiar las siguientes carcteristicas para sobrecargar un mtodo:

Modificadores, como por ejemplo ByVal o ByRef, que se aplican a un


miembro o parmetros de un miembro.
Nombres de parmetros
Tipos de valores devueltos de procedimientos

La palabra clave Overloads es opcional en la sobrecarga, aunque si algn miembro


sobrecargado la utiliza, todos los dems miembros sobrecargados con el mismo
nombre deben especificarla tambin.

Poniendo Overloads simplemente permite indicar al usuario que existen varios


mtodos con el mismo nombre.

Veamos un ejemplo con la clase Reloj.

Tenemos un mtodo definido establecerhora, vamos a definir otro con el mismo


nombre pero con dos parmetros

Overloads Sub establecerhora(ByVal seg As Integer, ByVal min As


Integer, ByVal hor As Integer)
segundo = seg
minuto = min
hora = hor
End Sub
Overloads Sub establecerhora(ByVal seg As Integer, ByVal min As
Integer)
segundo = seg * 60
minuto = min * 60
End Sub

La palabra overloads no es necesaria.

Ahora cuando se vaya a hacer referencia al mtodo establecerhora veremos que


cuando vayamos a poner los parmetros se nos indicar los distintas formas de

Vemos que nos indica que hay dos mtodos con el mismo nombre el primero con
los tres parmetros y el segundo (si lo seleccionamos) con dos parmetros.

2VBNET 39
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Tambin se poda haber definido con el mismo nmero de parmetros pero de


diferente tipo.

Overloads Sub establecerhora(ByVal seg As Double, ByVal min As Double,


ByVal hor As Integer)
segundo = Int(seg)
minuto = Int(min)
hora = hor

End Sub

Desde la llamada aparecera el tercer mtodo sobrecargado

obreloj.establecerhora(12.3, 5.6, 8) llamada con decimales

La llamadas sern de la siguiente forma:

2VBNET 40
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

EJERCICIOS

2. Disear una clase CCoche que represente coches. Sus atributos sern
marca, modelo, coche y marcha; y los mtodos deberan simular, enviando
mensajes, las acciones arrancar el motor, cambiar de velocidad, acelerar, frenar
, parar coche y describir el coche. De forma que cuando se ejecute la aplicacin
salga de la siguiente forma:

Crea una clase nueva CCochePolicia que tenga las mismas caractersticas que la
clase CCoche pero con las variables y mtodos necesarios para poder activar y
desactivar la sirena.

A continuacin crea el siguiente ejemplo:

2VBNET 41
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

Supongamos que queremos dotar al mtodo frenar de ms funcionalidad.


Queremos que nos permita reducir hasta la velocidad que queramos. Para ello le
pasaremos como parmetro la velocidad, pero tambin sera til que nos indicara
que esta frenando si no le pasamos ningn parmetro.

Realiza los cambios oportunos para que se pueda realizar lo anterior indicado como
se ve a continuacin:

2VBNET 42
Visual .NET
Microsoft Visual Studio 2005 Unidades Didctica 21

3. Disea una clase Persona que representa a las personas.

Sus atributos sern elnombre, elapellido, lafecha_nacimiento.


Sus propiedades nombre() para obtener el nombre en maysculas, apellido( )
para obtener el apellido en minsculas y fecha_nacimiento( ) para obtener la
fecha de nacimiento no sea inferior a 1900.
Una propiedad edad ()de solo lectura que me permita obtener la edad en
funcin de la fecha de nacimiento.
Una propiedad hijo(indice) que permita asociar un hijo o ms hijos a una
persona. Para ello se tendr que crear un nuevo campo en la clase persona para
asegurar que se guarda la lista de hijos. Este campo ser un array de dimensin
9 de tipo personas.
La propiedad hijo recibe por parmetro un ndice que permite especificar el hijo
con el que deseamos trabajar.

Crea con esta clase Persona un .dll


Crea un formulario de forma que al pulsar el botn Mostrar datos muestre los datos
de una persona utilizando la clase persona. Un ejemplo:

2VBNET 43

Вам также может понравиться