Anda di halaman 1dari 14

Desarrollo de Aplicaciones Informticas

- Visual Basic.Net .

Introduccin a la Programacin Orientada a Objetos.


INDICE
1. Introduccin............................................................................................................................................................ 1
2. Clases...................................................................................................................................................................... 2
3. Instancias u Objetos................................................................................................................................................ 3
4. Mensajes................................................................................................................................................................. 3
5. Relacin entre clases y objetos............................................................................................................................... 4

Herencia................................................................................................................................................. 4
Agregacin............................................................................................................................................. 5
Asociacin..............................................................................................................................................5
Instanciacin.......................................................................................................................................... 5
6. Conceptos y herramientas de Anlisis y Diseo orientado a objetos..................................................................... 6

Diagrama de Objetos y diagrama de Clases.......................................................................................... 6


7. Crear o definir una clase en Visual Basic.Net. ...................................................................................................... 9

Definir los miembros de una clase.........................................................................................................9


Crear un objeto a partir de una clase......................................................................................................9
Acceder a los miembros de una clase.................................................................................................. 10
Ejemplo de cmo usar la herencia....................................................................................................... 10
Resumiendo..........................................................................................................................................13
8. Ejercicios...............................................................................................................................................................14

1.

Introduccin
Un programa orientado a objetos est compuesto de varios objetos que presentan una serie de
propiedades y unas cuantas operaciones que saben cmo realizar. Esta idea parte de lo que ocurre en el
mundo real, en el cual mltiples entidades desempean su labor en funcin de los estmulos que reciben de
otras entidades y de los estados que llegan a alcanzar en cada momento.
Objeto = Estado + Comportamiento
La clave de todo est en que cada objeto conoce bien su contenido: una vez construido un objeto
que satisfaga nuestros requisitos, dejaremos de preocuparnos de cmo dicho objeto hace las cosas para
pasar a integrarlo donde nos haga falta. Esto introduce dos conceptos bsicos relativos a la programacin
orientada a objetos(POO): encapsulacin y reusabilidad.
La encapsulacin consiste en combinar los datos y el comportamiento de los objetos ocultando los
detalles de su implementacin. Esto quiere decir que la forma en que un objeto desempee una tarea slo
concierne a dicho objeto, pero en ningn caso a otros objetos que vayan a hacer uso de este. Lo
verdaderamente importante es que el objeto ofrezca una imagen robusta al exterior, es decir, que no cambie
el modo en que se le solicite realizar una determinada tarea; dicho en trminos ms tcnicos, que presente
un diseo fuerte de su interfaz. De este modo, si en el futuro se descubre un algoritmo ms eficiente que el
actual para resolver un problema, o si se encuentra una manera ms adecuada de representar los datos, no
ser necesario informar a nadie de los cambios, sino que podremos pasar a realizarlos sin preocuparnos de
ms.
Por ejemplo, cuando aprendemos a conducir un coche somos capaces de conducir prcticamente
cualquiera. Por qu? porque lo que aprendemos es cmo hacer que ese coche realice su funcin: para que
acelere, pisamos el pedal del acelerador; para que frene, el pedal del freno, y no nos importa si acelera con

Dpto. Informtica.

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

