Sesion 02 clases en_vb_net

Preview:

DESCRIPTION

Mi web: riverasn.p.ht

Citation preview

Programación Orientada a Objetos

Microsoft Visual Basic .Net

Objeto

Un objeto es una agrupación de código, compuesta de propiedades y métodos, que pueden ser manipulados como una entidad independiente.

Propiedad:

Las propiedades definen los datos o información del objeto, permitiendo consultar o modificar su estado.

Métodos:

Son las rutinas que definen su comportamiento.

Clases

Es el conjunto de especificaciones o normas que definen cómo va a ser creado un objeto de un tipo determinado.

Instancia de un objeto:

El proceso por el cuál se obtiene un objeto a partir de las especificaciones de una clase se conoce como instanciación de objetos.

Características básicas de un sistema orientado a objetos

Abstracción:

Es aquella característica que nos permite identificar un objeto a través de sus aspectos conceptuales.

Ejm. 1. Dos objetos automóvil, 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 clase automóvil, porque realizamos una abstracción o identificación mental de los elementos comunes que ambos tienen (ruedas, volante, motor, puertas, etc.)

Características básicas de un sistema orientado a objetos

Ejm. 2. 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.

Características básicas de un sistema orientado a objetos

Encapsulación:

Establece la separación entre la interfaz del objeto y su implementación, aportándonos dos ventajas fundamentales.

Proporciona seguridad al código de la clase, evitando accesos y modificaciones no deseadas.

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.

Características básicas de un sistema orientado a objetos

Encapsulación:

Ejm. 1. Cuando nosotros utilizamos un objeto automóvil, al presionar el acelerador, no necesitamos conocer la mecánica interna que hace moverse al coche, sabemos que el método Acelerar del automóvil es lo que tenemos que utilizar para desplazarnos, y simplemente lo usamos.

Características básicas de un sistema orientado a objetos

Encapsulación:

Ejm. 2. Si estamos creando un programa de gestión y nos proporcionan un objeto Cliente que tiene el método Agregar, y sirve para añadir nuevos clientes a la b/d, no precisamos conocer el código que contiene dicho método, simplemente lo ejecutamos y Añadimos a los clientes en nuestra aplicación.

Características básicas de un sistema orientado a objetos

Polimorfismo:

Determina que el mismo nombre de método, realizará diferentes acciones según el objeto sobre el que sea aplicado.

Ejm. 1. Tomamos dos objetos: Pelota y VasoCristal; si ejecutamos sobre ambos el método Tirar, el resultado en ambos caso será muy diferente; mientras que el objeto Pelota rebotará al llegar al suelo, el objeto VasoVidrio se romperá.

Características básicas de un sistema orientado a objetos

Polimorfismo:

Ejm. 2. Supongamos que disponemos de los objetos Ventana y Archivo; 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 Archivo, se tomará un archivo en el equipo del usuario y se dejará listo para realizar sobre él operaciones de lectura o escritura.

Características básicas de un sistema orientado a objetos

Herencia:

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 de la clase hija, que escribamos para extender sus funcionalidades.

Características básicas de un sistema orientado a objetos

Herencia:

Ejm. 1. Podemos usar la clase Automóvil 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 AutoDeportivo, en la cual, además de todas las características mencionadas para la clase Automóvil, encontramos propiedades y comportamientos específicos como Turbo.

Definir una clase Para definir una clase de emplea, la palabra clave Class.

Public Class cCliente

„ Miembros de clase

End Class

Una clase puede contener cualquiera de estos elementos (miembros):

Enumeraciones

Campos

Métodos (funciones o procedimientos)

Propiedades

Eventos

Atributos

Los Atributos de clase se representan mediante Campos o Propiedades.

Los campos se implementan mediante variables públicas que se pueden leer y establecer directamente desde el exterior de la clase.

Public Nombre As String

Las Propiedades se recuperan y establecen como los Campos.

Atributos Las Propiedades se implementan mediante procedimientos Property Get y Property Set.

Private strNombre AS String

Property Nombre() As String

Get

Return strNombre

End Get

Set (ByVal Value As String)

strNombre=Value

End Set

End Property

El procedimiento Get devuelve el valor, mientras que Procedimiento Set le asigna el valor a la Propiedad.

Métodos

Se implementan mediante procedimientos o subrutinas (Sub) y funciones (Function) declarados dentro de una clase

Function Saludo() As String

If Nombre<>”” Then

Return “Hola “ & Nombre

Else

Return “Hola Mundo”

End If

End Function

Constructores y Destructores

Son métodos especiales que se emplean para la inicialización del objeto durante su construcción, y la limpieza del mismo durante su destrucción.

El Constructor se define con el procedimiento New.

Sub New (Nombre As String)

strNombre=Nombre

End Sub

El Destructor mediante el procedimiento Finalize.

Overrides Protected Sub Finalize()

Creación y Destrucción de Objetos

Para crear un objeto se usa la cláusula New

Private mCliente AS cCliente

mCliente = New cCliente()

También se puede realizar ambas operaciones

Private mCliente As New cCliente()

otra forma

Private mCliente As cCliente=New cCliente()

Si el constructor admite parámetros

mCliente=New cCliente(“Luz”,18)

No se puede Destruir, pero si invocar el método Dispose.

mCliente.Dispose()

Eventos

