1

Anuncio
1
1. Introduccion

Miembros de la clase


Los elementos de una clase que contienen sus datos y
definen su comportamiento, es decir, las propiedades y
métodos, reciben además el nombre de miembros de la
clase, término que también utilizaremos a partir de ahora.
Definir la información de la clase


Existen dos formas de almacenar los datos o información
en una clase: a través de campos de clase y de
propiedades.
El uso de campos o propiedades para una clase es una
cuestión de diseño, no pudiendo afirmar categóricamente
que un tipo de almacenamiento de datos sea mejor que
otro.
2
Campos
Public Class BankAccount
 Private
Adding abalance
data member
named
As Double
balance
End Class
Keyword
Definition
Public
Totalmente accesible
Private
Accesible soló dentro de el mismo
3
Propiedades


Una propiedad en la clase se define, por norma
general, mediante dos elementos: una variable de
propiedad y un procedimiento de propiedad.
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. Por su parte el procedimiento de
propiedad o 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.
4
Propiedades
Private customerName As String
Public Property Name( ) As
String
Get
Return customerName
End Get
Set(ByVal Value As String)
customerName = Value
End Set
End Property
5
Propiedades

Pueden crearse propiedades de solo lectura
o escritura


Public ReadOnly Property
Public WriteOnly Property
6
Propiedades

Propiedades virtuales

Otra de las ventajas del uso de propiedades
reside en la posibilidad de definir propiedades
virtuales; es decir, una propiedad que no tenga
una correspondencia directa con una variable de
propiedad, ya que podemos crear un
procedimiento Property que no esté
obligatoriamente asociado con una variable.
7
Propiedades

Propiedades predeterminadas




Una propiedad predeterminada o por defecto, es aquella
que nos permite su manipulación omitiendo el nombre.
Para establecer una propiedad como predeterminada en
una clase, la variable de propiedad asociada deberá ser un
array, pudiendo crear sólo una propiedad predeterminada
por clase.
Al declarar una propiedad por defecto, deberemos utilizar
al comienzo de la sentencia de declaración, la palabra
clave Default.
Para asignar y obtener valores de este tipo de propiedad,
tendremos que utilizar el índice del array que internamente
gestiona la propiedad.
8
Métodos

Para crear un método en una clase
debemos escribir un procedimiento de
tipo Sub o Function, en función de si
necesitamos devolver o no, un valor
desde el método.
9
Métodos


La sobrecarga de métodos, es una técnica
que consiste en crear varios métodos con
idéntico nombre dentro de la misma clase,
distinguiéndose entre sí por su lista de
parámetros.
Para declarar un método como
sobrecargado, debemos utilizar la palabra
clave Overloads después del modificador de
ámbito. Podemos sobrecargar métodos de
tipo Sub y Function.
10
Constructores

Introduccion


El primer método que es ejecutado al instanciar
un objeto de la clase se denomina constructor.
Este tipo de método resulta útil para tareas de
configuración iniciales sobre el objeto.
No es necesario escribir un método constructor
en la clase, ya que en el caso de que no exista, el
compilador se encarga de crearlo implícitamente.
11
Constructores

Introduccion


Admite parámetros
Puede sobrecargarse
12
Herencia

Introduccion

VB.NET es la primera versión de este lenguaje
que incorpora herencia, una característica
demandada por un amplio colectivo de los
programadores de esta herramienta; y es que, a
pesar de haber sido incorporados
progresivamente aspectos de orientación a
objetos al lenguaje, este era el elemento
fundamental que faltaba para ser plenamente
OOP.
13
Herencia

Introduccion

Para crear una clase derivada, debemos declarar
una nueva clase, especificando cuál es su clase
base mediante la palabra clave Inherits.
14
Herencia

Reglas de ambito




Public: dicho elemento será accesible por todo el código de
la clase, clases heredadas y código cliente;
Private, ese miembro sólo será accesible por el código de
la propia clase.
Protected Un miembro de clase declarado con este
modificador, será accesible desde el código de su propia
clase y desde cualquier clase heredada.
Friend Un miembro de clase declarado con este
modificador, será accesible por todo el código de su
proyecto o ensamblado.
15
Herencia

Sobrecarga de métodos

Podemos sobrecargar métodos existentes en una
clase base dentro de una clase derivada, para
ello simplemente escribimos la implementación
del método sobrecargado utilizando la palabra
clave Overloads,
16
Herencia

Sobrecarga de métodos

Acceso a los métodos de la clase base:MyBase:

proporciona acceso a los miembros de una clase base
desde su correspondiente subclase.
17
Herencia

Sobre-escritura de métodos



Esta técnica consiste en la capacidad de crear, en una
clase derivada, un método que altere parcial o totalmente,
la implementación ya existente de dicho método en la
clase base.
Una de las diferencias existentes con la sobrecarga de
métodos, estriba en que al sobrescribir, el método en la
subclase puede tener el mismo nombre y lista de
parámetros que el ya existente en la clase padre.
Podemos sobrescribir tanto métodos como propiedades.
18
Herencia

Sobre-escritura de métodos




Para indicar en la clase base que un método podrá ser
sobrescrito en una subclase, debemos declarar dicho
método utilizando la palabra clave Overridable.
Posteriormente, cuando en una clase derivada queramos
rescribir el método de la clase base, lo declararemos
empleando la palabra clave Overrides.
Podemos deducir por lo tanto, que la reescritura de
métodos es un proceso que se debe realizar con el
consentimiento previo de la clase base.
Se puede utilizar cualquier método de la clase padre
usando la palabra clave MyBase
19
Herencia

Ocultamiento de miembros de una clase


Esta técnica consiste en crear dentro de una
clase derivada, miembros con el mismo nombre
(y firma,en el caso de métodos) que los existentes
en la clase base, pero ocultando el acceso a los
miembros de la clase base para los objetos
instanciados de la subclase.
Utilizaremos la palabra clave Shadows, en la
declaración de aquellos miembros a esconder.
20
Herencia

Constructores.




Podemos crear una clase base que implemente un
constructor y una subclase sin él. En esta
situación,cuando instanciemos un objeto de la subclase,
se llamará implícitamente al constructor de la clase base
para ejecutar el código de inicialización.
También es posible crear el constructor sólo en la clase
derivada.
Si ambas clases disponen de un constructor, en primer
lugar se ejecutará el constructor de la clase base y
después el de la clase derivada.
Realmente, el primer constructor ejecutado corresponde a
la clase Object, y sucesivamente, se irán ejecutando
todos los constructores de la jerarquía de clases hasta
llegar a la clase que originó la llamada.
21
Herencia

Constructores.

El problema sobreviene cuando en la clase base
creamos un constructor parametrizado, ya que
ello obliga a sus clases derivadas a crear
también un método constructor dentro del cuál
se haga una llamada al constructor de la clase
base.
22
Herencia

Clases selladas:


si no queremos que nuestra clase pueda ser
heredada por otras, debemos declararla de
forma que no permita herencia; a este tipo de
clase se le denomina clase no heredable o
sellada (sealed).
Para definir una clase no heredable, debemos
utilizar la palabra clave NotInheritable
23
Herencia

Clases abstractas o no instanciables



Una clase abstracta es aquella que no permite la
instanciación directa de objetos a partir de ella, siendo
necesario una clase derivada para acceder a sus
miembros.
Aunque en una clase abstracta podemos escribir un
método constructor, sólo será accesible desde el
constructor de la subclase.
Para definir una clase abstracta utilizaremos la palabra
clave MustInherit en el momento de su declaración,
24
Comprobación del tipo de un
objeto y moldeado

Usando Objetos Genericos(Object)


GetType( ) nos permite saber el tipo de objeto
que es. Devuelve un objeto de la clase Type.
CType( ), que realiza un moldeado de la variable
que contiene el objeto hacia un tipo determinado,
y nos permite acceder a los elementos del
objeto.
25
Miembros compartidos
(shared) de una clase

Podemos pues clasificar los miembros de
una clase en dos categorías:


Miembros de instancia (instance members).
Son aquellos a los que accedemos a través de
un objeto instanciado previamente de la clase.
Miembros compartidos (shared members).
Son aquellos a los que podemos acceder sin
necesidad de que exista un objeto creado de la
clase.
26
Miembros compartidos
(shared) de una clase


Podemos declarar como compartidos los
métodos, propiedades y campos de una
clase. Para ello deberemos emplear la
palabra clave Shared en la declaración.
Para utilizar desde el código cliente un
miembro compartido, tan sólo debemos
poner el nombre de la clase a la que
pertenece, el punto y el nombre del miembro
a utilizar.
27
Destrucción de objetos y
recolección de basura

En VB6


La destrucción de objetos y liberación de recursos en está
basada en una técnica que mantiene un contador interno
de las referencias que en el código cliente hay
establecidas hacia un objeto; cuando la última referencia
es eliminada, se ejecuta su evento Terminate( )
Este sistema de destrucción se denomina finalización
determinista, ya que nos permite saber el momento
preciso en el que un objeto es destruido.
28
Destrucción de objetos y
recolección de basura