ms o menos vlvulas o que el freno sea de disco o de tambor. As, si pasamos de tener un Seiscientos a un
BMW no tendremos que aprender a conducir de nuevo. Por otra parte, a nosotros no nos importa cmo
acelere el coche mientras que cuando aceleremos obtengamos la respuesta esperada.
Otra de las razones para defender la encapsulacin est en el hecho de que a travs de ella es ms
fcil controlar los errores, pues nadie mejor que el objeto que guarda los datos podr saber si existen
valores inconsistentes para los mismos que no se deben permitir.
Como ejemplo supongamos que queremos tener un objeto que represente las fechas del calendario.
Si permitimos que cualquier otro objeto pueda fijar una fecha, sera posible tener como vlido el 30 de
febrero de 1998, mientras que si no permitimos acceso directo, nuestro objeto de las fechas podra evitar
que tal cosa ocurriera.
La clave para lograr la encapsulacin est en que un objeto de una clase nunca pueda manipular
directamente los datos internos de otro objeto perteneciente a otra clase, sino que, si desea variar alguno de
ellos, tenga que pedrselo a quien los guarda. As, toda la comunicacin debe realizarse mediante
mensajes.
La reusabilidad, como su nombre indica, es la facilidad para utilizar cdigo que ya estaba escrito
en nuevos programas sin realizar variaciones sobre l. De qu forma proporcionan los objetos
reusabilidad? La respuesta es sencilla: si programamos los objetos de forma que se responsabilicen de slo
unas cuantas funciones relacionadas entre s, como normalmente los programas se parecen unos a otros, no
tendremos que inventar la rueda continuamente.
El ejemplo esta vez se remite al cuerpo humano. Cada uno de nuestros rganos es responsable de
una serie de funciones vitales. Si alguno de nosotros dona un rgano, otra persona podr recibirlo y ese
rgano realizar la misma funcin en otro cuerpo porque sabe cmo hacerlo. As, lo que los objetos ofrecen
es funcionalidad empaquetada, de la que slo necesitamos saber cmo se dispara y que podemos
dispararla en cualquier situacin similar a la que nos llev a desarrollarla.
Estas ideas presentan adems otras ventajas claras de cara al desarrollo de software. Por un lado, si
los objetos se responsabilizan de unas cuantas tareas, parecen apropiados para ser repartidos entre distintos
equipos de trabajo independientes entre s. Por otro lado, el tiempo que llevar localizar y corregir un error
se ver minimizado, pues se sabe qu objetos estn involucrados en el problema. Por ltimo, cuando
nuestro software deba ser actualizado por cambios en los requisitos, ser sencillo acometer las
modificaciones sin tener que redisear el sistema. No obstante, para sacar partido de todas estas
posibilidades de la POO no basta con que el programa sea orientado a objetos, sino que desde el diseo se
debe seguir esta filosofa.
A continuacin vamos a definir los trminos fundamentales para trabajar con la orientacin a objetos.

2.

Clases
Es el trmino ms importante, pues constituye la plantilla o el molde a partir del cual se construyen los
objetos. La clase se define mediante atributos, una serie de propiedades comunes a todos los objetos que
pertenecen a ella y mtodos el conjunto de funciones que pueden operar sobre dichos objetos.
Normalmente las clases se identifican en el lenguaje natural por venir precedidas de un artculo
indeterminado, como un coche, una casa, etc... o por un artculo determinado plural, como los
coches, las casas,...
Como ya hemos comentado, los atributos de una clase son cada una de las propiedades que presentan los
objetos que pertenecen a esa clase, siendo el valor que tomen lo que distinguir a unos objetos (o
instancias) de otros.

Dpto. Informtica.

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

Ej: Representacin grfica de la clase Coche.


COCHE
Nmero de
puertas
Color
Fecha de
matriculacin
Matrcula
Acelerar
Frenar
Pintar
Dar nmero de
puertas

Los mtodos y atributos de una clase pueden tener distinto grado de visibilidad:

3.

Privado: cuando dichos mtodos slo pueden ser invocados desde la misma clase.

Publico: cuando dichos mtodos se pueden invocar desde cualquiera de las clases del modelo.

Protegido: cuando dichos mtodos slo se pueden invocar desde la misma clase y sus subclases.

Instancias u Objetos
Resultan de concretar el valor de las propiedades que se definen en una clase. Son instancias de
una clase. As, tendremos que para la propiedad color diremos mi coche es rojo y tu coche es gris.
mi_coche : COCHE
Nmero de puertas = 3
Color = rojo
Fecha de matriculacin =
19/05/2000
Matrcula = 1234 BGH
Acelerar
Frenar
Dar nmero de puertas

Estado de un objeto, podemos pensar en l como una fotografa del objeto en un instante de
tiempo determinado, en el cual los atributos del objeto tendrn un valor concreto. El estado de un objeto
puede afectar a su comportamiento. Por ejemplo, si un pedido est pagado no querr aceptar nuevos
artculos, y si de momento es vaco no debe permitir que le borren artculos pues no los tiene.

