SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
Taller de aplicaciones
                                                                    de escritorio

                                                                                                  2010

                                                                                            III CICLO

        TALLER DE APLICACIONES DE ESCRITORIO – VISUAL BASIC .NET

Objetivos:
   • Conocer los conceptos básicos de programación orientada a objetos.
   • Conocer la creación de objetos y clases.
                                      WINDOWS FORMS

1.- La programación orientada a objetos

Todo .NET Framework está basado en clases (u objetos). A diferencia de las versiones anteriores de
Visual Basic, la versión .NET de este lenguaje basa su funcionamiento casi exclusivamente en las clases
contenidas en .NET Framework, además casi sin ningún tipo de limitaciones. Debido a esta
dependencia en las clases del .NET Framework y sobre todo a la forma "hereditaria" de usarlas, Visual
Basic .NET tenía que ofrecer esta característica sin ningún tipo de restricciones.

Aunque no soy muy dado a esto de las cosas teóricas, vamos a ver de qué va todo esto de la
programación orientada a objetos y cuáles son las "condiciones" que cualquier lenguaje que se precie
de serlo debe cumplir.

Los tres pilares de la Programación Orientada a Objetos

Según se dice por ahí, cualquier lenguaje basado en objetos debe cumplir estos tres requisitos:

   1.   Abstracción
   2.   Herencia
   3.   Encapsulación
   4.   Polimorfismo




Abstracción
La abstracción es aquella característica que nos permite identificar un objeto a través de sus aspectos
conceptuales.
Las propiedades de los objetos de una misma clase, pueden hacerlos tan distintos que sea difícil
reconocer que pertenecen a una clase idéntica. No obstante, nosotros reconocemos a qué clase
pertenecen, identificando además, si se trata de la misma clase para ambos. Ello es posible gracias a la
abstracción.
Tomemos como ejemplo dos objetos coche, uno deportivo y otro familiar; su aspecto exterior es muy
diferente, sin embargo, cuando pensamos en cualquiera de ellos, sabemos que ambos pertenecen a la
PROF. MARIO ANTONIO HUAPALLA MORALES                                                                     1
clase Coche, porque realizamos una abstracción o identificación mental de los elementos comunes que
ambos tienen (ruedas, volante, motor, puertas, etc.).
Del mismo modo que hacemos al identificar objetos reales, la abstracción nos ayuda a la hora de
desarrollar una aplicación, permitiéndonos identificar los objetos que van a formar parte de nuestro
programa, sin necesidad de disponer aún de su implementación; nos basta con reconocer los aspectos
conceptuales que cada objeto debe resolver.
Por ejemplo, cuando abordamos el desarrollo de un programa de gestión orientado a objetos,
realizamos una abstracción de los objetos que necesitaríamos para resolver los procesos del programa:
un objeto Empleado, para gestionar al personal de la empresa; un objeto Factura, para gestionar las
ventas realizadas de productos; un objeto Usuario, para verificar las personas que utilizan la aplicación,
etc.

Encapsulación
La encapsulación establece la separación entre el interfaz del objeto y su implementación,
aportándonos dos ventajas fundamentales.
Por una parte proporciona seguridad al código de la clase, evitando accesos y modificaciones no
deseadas; una clase bien encapsulada no debe permitir la modificación directa de una variable, ni
ejecutar métodos que sean de uso interno para la clase.
Por otro lado la encapsulación simplifica la utilización de los objetos, ya que un programador que use
un objeto, si este está bien diseñado y su código correctamente escrito, no necesitará conocer los
detalles de su implementación, se limitará a utilizarlo.
Tomando un ejemplo real, cuando nosotros utilizamos un objeto Coche, al presionar el acelerador, no
necesitamos conocer la mecánica interna que hace moverse al coche, sabemos que el método Acelerar
del coche es lo que tenemos que utilizar para desplazarnos, y simplemente lo usamos.
Pasando a un ejemplo en programación, si estamos creando un programa de gestión y nos
proporcionan un objeto Cliente que tiene el método Alta, y sirve para añadir nuevos clientes a la base
de datos, no precisamos conocer el código que contiene dicho método, simplemente lo ejecutamos y
damos de alta a los clientes en nuestra aplicación.

Polimorfismo
El polimorfismo determina que el mismo nombre de método, realizará diferentes acciones según el
objeto sobre el que sea aplicado. Al igual que sucedía en la encapsulación, el programador que haga
uso del objeto, no necesita conocer los detalles de implementación de los métodos, se limita a
utilizarlos.
Pasando a un ejemplo real, tomamos dos objetos: Pelota y VasoCristal; si ejecutamos sobre ambos el
método Tirar, el resultado en ambos casos será muy diferente; mientras que el objeto Pelota rebotará
al llegar al suelo, el objeto VasoCristal se romperá.
En un ejemplo aplicado a la programación, supongamos que disponemos de los objetos Ventana y
Fichero; si ejecutamos sobre ambos el método Abrir, el resultado en Ventana será la visualización de
una ventana en el monitor del usuario; mientras que en el objeto Fichero, se tomará un fichero en el
equipo del usuario y se dejará listo para realizar sobre él operaciones de lectura o escritura.