En Net

no utiliza conteo de referencias, sino que en su
lugar, implementa un sistema de búsqueda y
eliminación de objetos que ya no están siendo
utilizados, denominado recolección de basura
(garbage collection).
29
Destrucción de objetos y
recolección de basura

En Net


Como ya hemos mencionado, el recolector de basura
funciona de modo automático; no obstante, si en un
determinado momento queremos forzar su uso, la
jerarquía de .NET nos provee de la clase GC (Garbage
Collector), que representa al objeto recolector, pudiendo
manipularlo a través de sus miembros compartidos.
Por ejemplo, si necesitamos que se efectúe la recolección
de objetos que no estén siendo utilizados ejecutaríamos
el método Collect( ) de este objeto
30
Destrucción de objetos y
recolección de basura

En Net


En .NET Framework los objetos disponen de métodos
finalizadores. Para implementar este tipo de miembro en
nuestras clases, escribiremos un método con el nombre
Finalize( ), de ámbito Protected, que sobrescriba y llame
al finalizador de su clase padre.
Cuando asignamos Nothing a un objeto, o la variable que
lo contiene pierde su ámbito y es eliminada, transcurre un
tiempo que no es posible determinar hasta que el objeto
es definitivamente destruido.
31
Interfaces

Concepto:



análogo al de contrato, las partes integrantes son el
propio interfaz y la clase que lo implementa. Mientras que
el interfaz no puede ser cambiado desde el momento en
que sea implementado, la clase que lo implementa se
compromete a crear la lista de miembros en la misma
forma que indica el interfaz
Un interfaz proporciona, a modo de declaración, una lista
de propiedades y métodos, que posteriormente serán
codificados en una o varias clases.
Debido a su naturaleza declarativa, un interfaz no
contiene el código de los miembros que expresa;dicho
código será escrito en las clases que implementen el
interfaz.
32
Interfaces

Concepto:

Clara relación con el polimorfismo. El mismo
interfaz, implementado en distintas clases, podrá
tener a su vez código distinto, con lo que los
objetos de diferentes clases que implementen un
interfaz común, pueden tener un comportamiento
diferente.
33
Interfaces

Pasos:

Declaro Interface:

Public Interface miinte


miembros
End Interface
34
Interfaces

Pasos:


En las clases que vamos a utilizar las
definiciones de la interfaz emplearemos después
de la declaración de la clase, la palabra clave
Implements junto al nombre del interfaz que
deseamos que implemente la clase.
Para implementar un miembro de un interfaz, en
el momento de escribir su declaración,
utilizaremos la palabra clave Implements,
seguida del interfaz y miembro que implementa.
35
Eventos y Delegados

Eventos:

Definición:


Un evento es una señal que comunica a una aplicación
que ha sucedido algo importante
dentro de una aplicación, una notificación lanzada por
un objeto, que podrá ser respondida por aquellos otros
objetos interesados en darle soporte.
36
Eventos y Delegados

Eventos:

El emisor de eventos

Un emisor de eventos, también denominado origen de
eventos (event source o event sender), es un objeto
capacitado para generar y lanzar eventos al sistema,
que puedan ser recuperados por otros objetos
preparados para realizar su tratamiento.
37
Eventos y Delegados

Eventos:

El emisor de eventos

Para que un objeto pueda desencadenar eventos, en
su clase debemos realizar dos tareas:

Declarar el propio evento usando la palabra clave Event,
especificando si es necesario una lista de parámetros que
acompañan al evento.
 Los eventos se declaran en clases, estructuras,
módulos e interfaces mediante la palabra clave Event,
como se muestra en el siguiente ejemplo:
 Event AnEvent(ByVal EventNumber As Integer)
38
Eventos y Delegados

Eventos:

El emisor de eventos

dos tareas:


Lanzar el evento mediante la palabra clave RaiseEvent,
seguida del nombre del evento a disparar. Si hemos
declarado el evento con parámetros, deberemos añadir
los valores para cada uno de los parámetros en el mismo
orden en el que los hemos declarado.
En Visual Basic .NET, los eventos se producen con la
instrucción RaiseEvent, como en el ejemplo siguiente:
 RaiseEvent AnEvent(EventNumber)
39
Eventos y Delegados

Eventos:

El receptor de eventos