Se utilizan para notificar a los objetos sobre la ocurrencia de alguna situación especial.

Se agregan a la clase con la instrucción Events.

Event MiEvento(ByVal Sender As _ System.Object, ByVal NumEvento As Integer)

Para conseguir que se produzca el evento, se debe utilizar RaiseEvent.

RaiseEvent MiEvento(Me, NumEvento)

Eventos

Para consumir un evento se necesita asociar de manera explicita el evento a un método (procedimiento) controlador de evento (event handler) para lo cual se utiliza la clausula Handles en combinación con Withevents.

Friend WithEvents Button1 As System.Windows.Forms.Button

Protect Sub Button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button1.Click

End Sub

Eventos

También se puede asociar un evento a un método controlador de evento con la instrucción AddHandler que permite que un evento pueda asignarse a cualquier número de controladores de eventos.

AddHandler MyObject.Event1, AddressOf Me.MyEventHandler

Los métodos que controlan determinados eventos pueden modificarse de manera dinámica, si se utiliza en conjunto con la instrucción RemoveHandler, que remueve la asociación entre un evento y su controlador.

RemoveHandler MyObject.Event1, AddressOf Me.MyEventHandler

CREACIÓN DE UNA CLASE

Ejecutar Microsoft Visual Studio y crear un nuevo Proyecto.

Diseñe el siguiente Formulario.

txtIdentificador btnDatos

CREACIÓN DE UNA CLASE

Seleccione el la opción Proyecto del menú principal lo siguiente:

Seleccionar Clase

Ingresar el nombre

de la clase:

Empleado.vb

Agregar la clase

Se mostrara lo siguiente:

Creación de campos para la clase

Un campo de una clase no es otra cosa que una variable, generalmente con ámbito público, accesible desde el exterior de la clase.

El siguiente código muestra la creación de un campo para la clase Empleado.

Creación de campos para la clase

Para manipular un campo desde código cliente, debemos instanciar un objeto, a continuación de la variable que lo contiene situar un punto ( . ), y finalmente el nombre del campo a manipular.

Creación de propiedades para la clase

Una propiedad en la clase se define, por norma general, mediante dos elementos: una variable de propiedad y un procedimiento de propiedad.

Creación de propiedades para la clase

La variable de propiedad, tal y como su nombre indica, es una variable con ámbito privado a nivel de la clase, que se encarga de guardar el valor de la propiedad.

Creación de propiedades para la clase

El procedimiento de propiedad (Property), es el encargado de actuar de puente entre el código cliente y la variable de propiedad, realizando las operaciones de acceso y asignación de valores a dicha variable.

Creación de propiedades para la clase

Para crear una propiedad en nuestra clase, declararemos en primer lugar una variable Private, y en segundo lugar un procedimiento de tipo Property, que consta de dos bloques:

Get, para devolver el valor de la variable de propiedad.

Set, para asignárselo.

VENTAJAS EN EL USO DE PROPIEDADES

Encapsulación a través de propiedades

Establece que el código de una clase debe permanecer, siempre que sea posible, protegido de modificaciones no controladas del exterior (código cliente).

Nuestra clase debe actuar como una especie de caja negra, que expone una interfaz para su uso, pero no debe permitir el acceso a la implementación de dicha interfaz.

Encapsulación a través de propiedades

Supongamos que en nuestra clase Empleado necesitamos crear un elemento para guardar el sueldo pagado, pero el importe del sueldo deberá estar entre un rango de valores en función de la categoría del empleado.

Categoría Sueldo

1 0650 - 2000

2 2001 - 5000

3 5001 - 10000

4 > 10000

Si abordamos este problema utilizando campos de clase, puede ocurrir lo que mostramos a continuación.

¿Qué esta sucediendo? Hemos creado un objeto Empleado al que le hemos dado Categoría 1, sin embargo le estamos asignando un sueldo que no corresponde a su categoría, pero se nos permite hacerlo sin ningún problema, ya que no existe un medio de control que nos lo impida.

Afrontando el problema mediante el uso de propiedades, contamos con la ventaja de escribir código de validación en los correspondientes procedimientos Property, con ello encapsulamos el código de la clase, manteniendo a salvo las asignaciones incoherentes.

Propiedades de sólo lectura o sólo escritura

Se nos plantea un nuevo caso para nuestra clase Empleado, debemos guardar el valor del código de cuenta bancaria del empleado en el objeto, pero sin permitir que dicha información sea accesible desde el código cliente.

Igualmente y en función de los primeros dígitos de la cuenta bancaria, necesitamos mostrar el nombre de la entidad, pero sin permitir al código cliente su modificación, ya que esta va a ser siempre una operación que debe calcular el código de la clase.

Utilizando campos de clase no es posible resolver esta situación, ya que al ser de ámbito público, permiten tanto la escritura como lectura de sus valores.

Pero si empleamos propiedades, estas nos permiten la creación de las denominadas propiedades de sólo lectura o sólo escritura, en las que utilizando las palabras clave ReadOnly y WriteOnly, conseguimos que a una determinada propiedad, sólo podamos asignarle o recuperar su valor.

Debido a esto, en una propiedad ReadOnly no podremos escribir el bloque Set, ya que no tendría sentido, puesto que no se va a utilizar.

Lo mismo podemos aplicar para una propiedad WriteOnly, sólo que en esta, el bloque que no podremos codificar será Get.