PROF. MARIO ANTONIO HUAPALLA MORALES                                                                    2
Herencia
Se trata de la característica más importante de la OOP, y establece que partiendo de una clase a la que
denominamos clase base, padre o superclase, creamos una nueva clase denominada clase derivada,
hija, o subclase. En esta clase derivada dispondremos de todo el código de la clase base, más el nuevo
código propio de la clase hija, que escribamos para extender sus funcionalidades.
A su vez podemos tomar una clase derivada, creando una nueva subclase a partir de ella, y así
sucesivamente, componiendo lo que se denomina una jerarquía de clases, que explicaremos
seguidamente.
Existen dos tipos de herencia: simple y múltiple. La herencia simple es aquella en la que creamos una
clase derivada a partir de una sola clase base, mientras que la herencia múltiple nos permite crear una
clase derivada a partir de varias clases base. El entorno de .NET Framework sólo permite utilizar
herencia simple.
Como ejemplo real de herencia, podemos usar la clase Coche como clase base; en ella reconocemos
una serie de propiedades como Motor, Ruedas, Volante, etc., y unos métodos como Arrancar,
Acelerar, Frenar, etc. Como clase derivada creamos CocheDeportivo, en la cuál, además de todas las
características mencionadas para la clase Coche, encontramos propiedades y comportamiento
específicos como ABS, Turbo, etc.
Un ejemplo basado en programación consistiría en disponer de la ya conocida clase Empleado. Esta
clase se ocupa, como ya sabemos, de las operaciones de alta de empleados, pago de nóminas, etc.;
pero en un momento dado, surge la necesidad de realizar pagos a empleados que no trabajan en la
central de la empresa, ya que se trata de comerciales que pasan la mayor parte del tiempo
desplazándose. Para realizar dichos pagos usaremos Internet, necesitando el número de tarjeta de
crédito y la dirección email del empleado. Resolveremos esta situación creando la clase derivada
CiberEmpleado, que hereda de la clase Empleado, en la que sólo tendríamos que añadir las nuevas
propiedades y métodos para las transacciones electrónicas, puesto que las operaciones tradicionales
ya las tendríamos disponibles por el mero hecho de haber heredado de Empleado.

Jerarquías de clases
Como decíamos en un apartado anterior, uno de los fines de la OOP consiste en la clasificación del
código; para ello se emplean jerarquías o árboles de clases, en los que a base de niveles, se muestra un
conjunto de clases conectadas por una relación de herencia. Observemos el esquema de la Figura 192,
en el que se muestra un ejemplo de la jerarquía de clases de medios de transporte.




PROF. MARIO ANTONIO HUAPALLA MORALES                                                                   3
Creación de clases
Volvamos al ejemplo expuesto al comienzo de este tema, en el cuál, habíamos dejado a nuestro
programador desarrollando los procesos de un empleado dentro de una aplicación de gestión
empresarial. Recordemos que se planteaba el problema de que ante el crecimiento del programa, el
mantenimiento del código, al enfocarse de modo procedural, podía volverse una tarea realmente
difícil.
Vamos a replantear este diseño, encauzándolo bajo una perspectiva orientada a objeto, que nos
permita un uso más sencillo del código y un mantenimiento también más fácil. Para lo cual
desarrollaremos una clase que contenga todas las operaciones a realizar por el empleado; en
definitiva, crearemos la clase Empleado, cuyo proceso describiremos a continuación.
Podemos escribir una clase en VB.NET utilizando diferentes tipos de aplicación, en este caso
emplearemos una aplicación de consola. Iniciaremos en primer lugar VS.NET, creando un proyecto de
tipo consola. A continuación seleccionaremos el menú Proyecto + Agregar clase, que nos mostrará la
ventana para agregar nuevos elementos al proyecto. El nombre por defecto asignado por el IDE para la
clase será Class1; cambiaremos dicho nombre por Empleado, y pulsaremos Abrir.




PROF. MARIO ANTONIO HUAPALLA MORALES                                                               4
Se creará de esta forma un nuevo fichero de código (EMPLEADO.VB), mostrándose el editor de código
con su contenido. Observemos en este sentido, que la definición de una clase se realiza utilizando las
palabras clave Class...End Class; entre estas palabras escribiremos el código de la clase.

Public Class Empleado
End Class