Un receptor de eventos, también denominado
manipulador de eventos (event receiver o event
handler), es aquella parte del código cliente, que
configuramos para que sea capaz de recibir los
eventos generados por un objeto emisor.
40
Eventos y Delegados

Eventos:

El receptor de eventos


Conexión de un emisor de eventos con un manipulador
de eventos
Existen dos medios para comunicar un evento con un
manipulador de eventos:


mediante las palabras clave WithEvents y Handles. Esta técnica
tiene la ventaja de que permite escribir un código mucho más
legible, en cuanto a la manipulación de eventos se refiere.
mediante la palabra clave AddHandler. La ventaja en este caso,
es que podemos asociar procedimientos manipuladores de
evento dinámicamente durante el transcurso de la ejecución del
programa.
41
Eventos y Delegados

Eventos:

El receptor de eventos

WithEvents y Handles.


Es el modo más sencillo para implementar la conexión
entre un evento y un procedimiento manipulador de
evento.
En primer lugar, declaramos una variable del tipo de
objeto cuyos eventos queremos capturar, en la zona de
declaraciones del módulo, clase, etc., utilizando la palabra
clave WithEvents.(no puede ser local)
42
Eventos y Delegados

Eventos:

El receptor de eventos WithEvents y Handles.

A continuación, tenemos que escribir el procedimiento
manipulador, que será invocado cada vez que se
dispare el evento.


Dicho procedimiento debe ser de tipo Sub, ya que un
evento no puede devolver valores, por lo que no
podremos utilizar un Function;
también debemos finalizar su declaración con la
palabra clave Handles, seguida del nombre de la
variable del objeto que hemos declarado en la zona de
declaraciones, y el nombre del evento que el
procedimiento va a tratar.
43
Eventos y Delegados

Eventos:

El receptor de eventos AddHandler


El enlace dinámico de eventos a sus correspondientes
manipuladores, tiene la ventaja de que nos permite
asociar el mismo evento a diferentes procedimientos
manipuladores de dicho evento, durante el transcurso
de la ejecución del programa.
El objeto sobre el que vamos a manipular sus eventos
podemos declararlo tanto a nivel local como en la zona
de declaraciones, a diferencia del enlace estático,
44
Eventos y Delegados

Eventos:

El receptor de eventos AddHandler


Para establecer un enlace dinámico entre un evento y
un manipulador, utilizaremos la instrucción AddHandler.
Esta instrucción, recibe dos parámetros


NombreObjeto.NombreEvento.
La dirección de entrada al procedimiento que deberá
ejecutar el evento, y que obtenemos a través de la
instrucción AddressOf.
45
Eventos y Delegados

Delegados:



Definición:es un objeto al que otros objetos ceden
(delegan) la ejecución de su código. También se conocen
como punteros a función con seguridad de tipos.
Los delegados son útiles en situaciones donde es
necesario un intermediario entre el procedimiento que
realiza una llamada y el procedimiento que la recibe
Al instanciar un delegado, se asocia con un método de
instancia o compartido de un objeto, y posteriormente,
durante la ejecución, será el delegado el que se encargue
de ejecutar dicho método y no el propio objeto. También
se pueden asociar los delegados con procedimientos Sub
o Function de módulos.
46
Eventos y Delegados

Delegados:

Declaración:


Para declarar un delegado, debemos utilizar la palabra
clave Delegate, seguida del tipo de método (Sub o
Function) al que posteriormente deberemos asociar el
delegado; y finalmente, el nombre del delegado con la
lista de parámetros y valor de retorno si es necesario.
El lugar de declaración debe ser la zona de
declaraciones de la clase o módulo.
47
Eventos y Delegados

Delegados:

Creación de delegados:



declaramos una variable correspondiente al tipo del
delegado. A continuación, conectamos el delegado con el
procedimiento que posteriormente deberá ejecutar,
empleando la palabra clave AddressOf, seguida del nombre
del procedimiento.
AddressOf devuelve el puntero o dirección de entrada al
procedimiento, que será lo que utilice el delegado para saber
la ubicación del procedimiento que debe ejecutar.
Por último, para ejecutar el procedimiento al que apunta el
delegado, llamaremos a su método Invoke( ).
48
Eventos y Delegados

Delegados:

Creación de delegados:


Si delegamos un procedimiento que admite
parámetros, a la hora de invocarlo con el delegado,
debemos pasar al método Invoke( ) los valores de los
parámetros, en el mismo orden que especifica el
procedimiento.
En el caso de delegación hacia funciones, cuando
invoquemos el código con el delegado, deberemos
obtener el valor de retorno de la función.
49
Descargar