Sesion 02 clases en_vb_net
-
Upload
santos-rivera-lujan -
Category
Education
-
view
209 -
download
0
description
Transcript of Sesion 02 clases en_vb_net
![Page 1: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/1.jpg)
Programación Orientada a Objetos
Microsoft Visual Basic .Net
![Page 2: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/2.jpg)
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.
![Page 3: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/3.jpg)
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.
![Page 4: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/4.jpg)
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.)
![Page 5: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/5.jpg)
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.
![Page 6: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/6.jpg)
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.
![Page 7: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/7.jpg)
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.
![Page 8: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/8.jpg)
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.
![Page 9: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/9.jpg)
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á.
![Page 10: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/10.jpg)
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.
![Page 11: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/11.jpg)
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.
![Page 12: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/12.jpg)
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.
![Page 13: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/13.jpg)
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
![Page 14: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/14.jpg)
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.
![Page 15: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/15.jpg)
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.
![Page 16: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/16.jpg)
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
![Page 17: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/17.jpg)
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()
![Page 18: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/18.jpg)
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()
![Page 19: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/19.jpg)
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)
![Page 20: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/20.jpg)
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
![Page 21: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/21.jpg)
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
![Page 22: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/22.jpg)
CREACIÓN DE UNA CLASE
Ejecutar Microsoft Visual Studio y crear un nuevo Proyecto.
Diseñe el siguiente Formulario.
txtIdentificador btnDatos
![Page 23: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/23.jpg)
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
![Page 24: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/24.jpg)
Se mostrara lo siguiente:
![Page 25: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/25.jpg)
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.
![Page 26: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/26.jpg)
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.
![Page 27: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/27.jpg)
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.
![Page 28: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/28.jpg)
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.
![Page 29: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/29.jpg)
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.
![Page 30: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/30.jpg)
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.
![Page 31: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/31.jpg)
![Page 32: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/32.jpg)
VENTAJAS EN EL USO DE PROPIEDADES
![Page 33: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/33.jpg)
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.
![Page 34: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/34.jpg)
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
![Page 35: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/35.jpg)
Si abordamos este problema utilizando campos de clase, puede ocurrir lo que mostramos a continuación.
![Page 36: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/36.jpg)
![Page 37: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/37.jpg)
![Page 38: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/38.jpg)
¿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.
![Page 39: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/39.jpg)
![Page 40: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/40.jpg)
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.
![Page 41: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/41.jpg)
![Page 42: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/42.jpg)
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.
![Page 43: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/43.jpg)
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.
![Page 44: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/44.jpg)
![Page 45: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/45.jpg)
![Page 46: Sesion 02 clases en_vb_net](https://reader034.fdocument.pub/reader034/viewer/2022052301/5599db1f1a28ab085e8b45fe/html5/thumbnails/46.jpg)