4.

Mensajes

Definimos un mensaje como una peticin enviada a un objeto para que active un mtodo (llamada al
mtodo de un objeto desde otro objeto). Los mensajes constan de tres componentes:
Objeto al que se dirige.
Mtodo que se invoca, entre los que pertenecen al objeto que recibe el mensaje. El mtodo puede ser
propio de la clase a la que pertenece el objeto, o heredado de una de sus superclases (clases padre de la
actual).
Argumentos opcionales que deben pasarse al mtodo.
Los mtodos son equivalentes a las llamadas a funciones de la programacin estructurada. Al aparecer en
los mtodos el nombre del objeto que lo recibe se hacen posibles las siguientes caractersticas bsicas de la
POO:

Dpto. Informtica.

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

El encapsulamiento, pues el mtodo seleccionado pertenece al objeto que recibe el mensaje y el


objeto que llama slo conoce el nombre del mtodo y con qu parmetros debe llamarle.

El polimorfismo, pues mtodos distintos, asociados a objetos distintos, pueden tener el mismo
nombre (se distinguen por el nombre del objeto que los recibe).

La herencia, pues el mtodo asociado a un objeto no tiene por qu pertenecer a ste en exclusiva,
sino que puede estar definido en una de sus superclases y ser heredado por l.

Una de las caractersticas fundamentales de la OO es el polimorfismo, que permite asignar el mismo


nombre a datos o mtodos que pertenezcan a distintas clases de objetos, o incluso dentro de la misma clase.
Lo que sucede, es que se puede definir varios mtodos con cabeceras parecidas: el mismo nombre, pero
distinto nmero o tipo de parmetros. Por ejemplo, supongamos que hemos definido la clase Perro que
implementa el mtodo oler. Ahora bien, si un perro huele comida, se pondr contento y si huele un gato,
ladrar. Para resolver este problema recurrimos al polimorfismo.
Ej: class Perro {
public void oler ( Comida obj) {
printf(\nMe gusta la comida!\n);
}
public void oler ( Gato obj) {
printf(\nOdio a los gatoss!\n);
}
}

5.

Relacin entre clases y objetos


Existen diferentes tipos de relaciones:

Herencia
La propiedad fundamental que ms distingue a la OO de la programacin clsica, es la herencia de
propiedades y programas de unas clases a otras a travs de la organizacin jerrquica a la que pertenecen.
Esta propiedad facilita la reutilizacin de desarrollos anteriores en aplicaciones completamente nuevas, lo
que las simplifica y reduce el esfuerzo necesario para construirlas.
Entre las clases se puede definir una jerarqua del estilo padre -> hija, de forma que existan una
superclase(padre), con unas caractersticas muy generales, y otras subclase(hija), que aprovechan las
caractersticas de las anteriores para construir las suyas propias. La clase derivada hereda los atributos y
operaciones de la clase base y, adems, puede aadir los suyos propios. Por ejemplo, las clases profesor y
alumno podran definirse como herederas de una clase ms general persona, en la cual se definiran los
atributos y mtodos que fueran comunes a ambos. As, como los atributos edad y nombre los tendrn
ambas clases, lo correcto sera definirlos en la clase persona y que de ella heredaran profesor y alumno. Sin
embargo, los mtodos para asignar una tutora a un profesor o sancionar a un alumno, son especficos de
estas clases, por lo que no son heredados de persona.
La herencia puede ser simple(como en el ejemplo anterior), cuando una clase hereda caractersticas de otra,
o mltiple, cuando una clase hereda caractersticas de ms de una. Por ejemplo, si deseramos definir las
caractersticas de un vehculo anfibio, se podran aprovechar las caractersticas de los vehculos terrestres
automvil y las de los vehculos acuticos barco para obtener la clase anfibio.

Dpto. Informtica.

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

La jerarqua de clases sera:

vehculo

barco

automvil

camin

anfibio