2.- Creación de un Objeto Por Referencia e Instancia.
Se referencia al objeto hacia una variable:
Dim Variable as [Objeto]
Creando el objeto o Instanciandolo:
Variable = New [Objeto]
1.2 Creación de un Objeto Por Referencia e Instancia a la vez.
Se referencia e instancia a la vez:
Dim Variable as New [Objeto]
Una vez creado el objeto se puede hacer uso de sus métodos y propiedades.
Ejemplo:




PROF. MARIO ANTONIO HUAPALLA MORALES                                                                     5
Acá se muestra que el objeto solo es referenciado por lo tanto se producirá una excepción que el
objeto no fue instanciado.
Si ahora instanciamos el objeto veremos que no produce ninguna excepción.

3.- Uso de Clases en .NET
Como vimos en los laboratorios anteriores, los tipos de datos se dividen en dos grupos: tipos por valor
y tipos por referencia. Los tipos por referencia realmente son clases, de la cuales debemos crear una
instancia para poder usarlas, cuando instanciamos una clase esta se crea en la parte lejana de la
memoria llamada heap, y las variables que la contienen solo hacen una referencia a la dirección de su
ubicación en la que la CLR ha almacenado el objeto recién creado.
En el .NET Framework la mayor parte a usar será una clase, la creación de formularios, la creación de
módulos, y las clases mismas etc., toda estas se grabaran con la extensión vb si usamos como lenguaje
predeterminado Visual Basic, para C# la extensión sera .cs.




PROF. MARIO ANTONIO HUAPALLA MORALES                                                                  6
4.- Object: La clase base de todas las clases de .NET
Las clases existentes en la biblioteca de clases del .NET Framework, derivan de una clase principal
llamada object, es decir así lo indiquemos o no cualquier clase que definamos o usemos tendrá el
comportamiento
Todas las clases de .NET se derivan de la clase Object, es decir, lo indiquemos o no, cualquier clase que
definamos tendrá el comportamiento heredado de esa clase. El uso de la clase Object como base del
resto de las clases de .NET es la única excepción a la herencia simple soportada por .NET, ya que de
forma implícita, todas las clases de .NET se derivan de la clase Object independientemente de que
estén derivadas de cualquier otra.
De los miembros que tiene la clase Object debemos resaltar el método ToString, este método está
pensado para devolver una representación en formato cadena de un objeto.




5.- Definir una clase
En Visual Basic 2005, todo el código que queramos escribir, lo tendremos que hacer en un fichero con
la extensión .vb, dentro de ese fichero es donde escribiremos nuestro código, el cual, tal como dijimos
anteriormente siempre estará incluido dentro de una clase, aunque un fichero de código de VB puede
contener una o más clases, es decir, no está limitado a una clase por fichero.
En Visual Basic 2005 las clases se definen usando la palabra clave Class seguida del nombre de la clase,
esa definición acaba indicándolo con End Class.




6.- Los miembros de una clase
Una clase puede contener cualquiera de estos elementos (miembros):
• Enumeraciones
• Campos
• Métodos (funciones o procedimientos)
• Propiedades
• Eventos
Aquí una breve descripción:
Los campos
Son variables usadas para mantener los datos que la clase manipulará.
Los métodos
Son las acciones que la clase puede realizar, normalmente esas acciones serán sobre los datos que
contiene. Dependiendo de que el método devuelva o no un valor, podemos usar métodos de tipo

PROF. MARIO ANTONIO HUAPALLA MORALES                                                                    7
Function o de tipo Sub respectivamente.
Las propiedades
Son las "características" de las clases y la forma de acceder "públicamente" a los datos que contiene.
Por ejemplo, podemos considerar que el nombre y los apellidos de un cliente son dos características
del cliente.
Los eventos
Son mensajes que la clase puede enviar para informar que algo está ocurriendo en la clase.
Esquema de una Clase:
Public Class Empleados
Dim Codigo As Integer
Public bEstado As Boolean
Private sCta As String
Public Property Cuenta()
Get
Return sCta
End Get
Set(ByVal value)
sCta = value
End Set
End Property
Public Function BuscaEMpleado(ByVal _codigo As Integer) As String
Return "Felipe Castañeda"
End Function
End Class
Uso de la clase:




7.- Creación de Procedimientos Sobre Cargados
La sobrecarga de funciones (tanto para funciones como para procedimientos Sub), es una
característica que nos permite tener una misma función con diferentes tipos de parámetros, ya sea en
número o en tipo.




PROF. MARIO ANTONIO HUAPALLA MORALES                                                                     8
Supongamos que queremos tener dos funciones (o más) que nos permitan hacer operaciones con
diferentes tipos de datos, y que, según el tipo de datos usado, el valor que devuelva sea de ese mismo
tipo.
Ejemplo de procedimientos sobre cargados:
Sub VerificarDatos()
'Codigo a ejecutar
'.....
'.......................
End Sub
Sub VerificarDatos(ByVal xVar1 As String)
'Codigo a ejecutar
'.....
'.......................
End Sub
Function VerificarDatos(ByVal xVar1 As String, ByVal xVar2 As
Integer) As Boolean
'Codigo a ejecutar
'.....
'.......................
End Function
Sub VerificarDatos(ByVal ParamArray xVar1() As String)
'Codigo a ejecutar
'.....
'.......................
End Sub

