Pongo a continuación un resumen de los atributos principales del
lenguaje Visual Basic .NET así como de
su utilización en programación orientada a Objetos. Este artículo
contiene los siguientes puntos:
Definiciones Generales:
Constantes.
Variables static.
Namespaces.
Punto de entrada al
programa.
Clases.
Reglas de ámbito de las clases.
Código de clase y código de cliente.
Propiedades de la clase. (Encapsulación).
Propiedades
virtuales.
Propiedades
de sólo lectura o sólo escritura.
Me
y MyClass.
Sobrecarga
de Métodos. (Polimorfismo)
Enlaces
(Binding) de variables a referencias de objetos.
Herencia.
Reglas
de ámbito.
Herencia
y sobrecarga de métodos.
MyBase.
Herencia
y sobreescritura de métodos.
Herencia y métodos constructores.
Clases selladas no heredables.
Clases abstractas o no instanciables.
Comprobación del tipo de un objeto y Moldeado (Casting).
Miembros compartidos (Shared) de una clase.
Destrucción de Objetos y recolección de basura.
Interfaces.
Estructuras.
Enumeraciones.
Herencia y métodos constructores.
Clases selladas no heredables.
Clases abstractas o no instanciables.
Comprobación del tipo de un objeto y Moldeado (Casting).
Miembros compartidos (Shared) de una clase.
Destrucción de Objetos y recolección de basura.
Interfaces.
Estructuras.
Enumeraciones.
Definiciones
generales
Option Explicit On exige la
declaración de variables
Option Strict On exige
tipificación de variables y conversión explícita de tipos, es muy útil para que salten en tiempo de diseño errores que luego
saltarían en tiempo de ejecución.
Option Compare Binary comparación por valores binarios de caracteres, opción por
defecto a <> A
Option Compare
Text comparación
por valor textual, a= A
Paso por valor
(ByVal parametro As Integer) copia de la variable
Paso por referencia (ByRef parametro As Integer) dirección de la variable
Constantes
#Const nombre = "valor"
Variables Static
Retienen su valor al finalizar el procedimiento en el que han sido
declaradas, si salimos y volvemos a entrar, no se inicializan.
Static Dim
Importe As Integer
Namespaces
Organizan las clases dentro del entorno, agrupándolas de un modo lógico
y jerárquico.
Namespace EspacioDeNombres
Public Class clase1
End Class
Public
Class clase2
End Class
…
…
Public Class claseN
End Class
End Namespace
Para acceder desde otro código a este namespace:
Imports Nombre_espacio.Nombre_clase
Por ejemplo los namespaces del sistema.
Imports System.Windows.Forms
También es posible acceder a los espacios de nombres de otros
ensamblados.
Para acceder a una clase de
un namespace diferente si no hacemos el import también se puede incluir
el namespace en su declaración.
Namespace espacio2
Public Class CClase2
Public Sub Metodo1(ByVal
pieza As Object)
Dim
variable As New
espacio1.CClase1
variable.Nombre = "Juan"
End Sub
End Class
End Namespace
Punto de
entrada al programa
Public Sub
main()
…
…
End Sub
Clases
Método constructor New(), es el primer método que se ejecuta, donde se escribe el código de
inicialización para el objeto.
Public Sub
New(ByVal
NombreParametro As String)
…
…
End Sub
Código de
clase y código de cliente
El Código de clase, es el código que escribimos para crear nuestra
clase
Public Class
CNombreclase
…
End Class
El código
cliente, es el código que hace uso de la clase, creando o instanciando objetos
a partir de la misma.
Dim m_persona As
CPersona
m_persona = New
CPersona("José
García")
Propiedades
de la clase. (Encapsulación)
Los datos y método de la clase se encapsulan con el objetivo de que
se puedan usar desde el exterior pero no sea necesario conocer ni tocar lo que
hay dentro de la clase.
Una clase contiene variables que se encapsulan como propiedades, y
contiene métodos que también se encapsulan.
La encapsulación de una variable se realiza del siguiente modo:
Dentro de la definición de clase
se escribe.
Public Class CNombreclase
Private m_nombre As String = ""
Public Property
Nombre() As String
Get
Return
m_nombre
End Get
Set(ByVal value As String)
m_nombre = value
End Set
End Property
End Class
Esto impedirá que desde fuera de la clase se pueda acceder a la variable
de la clase m_nombre para
ello deberemos acceder a la propiedad Nombre a través de los métodos Get y Set establecidos para ella, en estos métodos
se puede poner código que valide el tipo de datos o realice cualquier otra
validación que deseemos, esto impedirá errores cuando no se introduzcan los
datos correctos.
Desde el código cliente podemos hacer
Nombre_Cliente = New
CNombreClase()
Nombre_Cliente.Nombre = "Nombre a introducir"
De
este modo, cuando pulsemos el punto después de Nombre_Cliente
no se desplegará la variable, pero si la propiedad Nombre de la clase. Esto se
llama encapsulación y previene de asignaciones incoherentes.
Propiedades virtuales
Consiste
en una propiedad que no tiene correspondencia directa con una variable de la
clase, ya que podemos crear el método property sin que esté asociado a una variable.
Public Class CNombreclase
Public ReadOnly Property Mes_Alta() As String
Get
Return
m_mes_alta
End Get
End Property
End Class
Propiedades de sólo lectura o sólo escritura
Sólo
utilizarán la parte Set o Get según proceda.
Public Class CNombreclase
'Sólo lectura
Public ReadOnly Property
Mes_Alta() As String
Get
Return
m_mes_alta
End Get
End Property
'Sólo escritura
Public WriteOnly Property Nombre() As String
Set(ByVal value As String)
m_nombre = value
End Set
End Property
End Class
Me y MyClass
Se
utiliza para referirse a la propia clase si estoy definiendo código dentro de
ella.
Public Class CNombreclase
Private m_nombre As String = ""
Public Function
Mayusculas() As String
End
Function
Console.writeline(“texto”, me.m_nombre)
Console.writeline(“texto”, myclass.Mayusculas)
End Class
Sobrecarga de Métodos. (Polimorfismo)
Un único nombre de método con diferentes parámetros en cada declaración,
con la llamada distingue cual debe ejecutar.
Para declararlos se pone delante la palabra clave overload.
Public
Overloads Sub Calcular_Sueldo()
' Añadir
código.
End Sub
Public Overloads Sub Calcular_Sueldo (ByVal parametro1 As String)
' Añadir código.
End Sub
Public Overloads Sub Calcular_Sueldo (ByVal parametro1 As String, ByVal
parametro2 As Integer)
' Añadir código.
End Sub
Las listas de parámetros deben ser diferentes en al menos:
-número de parámetros
-orden de los parámetros
-tipo de datos de los parámetros
Enlaces (Binding) de variables a referencias de objetos
El enlace temprano asocia la variable con el objeto en tiempo de diseño.
Dim Nombre_Cliente as CNombreClase
Nombre_Cliente = New CNombreClase()
Enlace tardío, asocia la variable con el objeto en tiempo de
ejecución.
Dim Nombre_Cliente as Object
Nombre_Cliente = New CNombreClase()
Herencia
Para crear una clase derivada debemos declarar una nueva clase, especificando
cual es su clase base mediante la palabra clave Inherits.
Public Class CCaballo
Inherits CPieza
CCaballo es hija de CPieza
También se puede poner así
Public Class
Peon : Inherits
Pieza
Reglas de ámbito
Public: Lo ve todo el mundo.
Private: Lo ve sólo la propia clase.
Protected: Lo ve la clase y las clases hijas.
Friend: Un miembro de la clase (variable o método) declarado como friend, será accesible por todo el código de su proyecto o ensamblado.
Friend mVariable as Double
Protected Friend: Serán accesibles desde el código de su clase, clases derivadas, y por
todo el código que se encuentre dentro de su ensamblado.
Herencia y
sobrecarga de métodos
Podemos sobrecargar métodos existentes en una clase dentro de una clase
derivada. Utilizamos la palabra clave Overloads.
Public Class CEmpleado
Public Sub CalcularIncentivos
End Sub
End Class
Public Class CAdministrativo: Inherits CEmpleado
Public Overloads sub CalcularIncentivos (ByVal iHoras as integer)
End Sub
End Class
MyBase
Proporciona acceso a los miembros de una clase base desde su
correspondiente subclase.
Public Class CAdministrativo: Inherits CEmpleado
MyBase.CalcularIncentivos()
Herencia y sobreescritura de métodos
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.
Puede tener el mismo nombre y clase de parámetros. Se utiliza la
palabra clave Overridable en la clase base y Overrides en las clases derivadas.
'Método padre vacio, se definirá en cada clase derivada
Public Overridable
Function Mover(ByVal
NuevaPos As String)
As Boolean
Me.Posicion
= NuevaPos
Return True
End Function
En las clases derivadas se
pone:
Public Overrides
Function Mover(ByVal
NuevaPos As String)
As Boolean
Me.Posicion = NuevaPos
'Aquí se implementa el código que se desee
Return True
End Function
Herencia y métodos constructores
Podemos
crear una clase base con constructor y una subclase sin él.
Si
ambos disponen de constructor , se ejecutará primero el de la clase base y
luego el de la clase derivada.
Si el
constructor de la clase está parametrizado, el contructor de las clases
derivadas deberá llamar al de la clase base con my
base.
Friend Class CEmpleado
Public Sub New(ByVal IsNombre As String)
End Sub
End Class
Friend Class CAdministrativo
Inherits CEmpleado
Public Sub New()
MyBase.New("Juan")
End Sub
End Class
Podemos
evitarlo creando una sobrecarga de métodos sin parámetros.
Clases selladas no heredables
Si
no queremos que nuestra clase pueda ser heredada, debemos usar NotInheritable.
Public NotInheritable Class CEmpleado
End Class
Clases abstractas o no instanciables
Una clase abstracta es aquella que no permite la instanciación
directa de objetos a partir de ella, siendo necesaria una clase derivada para
acceder a sus miembros. Usaremos MustInherit.
Public MustInherit Class CEmpleado
End Class
Dentro de una clase abstracta podemos implementar propiedades y métodos. Podemos
obligar a que determinados miembros sean sobreescritos por la clase heredada;
son los denominados miembros abstractos, y se declaran usando la palabra clave MustOverride.
Public MustOverride Sub MesesActivo()
Comprobación del tipo de un objeto y Moldeado (Casting)
En
algunas circunstancias puede ser útil codificar un procedimiento que reciba
como parámetro un objeto genérico, y dependiendo del tipo de objeto, ejecutar
ciertos métodos.
GetType() Devuelve el tipo de un objeto
CType() Convierte una variable que contiene el objeto al
tipo del objeto.
Miembros compartidos (Shared) de una clase
Son miembros
que no precisan de una instancia previa de un objeto de la clase para ser
utilizados, aunque también pueden ser usados por una instancia de la clase. Así
por tanto hay:
Miembros
de Instancia. (los de Siempre)
Miembros
compartidos . Podemos acceder a ellos sin necesidad de que exista un objeto
creado de la clase. Emplearemos la palabra Shared .
Public Shared
Sub RangoMoverPieza(ByVal
sender As Object)
Para
definir una clase como punto de entrada de la aplicación:
Public Shared
Sub Main()
Destrucción de Objetos y recolección
de basura
Si necesitamos que se efectúe la recolección de objetos que no estén
siendo utilizados, ejecutaríamos el método collect() aunque se
recomienda no abusar de su utilización.
Interfaces
Proporcionan una lista de propiedades y métodos que posteriormente
serán codificados en una o varias clases.
Estructuras
Son similares a las clases, pero las usaremos para tipos definidos por el usuario, para grandes funcionalidades
debemos usar clases.
Public
Structure DatosBanco
End
Structure
Enumeraciones
Consiste en un conjunto de constantes relacionadas.
Delegados
Es un objeto al que otros objetos ceden (delegan) la ejecución de su
código, se conocen como punteros a función con seguridad de tipos.
Public Delegate Sub VerMensaje()
Seguidamente en un procedimiento declaramos una variable del tipo del
delegado y conectamos el delegado con el procedimiento que deberá ejecutar
empleando la palabra clave AddressOf del nombre del delegado.
Sub
main()
Dim
LoDelegTexto As VerMensaje
LoDelegTexto = AddressOf
RangoMoverPieza(False)
End
Sub
No hay comentarios:
Publicar un comentario