Agregacin
Es una relacin entre objetos por la cual uno de ellos tiene definido entre sus atributos a una instancia de la
clase del otro. La agregacin implica posesin, es una relacin del tipo forma parte de o est
compuesto por. Fsicamente la agregacin supone la desaparicin del objeto agregado cuando el objeto
agregante deja de existir.
Por ejemplo, los objetos de la clase polgono se pueden definir como una agregacin de lados, por lo que
entre sus atributos podran tener un conjunto de elementos de la clase lado. Cuando un polgono deja de
existir, qu sentido tiene que existan sus lados por separado? Ninguno, por lo que dichos componentes
agregados tambin desaparecen, fsicamente hablando.

Asociacin
Es una relacin entre objetos similar a la agregacin. La gran diferencia estriba en que cuando un objeto de
una clase tiene como asociado a otro de otra clase, no lo tiene definido entre sus atributos y, por tanto, no
lo posee. Es decir, la existencia de ambos objetos asociados es independiente, por lo que la desaparicin
del primero no implica la del segundo. Las relaciones de asociacin representan relaciones de uso, por
medio de las cuales un objeto de una clase realiza algn tipo de procesamiento para otro de otra clase
distinta.
Por ejemplo, una clase que representara a un equipo de ftbol podra definir, a travs de sus atributos,
asociaciones con los diferentes jugadores que forman parte de la plantilla. Sin embargo, si el equipo
desapareciera, los jugadores podran seguir existiendo y jugando en otros equipos.

Instanciacin
Es la relacin que se establece entre dos objetos cuando uno de ellos crea al otro, es decir, ejecuta su
constructor. Evidentemente la instanciacin supone una situacin de agregacin o asociacin entre ambos
objetos, pero se distingue de ellas para sealar aquellos casos en los que la relacin entre ambos objetos
viene dada, principal o exclusivamente, por este hecho.

Dpto. Informtica.

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

6.

Conceptos y herramientas de Anlisis y Diseo orientado a objetos.

UML es una notacin estndar para desarrollo de sistemas usando el enfoque orientado a objeto. UML
comenz en 1994 como un esfuerzo de Grady Booch y James Rumbaugh para combinar sus metodologas
definiendo una notacin estndar para ellas. Despus, en 1995, Ivar Jacobson (tcnica OOSE , incluyendo
Casos de Uso) se uni al equipo. Paralelamente a este esfuerzo, el Object Management Group
(www.omg.org) hizo una llamada para propuestas de notacin y metamodelo orientado a objetos. En
enero de 1997 UML fue entregado.
UML es slo una notacin, no dicta estndares para el proceso de desarrollo. Sin embargo, UML
condiciona dicho proceso de desarrollo al establecer los diagramas e informacin asociada que debe
representarse. Los diagramas incluidos en UML, agrupados segn su mbito de aplicacin, son:
Anlisis en el contexto organizacional:
Diagramas de Casos de Uso
Anlisis y diseo desde la perspectiva esttica
Diagrama de Clase
Diagrama de Objetos
Anlisis y diseo desde la perspectiva dinmica
Diagrama de Secuencia
Diagrama de Colaboracin
Diagrama de Estados
Implementacin
Diagrama de Componentes.
Diagrama de Despliegue.
Existen diferentes herramientas que nos permiten documentar las fases del anlisis y diseo OO, una de
ellas es Rational Rose.

Diagrama de Objetos y diagrama de Clases


El diagrama de Clases es el diagrama principal para el anlisis y diseo esttico. Un diagrama de clases
presenta las clases del sistema con sus relaciones estructurales y de herencia. La definicin de clase
incluye definiciones para atributos y mtodos.
El trabajo realizado en los diagramas de Casos de Uso, diagramas de Secuencia y diagramas de
Colaboracin debera aportar informacin para la determinacin de las clases, objetos, atributos y
mtodos. El diagrama de Clases es la especificacin de requisitos en su aspecto esttico.
La notacin de ambos tipos de diagramas, objetos y clases, es similar. La diferencia es el nivel de
abstraccin en el cual se trabaja. Normalmente, al principio del desarrollo, cuando an no est decidido
qu elementos llegarn a ser clases, objetos o datos elementales, se puede modelar dichos elementos
como objetos. Sin embargo cuando se establece la solucin todos los elementos estn claramente
diferenciados y representados en diagramas de clases (que tambin podran incluir representaciones para
objetos, cuando slo una instancia participa en el sistema).