Llamada a un Procedimiento Sobre Cargado:



Laboratorio 5
1.- Diseñe el siguiente formulario:




PROF. MARIO ANTONIO HUAPALLA MORALES                                                                 9
2.- Programando:

Public Class Practica01

    Structure alumno
        Public nombre As String
        Public nota As Integer
    End Structure

    Dim aIntegrantes() As alumno
    Dim cContador As Integer

    Private Sub Agregar(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles cmdAgregar.Click
        If Len(Trim(txtNombre.Text)) = 0 Or Len(Trim(txtNota.Text)) = 0 Then
            MessageBox.Show("Faltan datos...", "Error")
            Exit Sub
        End If
        cmdMostrar.Enabled = True
        ReDim Preserve aIntegrantes(cContador)
        aIntegrantes(cContador).nombre = txtNombre.Text
        aIntegrantes(cContador).nota = txtNota.Text
        cContador += 1
        txtNombre.Focus()
    End Sub

    Private Sub Mostrar(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles cmdMostrar.Click
        Dim i As Integer
        lsvDatos.Items.Clear()
        For i = 0 To aIntegrantes.GetUpperBound(0)
            Dim item As New ListViewItem(aIntegrantes(i).nombre)
            item.SubItems.Add(aIntegrantes(i).nota)
            lsvDatos.Items.Add(item)
        Next
    End Sub

    Private Sub Modificar(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles cmdModificar.Click
        If lsvDatos.SelectedItems.Count <> 0 Then
            lsvDatos.SelectedItems(0).SubItems(0).Text = txtNombre.Text
            lsvDatos.SelectedItems(0).SubItems(1).Text = txtNota.Text

             Dim i As Integer
             i = lsvDatos.SelectedItems(0).Index
             aIntegrantes(i).nombre = txtNombre.Text
             aIntegrantes(i).nota = txtNota.Text
         End If

    End Sub

    Private Sub SeleccionLista(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) _
            Handles lsvDatos.SelectedIndexChanged
        If lsvDatos.SelectedIndices.Count = 0 Then Exit Sub
        txtNombre.Text = lsvDatos.SelectedItems(0).SubItems(0).Text
        txtNota.Text = lsvDatos.SelectedItems(0).SubItems(1).Text
    End Sub

    Private Sub Limpiar(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdLimpìar.Click

PROF. MARIO ANTONIO HUAPALLA MORALES                                           10
lsvDatos.Items.Clear()
         cContador = 0
         ReDim aIntegrantes(cContador)
         txtNombre.Clear()
         txtNota.Clear()
         txtNombre.Focus()
         cmdMostrar.Enabled = False
     End Sub

     End Class

Ejercicio:
1.- Diseñe y programe el siguiente formulario:




Conclusiones:
   • Aprendimos el uso y creación de clases, objetos.
   • Aprendimos las Principales característica de la programación orientada a objetos.




PROF. MARIO ANTONIO HUAPALLA MORALES                                                     11

Mais conteúdo relacionado

Mais procurados

Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IEKaren Olan
 
Manual poo-unidad-visual-basic
Manual poo-unidad-visual-basicManual poo-unidad-visual-basic
Manual poo-unidad-visual-basicRaul Hernandez
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetoslindacajaperuiz
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a ObjetosJuan Carlos Riva
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Ezer Ayala Mutul
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetosguest160f88
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOAnabel Jaramillo
 
Curso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic netCurso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic netSauro Ortiz
 
U.T. 3.- Programación Orientada a Objetos. Programación JAVA
U.T. 3.- Programación Orientada a Objetos. Programación JAVAU.T. 3.- Programación Orientada a Objetos. Programación JAVA
U.T. 3.- Programación Orientada a Objetos. Programación JAVAiessanjuanbosco
 

Mais procurados (20)

Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IE
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Manual poo-unidad-visual-basic
Manual poo-unidad-visual-basicManual poo-unidad-visual-basic
Manual poo-unidad-visual-basic
 
UML traducción código PHP
UML traducción código PHPUML traducción código PHP
UML traducción código PHP
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetos
 
Guía Herencia PO_O
Guía Herencia PO_OGuía Herencia PO_O
Guía Herencia PO_O
 
Guía Teórica POO
Guía Teórica POOGuía Teórica POO
Guía Teórica POO
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETO
 
Curso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic netCurso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic net
 
U.T. 3.- Programación Orientada a Objetos. Programación JAVA
U.T. 3.- Programación Orientada a Objetos. Programación JAVAU.T. 3.- Programación Orientada a Objetos. Programación JAVA
U.T. 3.- Programación Orientada a Objetos. Programación JAVA
 
Qué es la poo
Qué es la pooQué es la poo
Qué es la poo
 
8.Clases y objetos Java
8.Clases y objetos Java8.Clases y objetos Java
8.Clases y objetos Java
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Manual c# 2
Manual c# 2Manual c# 2
Manual c# 2
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 
Enclausulamiento java
Enclausulamiento javaEnclausulamiento java
Enclausulamiento java
 

Semelhante a Clase numero 6

Semelhante a Clase numero 6 (20)

Programacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdfProgramacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdf
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Tema nº 1
Tema nº 1Tema nº 1
Tema nº 1
 
Tema nº 1
Tema nº 1Tema nº 1
Tema nº 1
 
PresentacióN1
PresentacióN1PresentacióN1
PresentacióN1
 
Primeros pasos con google course builder
Primeros pasos con google course builderPrimeros pasos con google course builder
Primeros pasos con google course builder
 
Compu 1
Compu 1Compu 1
Compu 1
 
Java desde 0
Java desde 0Java desde 0
Java desde 0
 
mootools y sexyimages
mootools y sexyimagesmootools y sexyimages
mootools y sexyimages
 
Tecnología Orientada A Objetos
Tecnología Orientada A ObjetosTecnología Orientada A Objetos
Tecnología Orientada A Objetos
 
Java desde cero
Java desde ceroJava desde cero
Java desde cero
 
Manual de Java
Manual de JavaManual de Java
Manual de Java
 
Guía1
Guía1Guía1
Guía1
 
Java desde cero
Java desde ceroJava desde cero
Java desde cero
 
MANUAL JAVA
MANUAL JAVA MANUAL JAVA
MANUAL JAVA
 
JAVA
JAVA JAVA
JAVA
 
JAVA 2
JAVA 2JAVA 2
JAVA 2
 
MANUAL DE JAVA
MANUAL DE JAVAMANUAL DE JAVA
MANUAL DE JAVA
 
Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC
 
CursoJava.pdf
CursoJava.pdfCursoJava.pdf
CursoJava.pdf
 

Clase numero 6

  • 1. Taller de aplicaciones de escritorio 2010 III CICLO TALLER DE APLICACIONES DE ESCRITORIO – VISUAL BASIC .NET Objetivos: • Conocer los conceptos básicos de programación orientada a objetos. • Conocer la creación de objetos y clases. WINDOWS FORMS 1.- La programación orientada a objetos Todo .NET Framework está basado en clases (u objetos). A diferencia de las versiones anteriores de Visual Basic, la versión .NET de este lenguaje basa su funcionamiento casi exclusivamente en las clases contenidas en .NET Framework, además casi sin ningún tipo de limitaciones. Debido a esta dependencia en las clases del .NET Framework y sobre todo a la forma "hereditaria" de usarlas, Visual Basic .NET tenía que ofrecer esta característica sin ningún tipo de restricciones. Aunque no soy muy dado a esto de las cosas teóricas, vamos a ver de qué va todo esto de la programación orientada a objetos y cuáles son las "condiciones" que cualquier lenguaje que se precie de serlo debe cumplir. Los tres pilares de la Programación Orientada a Objetos Según se dice por ahí, cualquier lenguaje basado en objetos debe cumplir estos tres requisitos: 1. Abstracción 2. Herencia 3. Encapsulación 4. Polimorfismo Abstracción La abstracción es aquella característica que nos permite identificar un objeto a través de sus aspectos conceptuales. Las propiedades de los objetos de una misma clase, pueden hacerlos tan distintos que sea difícil reconocer que pertenecen a una clase idéntica. No obstante, nosotros reconocemos a qué clase pertenecen, identificando además, si se trata de la misma clase para ambos. Ello es posible gracias a la abstracción. Tomemos como ejemplo dos objetos coche, uno deportivo y otro familiar; su aspecto exterior es muy diferente, sin embargo, cuando pensamos en cualquiera de ellos, sabemos que ambos pertenecen a la PROF. MARIO ANTONIO HUAPALLA MORALES 1
  • 2. clase Coche, porque realizamos una abstracción o identificación mental de los elementos comunes que ambos tienen (ruedas, volante, motor, puertas, etc.). Del mismo modo que hacemos al identificar objetos reales, la abstracción nos ayuda a la hora de desarrollar una aplicación, permitiéndonos identificar los objetos que van a formar parte de nuestro programa, sin necesidad de disponer aún de su implementación; nos basta con reconocer los aspectos conceptuales que cada objeto debe resolver. Por ejemplo, cuando abordamos el desarrollo de un programa de gestión orientado a objetos, realizamos una abstracción de los objetos que necesitaríamos para resolver los procesos del programa: un objeto Empleado, para gestionar al personal de la empresa; un objeto Factura, para gestionar las ventas realizadas de productos; un objeto Usuario, para verificar las personas que utilizan la aplicación, etc. Encapsulación La encapsulación establece la separación entre el interfaz del objeto y su implementación, aportándonos dos ventajas fundamentales. Por una parte proporciona seguridad al código de la clase, evitando accesos y modificaciones no deseadas; una clase bien encapsulada no debe permitir la modificación directa de una variable, ni ejecutar métodos que sean de uso interno para la clase. Por otro lado la encapsulación simplifica la utilización de los objetos, ya que un programador que use un objeto, si este está bien diseñado y su código correctamente escrito, no necesitará conocer los detalles de su implementación, se limitará a utilizarlo. Tomando un ejemplo real, cuando nosotros utilizamos un objeto Coche, al presionar el acelerador, no necesitamos conocer la mecánica interna que hace moverse al coche, sabemos que el método Acelerar del coche es lo que tenemos que utilizar para desplazarnos, y simplemente lo usamos. Pasando a un ejemplo en programación, si estamos creando un programa de gestión y nos proporcionan un objeto Cliente que tiene el método Alta, y sirve para añadir nuevos clientes a la base de datos, no precisamos conocer el código que contiene dicho método, simplemente lo ejecutamos y damos de alta a los clientes en nuestra aplicación. Polimorfismo El polimorfismo determina que el mismo nombre de método, realizará diferentes acciones según el objeto sobre el que sea aplicado. Al igual que sucedía en la encapsulación, el programador que haga uso del objeto, no necesita conocer los detalles de implementación de los métodos, se limita a utilizarlos. Pasando a un ejemplo real, tomamos dos objetos: Pelota y VasoCristal; si ejecutamos sobre ambos el método Tirar, el resultado en ambos casos será muy diferente; mientras que el objeto Pelota rebotará al llegar al suelo, el objeto VasoCristal se romperá. En un ejemplo aplicado a la programación, supongamos que disponemos de los objetos Ventana y Fichero; si ejecutamos sobre ambos el método Abrir, el resultado en Ventana será la visualización de una ventana en el monitor del usuario; mientras que en el objeto Fichero, se tomará un fichero en el equipo del usuario y se dejará listo para realizar sobre él operaciones de lectura o escritura. PROF. MARIO ANTONIO HUAPALLA MORALES 2
  • 3. Herencia Se trata de la característica más importante de la OOP, y establece que partiendo de una clase a la que denominamos clase base, padre o superclase, creamos una nueva clase denominada clase derivada, hija, o subclase. En esta clase derivada dispondremos de todo el código de la clase base, más el nuevo código propio de la clase hija, que escribamos para extender sus funcionalidades. A su vez podemos tomar una clase derivada, creando una nueva subclase a partir de ella, y así sucesivamente, componiendo lo que se denomina una jerarquía de clases, que explicaremos seguidamente. Existen dos tipos de herencia: simple y múltiple. La herencia simple es aquella en la que creamos una clase derivada a partir de una sola clase base, mientras que la herencia múltiple nos permite crear una clase derivada a partir de varias clases base. El entorno de .NET Framework sólo permite utilizar herencia simple. Como ejemplo real de herencia, podemos usar la clase Coche como clase base; en ella reconocemos una serie de propiedades como Motor, Ruedas, Volante, etc., y unos métodos como Arrancar, Acelerar, Frenar, etc. Como clase derivada creamos CocheDeportivo, en la cuál, además de todas las características mencionadas para la clase Coche, encontramos propiedades y comportamiento específicos como ABS, Turbo, etc. Un ejemplo basado en programación consistiría en disponer de la ya conocida clase Empleado. Esta clase se ocupa, como ya sabemos, de las operaciones de alta de empleados, pago de nóminas, etc.; pero en un momento dado, surge la necesidad de realizar pagos a empleados que no trabajan en la central de la empresa, ya que se trata de comerciales que pasan la mayor parte del tiempo desplazándose. Para realizar dichos pagos usaremos Internet, necesitando el número de tarjeta de crédito y la dirección email del empleado. Resolveremos esta situación creando la clase derivada CiberEmpleado, que hereda de la clase Empleado, en la que sólo tendríamos que añadir las nuevas propiedades y métodos para las transacciones electrónicas, puesto que las operaciones tradicionales ya las tendríamos disponibles por el mero hecho de haber heredado de Empleado. Jerarquías de clases Como decíamos en un apartado anterior, uno de los fines de la OOP consiste en la clasificación del código; para ello se emplean jerarquías o árboles de clases, en los que a base de niveles, se muestra un conjunto de clases conectadas por una relación de herencia. Observemos el esquema de la Figura 192, en el que se muestra un ejemplo de la jerarquía de clases de medios de transporte. PROF. MARIO ANTONIO HUAPALLA MORALES 3
  • 4. Creación de clases Volvamos al ejemplo expuesto al comienzo de este tema, en el cuál, habíamos dejado a nuestro programador desarrollando los procesos de un empleado dentro de una aplicación de gestión empresarial. Recordemos que se planteaba el problema de que ante el crecimiento del programa, el mantenimiento del código, al enfocarse de modo procedural, podía volverse una tarea realmente difícil. Vamos a replantear este diseño, encauzándolo bajo una perspectiva orientada a objeto, que nos permita un uso más sencillo del código y un mantenimiento también más fácil. Para lo cual desarrollaremos una clase que contenga todas las operaciones a realizar por el empleado; en definitiva, crearemos la clase Empleado, cuyo proceso describiremos a continuación. Podemos escribir una clase en VB.NET utilizando diferentes tipos de aplicación, en este caso emplearemos una aplicación de consola. Iniciaremos en primer lugar VS.NET, creando un proyecto de tipo consola. A continuación seleccionaremos el menú Proyecto + Agregar clase, que nos mostrará la ventana para agregar nuevos elementos al proyecto. El nombre por defecto asignado por el IDE para la clase será Class1; cambiaremos dicho nombre por Empleado, y pulsaremos Abrir. PROF. MARIO ANTONIO HUAPALLA MORALES 4
  • 5. Se creará de esta forma un nuevo fichero de código (EMPLEADO.VB), mostrándose el editor de código con su contenido. Observemos en este sentido, que la definición de una clase se realiza utilizando las palabras clave Class...End Class; entre estas palabras escribiremos el código de la clase. Public Class Empleado End Class 2.- Creación de un Objeto Por Referencia e Instancia. Se referencia al objeto hacia una variable: Dim Variable as [Objeto] Creando el objeto o Instanciandolo: Variable = New [Objeto] 1.2 Creación de un Objeto Por Referencia e Instancia a la vez. Se referencia e instancia a la vez: Dim Variable as New [Objeto] Una vez creado el objeto se puede hacer uso de sus métodos y propiedades. Ejemplo: PROF. MARIO ANTONIO HUAPALLA MORALES 5
  • 6. Acá se muestra que el objeto solo es referenciado por lo tanto se producirá una excepción que el objeto no fue instanciado. Si ahora instanciamos el objeto veremos que no produce ninguna excepción. 3.- Uso de Clases en .NET Como vimos en los laboratorios anteriores, los tipos de datos se dividen en dos grupos: tipos por valor y tipos por referencia. Los tipos por referencia realmente son clases, de la cuales debemos crear una instancia para poder usarlas, cuando instanciamos una clase esta se crea en la parte lejana de la memoria llamada heap, y las variables que la contienen solo hacen una referencia a la dirección de su ubicación en la que la CLR ha almacenado el objeto recién creado. En el .NET Framework la mayor parte a usar será una clase, la creación de formularios, la creación de módulos, y las clases mismas etc., toda estas se grabaran con la extensión vb si usamos como lenguaje predeterminado Visual Basic, para C# la extensión sera .cs. PROF. MARIO ANTONIO HUAPALLA MORALES 6
  • 7. 4.- Object: La clase base de todas las clases de .NET Las clases existentes en la biblioteca de clases del .NET Framework, derivan de una clase principal llamada object, es decir así lo indiquemos o no cualquier clase que definamos o usemos tendrá el comportamiento Todas las clases de .NET se derivan de la clase Object, es decir, lo indiquemos o no, cualquier clase que definamos tendrá el comportamiento heredado de esa clase. El uso de la clase Object como base del resto de las clases de .NET es la única excepción a la herencia simple soportada por .NET, ya que de forma implícita, todas las clases de .NET se derivan de la clase Object independientemente de que estén derivadas de cualquier otra. De los miembros que tiene la clase Object debemos resaltar el método ToString, este método está pensado para devolver una representación en formato cadena de un objeto. 5.- Definir una clase En Visual Basic 2005, todo el código que queramos escribir, lo tendremos que hacer en un fichero con la extensión .vb, dentro de ese fichero es donde escribiremos nuestro código, el cual, tal como dijimos anteriormente siempre estará incluido dentro de una clase, aunque un fichero de código de VB puede contener una o más clases, es decir, no está limitado a una clase por fichero. En Visual Basic 2005 las clases se definen usando la palabra clave Class seguida del nombre de la clase, esa definición acaba indicándolo con End Class. 6.- Los miembros de una clase Una clase puede contener cualquiera de estos elementos (miembros): • Enumeraciones • Campos • Métodos (funciones o procedimientos) • Propiedades • Eventos Aquí una breve descripción: Los campos Son variables usadas para mantener los datos que la clase manipulará. Los métodos Son las acciones que la clase puede realizar, normalmente esas acciones serán sobre los datos que contiene. Dependiendo de que el método devuelva o no un valor, podemos usar métodos de tipo PROF. MARIO ANTONIO HUAPALLA MORALES 7
  • 8. Function o de tipo Sub respectivamente. Las propiedades Son las "características" de las clases y la forma de acceder "públicamente" a los datos que contiene. Por ejemplo, podemos considerar que el nombre y los apellidos de un cliente son dos características del cliente. Los eventos Son mensajes que la clase puede enviar para informar que algo está ocurriendo en la clase. Esquema de una Clase: Public Class Empleados Dim Codigo As Integer Public bEstado As Boolean Private sCta As String Public Property Cuenta() Get Return sCta End Get Set(ByVal value) sCta = value End Set End Property Public Function BuscaEMpleado(ByVal _codigo As Integer) As String Return "Felipe Castañeda" End Function End Class Uso de la clase: 7.- Creación de Procedimientos Sobre Cargados La sobrecarga de funciones (tanto para funciones como para procedimientos Sub), es una característica que nos permite tener una misma función con diferentes tipos de parámetros, ya sea en número o en tipo. PROF. MARIO ANTONIO HUAPALLA MORALES 8
  • 9. Supongamos que queremos tener dos funciones (o más) que nos permitan hacer operaciones con diferentes tipos de datos, y que, según el tipo de datos usado, el valor que devuelva sea de ese mismo tipo. Ejemplo de procedimientos sobre cargados: Sub VerificarDatos() 'Codigo a ejecutar '..... '....................... End Sub Sub VerificarDatos(ByVal xVar1 As String) 'Codigo a ejecutar '..... '....................... End Sub Function VerificarDatos(ByVal xVar1 As String, ByVal xVar2 As Integer) As Boolean 'Codigo a ejecutar '..... '....................... End Function Sub VerificarDatos(ByVal ParamArray xVar1() As String) 'Codigo a ejecutar '..... '....................... End Sub Llamada a un Procedimiento Sobre Cargado: Laboratorio 5 1.- Diseñe el siguiente formulario: PROF. MARIO ANTONIO HUAPALLA MORALES 9
  • 10. 2.- Programando: Public Class Practica01 Structure alumno Public nombre As String Public nota As Integer End Structure Dim aIntegrantes() As alumno Dim cContador As Integer Private Sub Agregar(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdAgregar.Click If Len(Trim(txtNombre.Text)) = 0 Or Len(Trim(txtNota.Text)) = 0 Then MessageBox.Show("Faltan datos...", "Error") Exit Sub End If cmdMostrar.Enabled = True ReDim Preserve aIntegrantes(cContador) aIntegrantes(cContador).nombre = txtNombre.Text aIntegrantes(cContador).nota = txtNota.Text cContador += 1 txtNombre.Focus() End Sub Private Sub Mostrar(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdMostrar.Click Dim i As Integer lsvDatos.Items.Clear() For i = 0 To aIntegrantes.GetUpperBound(0) Dim item As New ListViewItem(aIntegrantes(i).nombre) item.SubItems.Add(aIntegrantes(i).nota) lsvDatos.Items.Add(item) Next End Sub Private Sub Modificar(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdModificar.Click If lsvDatos.SelectedItems.Count <> 0 Then lsvDatos.SelectedItems(0).SubItems(0).Text = txtNombre.Text lsvDatos.SelectedItems(0).SubItems(1).Text = txtNota.Text Dim i As Integer i = lsvDatos.SelectedItems(0).Index aIntegrantes(i).nombre = txtNombre.Text aIntegrantes(i).nota = txtNota.Text End If End Sub Private Sub SeleccionLista(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles lsvDatos.SelectedIndexChanged If lsvDatos.SelectedIndices.Count = 0 Then Exit Sub txtNombre.Text = lsvDatos.SelectedItems(0).SubItems(0).Text txtNota.Text = lsvDatos.SelectedItems(0).SubItems(1).Text End Sub Private Sub Limpiar(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdLimpìar.Click PROF. MARIO ANTONIO HUAPALLA MORALES 10
  • 11. lsvDatos.Items.Clear() cContador = 0 ReDim aIntegrantes(cContador) txtNombre.Clear() txtNota.Clear() txtNombre.Focus() cmdMostrar.Enabled = False End Sub End Class Ejercicio: 1.- Diseñe y programe el siguiente formulario: Conclusiones: • Aprendimos el uso y creación de clases, objetos. • Aprendimos las Principales característica de la programación orientada a objetos. PROF. MARIO ANTONIO HUAPALLA MORALES 11