Dpto. Informtica.

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

Rational Rose proporciona slo un tipo de diagrama, denominado Class


Diagram. La Toolbox asociada se muestra en la figura de la derecha. Se
activa pulsando en

Para agregar atributos a la clase se pulsa con el botn derecho sobre la clase y New Attribute.
Para agregar mtodos a la clase se pulsa con el botn derecho sobre la clase y New Operation.
La siguiente figura presenta un diagrama de Clases para un sistema de Lneas areas.

Motor

Piloto

1..4

Vendedor
1

1..2

1
Avin 1

*
Vuelo 1
*

*
Reserva
*

{di sjunta,com p leta}

Avin Militar

Avin Comercial

1
Linea Area

{disjunta,com pl eta}

Avin de Carga

Avin Pasajeros

Clases
Una clase se representa como un rectngulo con tres compartimentos separados por lneas horizontales:
en el superior se muestra el nombre de la clase, en el siguiente se presenta la lista de atributos de la clase,
a continuacin se muestran los mtodos. Cada atributo o mtodo de una clase es antecedido por un
indicador de visibilidad (privada, publica, protegida).

Asociaciones
Son relaciones bidireccionales entre instancias de clases. En una asociacin, una instancia de una clase
puede estar relacionada con un nmero mnimo y mximo instancias de otra clase o de la misma clase.
Estos nmeros se denominan cardinalidad de la asociacin. La notacin para cardinalidad de las
asociaciones y relaciones en diagramas de Clase UML es:

Dpto. Informtica.

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

Uno y slo uno:


1
Cero o uno:
0..1
Uno o ms:
1..*
Cero o ms:
0..*
Entre N y M : N..M , donde N y M son nmeros naturales y M N.
Para dibujarlas en el diagrama, se pulsa con el botn derecho sobre la asociacin en el lado del cual se
quiera poner la cardinalidad y en el men emergente sobre Multiplicity. Se ha de repetir la operacin en
cada lado de la asociacin. Para quitar el sentido de la flecha de la asociacin, se pulsa con el botn
derecho y se deshabilita la opcin Navigable.

Agregaciones
Las agregaciones tambin se pueden representar mediante Rational Rose. Un ejemplo sera la asociacin
entre Avin y Motor. Se entiende que para el diagrama que se ha hecho solo interesa guardar informacin
de los motores de aviones que tengamos en activo. Cuando eliminemos un avin, tambin se deber
borrar toda la informacin relativa a sus motores.

Generalizacin
La generalizacin es un operador entre clases que permite representar la herencia. Las subclases estn
conectadas a las superclases mediante el smbolo hereda desde. La siguiente figura muestra un ejemplo
de una jerarqua de generalizacin. En dicha figura, Empleado es una generalizacin de Administrativo,
Ejecutivo y Operario, por tanto las subclases heredan las propiedades de la superclase Empleado.
Empleado
{d isjo int, c o m ple te }

Directivo

Administrativo

Obrero

Cada jerarqua o cada conexin de subclase puede estar etiquetada con alguna restriccin a cumplir por
las instancias de la subclase. Las siguientes son las restricciones predefinidas usadas para jerarquas:
Overlapping: un objeto puede pertenecer a ms de una de las subclases.
Disjoint: un objeto puede pertenecer a lo ms a una de las subclases.
Complete: la unin de los objetos instancias de las subclases corresponde exactamente a los objetos
instancia de la superclase.
Incomplete: un objeto instancia de la superclase puede no pertenecer a ninguna de las subclases
declaradas

Dpto. Informtica.

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

7.

Crear o definir una clase en Visual Basic.Net. 1

Al igual que existen instrucciones para declarar o definir una variable o cualquier otro elemento de un
programa de Visual Basic, existen instrucciones que nos permiten crear o definir una clase.
Para crear una clase debemos usar la instruccin Class seguida del nombre que tendr dicha clase, por
ejemplo:
Class Cliente

A continuacin escribiremos el cdigo que necesitemos para implementar las propiedades y mtodos de
esa clase, pero para que Visual Basic sepa que ya hemos terminado de definir la clase, usaremos una
instruccin de cierre:
End Class

Por tanto, todo lo que est entre Class <nombre> y End Class ser la definicin de dicha clase.

Definir los miembros de una clase


Para definir los miembros de una clase, escribiremos dentro del "bloque" de definicin de la clase, las
declaraciones y procedimientos que creamos convenientes.
Veamos un ejemplo:
Class Cliente
Public Nombre As String
Sub Mostrar()
Msgbox("El nombre del cliente: {0}", Nombre)
End Sub
End Class

En este caso, la lnea Public Nombre As String, estara definiendo una propiedad o "campo" pblico de la
clase Cliente.
Por otro lado, el procedimiento Mostrar sera un mtodo de dicha clase, en esta caso, nos permitira
mostrar la informacin contenida en la clase Cliente.
Esta es la forma ms simple de definir una clase. Y normalmente lo haremos siempre as, por tanto
podemos comprobar que es muy fcil definir una clase, as como los miembros de dicha clase.
Pero no slo de clases vive el Visual Basic... o lo que es lo mismo, para que nos sirve una clase si no
sabemos crear un objeto basado en esa clase...? As que, sepamos cmo crearlos.

Crear un objeto a partir de una clase


Como te he comentado antes, las clases definen las caractersticas y la forma de acceder a los datos que
contendr, pero slo eso: los define.
Para que podamos asignar informacin a una clase y poder usar los mtodos de la misma, tenemos que
crear un objeto basado en esa clase, o lo que es lo mismo: tenemos que crear una nueva instancia en la
memoria de dicha clase.
1

Apartado adapatado de los temas preparados por Guillermo Som Cerezo.

Dpto. Informtica.

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

Para ello, haremos lo siguiente:


Definimos una variable capaz de contener un objeto del tipo de la clase, esto lo haremos como con
cualquier variable:
Dim cli As Cliente

Pero, a diferencia de las variables basadas en los tipos visto hasta ahora, para poder crear un objeto
basado en una clase, necesitamos algo ms de cdigo que nos permita "crear" ese objeto en la memoria,
ya que con el cdigo usado en la lnea anterior, simplemente estaramos definiendo una variable que es
capaz de contener un objeto de ese tipo, pero an no existe ningn objeto en la memoria, para ello
tendremos que usar el siguiente cdigo:
cli = New Cliente()

Con esto le estamos diciendo al Visual Basic: crea un nuevo objeto en la memoria del tipo Cliente.
Estos dos pasos los podemos simplificar de la siguiente forma:
Dim cli As New Cliente()

A partir de este momento existir en la memoria un objeto del tipo Cliente.

Acceder a los miembros de una clase


Para acceder a los miembros de una clase (propiedades o mtodos) usaremos la variable que apunta al
objeto creado a partir de esa clase, seguida de un punto y el miembro al que queremos acceder, por
ejemplo, para asignar el nombre al objeto cli, usaremos este cdigo:
cli.Nombre = "Guillermo"

Es decir, de la misma forma que haramos con cualquier otra variable, pero indicando el objeto al que
pertenece dicha variable.
Como podrs comprobar, esto ya lo hemos estado usando anteriormente tanto en la clase Console como
en las otras clases que hemos usado en entregas anteriores, incluyendo los arrays.
Y para acceder al mtodo Mostrar:
cli.Mostrar()

Pues as es todo lo dems en .NET Framework, as que... para que seguir explicndote?
Bueno, vale... seguiremos viendo ms cosas...
Espero que con lo dicho y lo que ya llevamos visto hasta ahora, tengas claro que son las propiedades y los
mtodos y si an tienes dudas, no te preocupes ya que ahondaremos ms en estos conceptos y sobre todo
los utilizaremos hasta la saciedad, con lo cual puedes tener la tranquilidad de que acabars enterndote al
100% de que va todo esto...
A pesar de que an no ests plenamente informado de todo, vamos a ver un par de ejemplos de cmo usar
las caractersticas de la programacin orientada a objetos, despus, en prximas entregas,
profundizaremos ms.

Dpto. Informtica.

10

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

Ejemplo de cmo usar la herencia


Para poder usar la herencia en nuestras clases, debemos indicar al Visual Basic que esa es nuestra
intencin, para ello disponemos de la instruccin Inherits, la cual se usa seguida del nombre de la clase de
la que queremos heredar.
Veamos un ejemplo.
Empezaremos definiendo una clase "base" la cual ser la que heredaremos en otra clase.
Ya sabemos cmo definir una clase, aunque para este ejemplo, usaremos la clase Cliente que vimos
anteriormente, despus crearemos otra, llamada ClienteMoroso la cual heredar todas las caractersticas
de la clase Cliente adems de aadirle una propiedad a esa clase derivada de Cliente.
Veamos el cdigo de estas dos clases.
Para ello crea un nuevo proyecto del tipo consola y escribe estas lneas al principio o al final del fichero
que el IDE aade de forma predeterminada.
Class Cliente
Public Nombre As String
Sub Mostrar()
Console.WriteLine("El nombre del cliente: {0}", Nombre)
End Sub
End Class
Class ClienteMoroso
Inherits Cliente
Public Deuda As Decimal
End Class

Como puedes comprobar, para que la clase ClienteMoroso herede la clase Cliente, he usado Inherits
Cliente, con esta lnea, (la cual debera ser la primera lnea de cdigo despus de la declaracin de la
clase), le estamos indicando al VB que nuestra intencin es poder tener todas las caractersticas que la
clase Cliente tiene.
Haciendo esto, aadiremos a la clase ClienteMoroso la propiedad Nombre y el mtodo Mostrar, aunque
tambin tendremos la nueva propiedad que hemos aadido: Deuda.
Ahora vamos a ver cmo podemos usar estas clases, para ello vamos a aadir cdigo en el procedimiento
Main del mdulo del proyecto:
Module Module1
Sub Main()
Dim cli As New Cliente()
Dim cliM As New ClienteMoroso()
'
cli.Nombre = "Guille"
cliM.Nombre = "Pepe"
cliM.Deuda = 2000
'
Console.WriteLine("Usando Mostrar de la clase Cliente")
cli.Mostrar()
'
Console.WriteLine("Usando Mostrar de la clase
ClienteMoroso")
cliM.Mostrar()
'

Dpto. Informtica.

11

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

Console.WriteLine("La deuda del moroso es: {0}",


cliM.Deuda)
'
Console.ReadLine()
End Sub
End Module

Lo que hemos hecho es crear un objeto basado en la clase Cliente y otro basado en ClienteMoroso.
Le asignamos el nombre a ambos objetos y a la variable cliM (la del ClienteMoroso) le asignamos un
valor a la propiedad Deuda.
Fjate que en la clase ClienteMoroso no hemos definido ninguna propiedad llamada Nombre, pero esto es
lo que nos permite hacer la herencia: heredar las propiedades y mtodos de la clase base. Por tanto
podemos usar esa propiedad como si la hubisemos definido en esa clase. Lo mismo ocurre con los
mtodos, el mtodo Mostrar no est definido en la clase ClienteMoroso, pero si que lo est en la clase
Cliente y como resulta que ClienteMoroso hereda todos los miembros de la clase Cliente, tambin hereda
ese mtodo.
La salida de este programa sera la siguiente:
Usando Mostrar de la clase Cliente
El nombre del cliente: Guille
Usando Mostrar de la clase ClienteMoroso
El nombre del cliente: Pepe
La deuda del moroso es: 2000

Como puedes ver no es tan complicado esto de la herencia...


Ahora veamos cmo podramos hacer uso del polimorfismo o al menos una de las formas que nos permite
el .NET Framework.
Teniendo ese mismo cdigo que define las dos clases, podramos hacer lo siguiente:
Sub Main()
Dim cli As Cliente
Dim cliM As New ClienteMoroso()
'
cliM.Nombre = "Pepe"
cliM.Deuda = 2000
cli = cliM
'
Console.WriteLine("Usando Mostrar de la clase Cliente")
cli.Mostrar()
'
Console.WriteLine("Usando Mostrar de la clase
ClienteMoroso")
cliM.Mostrar()
'
Console.WriteLine("La deuda del moroso es: {0}",
cliM.Deuda)
'
Console.ReadLine()
End Sub

En este caso, la variable cli simplemente se ha declarado como del tipo Cliente, pero no se ha creado un
nuevo objeto, simplemente hemos asignado a esa variable el contenido de la variable cliM.
Dpto. Informtica.

12

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

Con esto lo que hacemos es asignar a esa variable el contenido de la clase ClienteMoroso, pero como
comprenders, la clase Cliente "no entiende" nada de las nuevas propiedades implementadas en la clase
derivada, por tanto slo se podr acceder a la parte que es comn a esas dos clases: la parte heredada de la
clase Cliente.
Realmente las dos variables apuntan a un mismo objeto, por eso al usar el mtodo Mostrar se muestra lo
mismo. Adems de que si hacemos cualquier cambio a la propiedad Nombre, al existir slo un objeto en
la memoria, ese cambio afectar a ambas variables.
Para comprobarlo, aade este cdigo antes de la lnea Console.ReadLine():
Console.WriteLine()
cli.Nombre = "Juan"
Console.WriteLine("Despus de asignar un nuevo nombre a
cli.Nombre")
cli.Mostrar()
cliM.Mostrar()

La salida de este nuevo cdigo, sera la siguiente:


Usando Mostrar de la clase Cliente
El nombre del cliente: Pepe
Usando Mostrar de la clase ClienteMoroso
El nombre del cliente: Pepe
La deuda del moroso es: 2000
Despus de asignar un nuevo nombre a cli.Nombre
El nombre del cliente: Juan
El nombre del cliente: Juan

La parte en gris es lo que se mostrara antes de realizar el cambio.


Como puedes comprobar, al cambiar en una de las variables el contenido de la propiedad Nombre, ese
cambio afecta a las dos variables, pero eso no es porque haya nada mgico ni ningn fallo, es por lo que
te coment antes: slo existe un objeto en la memoria y las dos variables acceden al mismo objeto, por
tanto, cualquier cambio efectuado en ellas, se reflejar en ambas variables por la sencilla razn de que
slo hay un objeto en memoria.
A este tipo de variables se las llama variables por referencia, ya que hacen referencia o apuntan a un
objeto que est en la memoria. A las variables que antes hemos estado viendo se las llama variables por
valor, ya que cada una de esas variables tienen asociado un valor que es independiente de los dems.

Resumiendo.
Hemos visto las condiciones que un lenguaje debe cumplir para que sea considerado orientado a objetos:
herencia, encapsulacin y polimorfismo. Tambin hemos aprendido a definir una clase y a derivar una
clase a partir de otra por medio de la instruccin Inherits. Ya sabemos cmo definir variables cuyo tipo
sea una clase y cmo crear nuevos objetos en memoria a partir de una clase. Tambin hemos comprobado
que el que exista ms de una variable del tipo de una clase no significa que exista un objeto independiente
para cada una de esas variables y por ltimo hemos comprobado que son las variables por referencia y
cmo afectan a los objetos referenciados por ellas.

Dpto. Informtica.

13

Desarrollo de Aplicaciones Informticas


- Visual Basic.Net .

8.

Ejercicios.

1) Identificar clases con sus atributos y mtodos para representar la informacin de una agenda musical.
Principalmente centrandose en grupos, musicos y discos.
2) Identificar clases con sus atributos y mtodos para representar la informacin de descargas de videos,
juegos. Peliculas, etc.
3) Identificar clases con sus atributos y mtodos para representar la informacin de un polideportivo
municipal. Se deber erflejar informacin sobre usuarios, actividades, instalaciones,...

Dpto. Informtica.

14

Anda mungkin juga menyukai