Vous êtes sur la page 1sur 44

Visual

Basic.NET
Daniel A. Seara
Director Regional MSDN
Buenos Aires – ARGENTINA
NDSoft
Objetivos
• Introducción a Microsoft Visual Basic .NET
 Nuevos conceptos
 Cambios
• Integración con .NET
• Herramientas
Contenido
• Sección 1: Conceptos generales
• Sección 2: Características del lenguaje
• Sección 3: Integración con .Net
• Sección 4: Uniendo las partes
• Resumen
Sección 1: Generalidades
• Hacer el lenguaje aún más simple de utilizar
 ...al menos, más fácil de aprender
• Corregir algunas cosas del diseño
• Agregar características de orientación a objetos
completa
• Convertirlo en “ciudadano de primera” del
mundo .NET
• ...restringiendo los cambios a lo estrictamente
necesario
Orientación a objetos
• Herencia (Inheritance)
• Sobrecarga (Overloading)
• Interfaces
• Miembros Compartidos
• Constructores e inicializadores
 Sub New()

 anObject = New Class(“Data”, data)

• Eventos orientados a objetos


Conceptos de Herencia
• Reutilización
MiForm Control
 Composición (Tiene-un)
 MiForm Tiene-un Control
 Herencia (Es-un)
 MiForm Es-un EntryForm
• Construyendo Form

jerarquías de tipo
• Versionamiento
FormInic

• Polimorfismo
MiForm

MiNuevoForm
Interfaces
• Declaración de contrato entre las partes
 Permite orientación a componentes
• Define estructura y semánticas para un propósito
específico
• Definición abstracta de método y propiedades
• Soporta herencia (múltiple)
• Ejemplo:
Interface IPersonAge
Property YearOfBirth() As Integer
Function GetAgeToday() As Integer
End Interface
Sección 2: Características
del lenguaje

• “Type System”
• Clases y Herencia
• Manejo de excepciones
• Conceptos de eventos
• Cambios
Type System
• Usa el Sistema de Tipos Comunes de.NET
 No se necesitan conversiones (marshalling) entre
lenguajes
• Cada tipo puede ser un valor o una referencia
 Tipos de valores:
Primitivas, enumeradores, estructuras
 Referencias:
Clases, módulos, interfaces, vectores, delegados, y
cadenas
 Los objetos pueden contener ambas
TODO hereda implícitamente de System.Object
Tipos Primitivos
• Enteros
 Byte (8 bits), Short (16 bits)
 Integer (32 bits), Long (64 bits)
• De Punto flotante
 Single (4 bytes), Double (8 bytes)
• Numéricos exactos
 Decimal (28 digitos) (reemplaza Currency)
• Boolean, Date, Char
• String (¡Tipo por referencia!)
• Bytes con signo, y enteros sin signo no son
soportados
Enumeradores
• Nombre simbólico de un conjunto de
valores
• Definidos específicamente
• Basados en enteros
 Byte, Short, Integer, o Long
 Por defecto, Integer
• Ejemplo: Enum Color As Byte
rojo
verde
azul
End Enum
Vectores
• Derivan de la clase System.Array
• Definidos por tipo y tamaño
Dim OneDimension(10) As Integer
Dim TwoDimensions(20,intVal) As Integer
• Sintaxis declarativa
Dim anArray() As Integer
ReDim anArray(10)

• El límite inferior siempre es cero


• No se soporta tamaño fijo
• La cantidad de dimensiones es fija
Clases
• Concepto para objetos: código y
datos
• Las clases contienen miembros:
 De datos: variables, constantes
 Propiedades: valores que se acceden
por métodos get/set
 Métodos: exponen funcionalidad
 Especiales: eventos, delegados,
constructores, destructores
Herencia 1/2
• Clase base simple, pero con múltiples
interfaces base
Public Class DerivedClass
Inherits BaseClass
Implements IBase1, IBase2
...
End Class
• Clases base abstractas
Public MustInherit Class AbstractBase
...
End Class
• Clases no heredables
Public NotInheritable Class FinalClass
...
End Class
Herencia 2/2
• Sobrecarga
 Un método sobrecarga otro
Igual nombre
Diferentes parámetros
• Sobre escritura
 Métodos que sobrescriben a otros con la
misma declaración
• NotOverridable, MustOverride
 Definen si deben o no pueden sobrescribirse
• Acceso calificado
 MyClass, MyBase
Ejemplo
Public Class Customer
Inherits Person
Implements ICustomer
Private CustomerNo As String
Public Property Customer As String
Get
Return CustomerNo
End Get
Set
CustomerNo = Customer
End Set
End Property
Public Overloads Sub New()
End Sub
Public Overloads Sub New(ByVal par as Integer)
MyBase.New(par)
End Sub
Public Sub DoAny(ByVal c as Char) Implements ICustomer.DoAny
End Sub
End Class
Estructuras
• Tipos definidos por el usuario
 reemplazan Type
• Clases “livianas”
 Consisten de los mismos miembros
 Son tipos de valor, en cambio las clases son
referencias
 Pueden implementar Interfaces
 No pueden heredarse

Public Structure Cliente


Implements ICstmr
Public NroCliente, Nombre As String
Public Sub New()
End Sub
Public Sub Hacer(ByVal c as Char) Implements ICstmr.Hacer
End Sub
End Structure
Accesibilidad
• Cada miembro define su propia accesibilidad
 Private
Sólo dentro del contexto donde se declara
 Protected (solo miembros de la clase)
Acceso adicional por clases derivadas
 Friend
Acceso desde el mismo Assembly
 Protected Friend
Protected + Friend
 Public
Sin restricciones
Propiedades
• No es sólo almacenamiento
 Pueden realizarse operaciones
Public Class Sample
Private val as Integer
Public Property valPlus1() as Integer
Get
valPlus1 = val+1
End Get
Set
val = valPlus1-1
End Set
End Property
End Class

• Se usan como miembros de datos


intVal = Sample.valPlus1
• No pueden indexarse
Manejo de Excepciones
• No necesariamente son errores
• Dos estilos: estructurados (SEH) y no
estructurados (UEH)
• Sólo se permite un estilo por método
• UEH se soporta por compatibilidad para
atrás
 On Error, Resume, Error
 Microsoft.VisualBasic.Information.Err
Manejo estructurado
• Las excepciones son conceptos del sistema
 Propagadas entre componentes
• Sintaxis: Try
<Algo riesgoso>
Catch e As Exception
<Recupero del error>
Finally
<Ejecutar en cualquier caso>
End Try
 Pueden definirse personalizadas
 Derivadas de System.Exception
• y pueden dispararse con explícitamente
 Throw
Delegados
• Punteros a funciones orientados a objetos
• Pueden apuntar a un método en particular
de un objeto específico
Delegate Function CmpFunc(x As Integer, y As Integer) As Boolean

Public Function Cmp(x As Integer, y As Integer) As Boolean


... (This function implemented in some class)
End Function

Sub Sort(Sort As CmpFunc, ByRef IntArray() As Integer)


...
If Sort.Invoke(IntArray(i), Value) Then
... Exchange values
End If
...
End Sub

Call Sort( new CmpFunc( AddressOf aObj.Cmp), AnArray)


Eventos
• Soporta el estilo “tradicional” WithEvents
Private WithEvents mW As Marcador
Public Sub mW_MueveRaton(...) Handles mW.MouseHover

• El .NET Framework expone un nuevo


sistema de eventos
 Basado en delegados
• Transmitibles a muchos
• Se vinculan dinámicamente manejadores a
los eventos
 AddHandler, RemoveHandler
• Muchos eventos pueden enviarse al mismo
método
Simple, más consistente
• Declaraciones más “obvias”
 Visual Basic 6: Dim i,j as Integer
i es Variant, j es Integer
 Visual Basic.NET: Dim i,j as Integer
Ambas son Integer
• Las variables declaradas en un bloque
existen sólo dentro del mismo
• No hay creación implícita
 Debe usarse New
Más robusto
• Control de Tipos estricto
 Conversiones implícitas y explícitas
Dim Base as CBase
Dim Derivada as CDerivada = new
CDerivada()
Base = Derivada
 Option Strict
 Option Explicit
• Inicializadores
• Los Parámetros opcionales DEBEN tener un valor
por defecto
 Sub Calcular(Optional ByVal
param As Boolean = False)
Mejor Rendimiento
• Soporta “free threading”
 Mejor respuesta
• Evaluación rápida
 X = A And B AND (C OR D)
Algunos otros cambios
• Siempre se usan paréntesis al llamar métodos
 En todos los casos, Sub y Function, aún cuando no
requieran argumentos
• Por defecto, los parámetros se pasan ByVal
• Las propiedades son parámetros por referencia
 Mantienen los cambios
• Gosub/Return no existen más
• No hay tipo de dato por defecto
• Operadores aritméticos de “llamada rápida”:
x += 7
• Vinculación tardía
Finalización Determinista
• Un objeto se destruye automáticamente
 Cuando no se lo necesita más (Set a Nothing)
• Visual Basic.NET:
 No está disponible la cuenta de referencias automáticas
“detrás de la escena”
 Los objetos los destruye el “recolector de residuos” (GC)
cuando él lo dispone
 Los recursos pueden, virtualmente, mantenerse “vivos”
en forma permanente
• Una solución posible:
 Armar un esquema personalizado de cuenta de uso
• ¡No mantener estado en los objetos!
Sección 3: Integración con
.Net
• Common Language Runtime
• Conceptos de Namespaces,
Assemblies, Módulos
• “Free Threading”
• “Reflection”
• Atributos
• “Windows Forms”
• Herramientas
El motor de ejecución común (CLR)

• Accede a los servicios de la Plataforma.NET


• Con interoperabilidad entre lenguajes
 Incluyendo Herencia
• Interoperabilidad con COM servicios de bajo
nivel
 COM-Interop
 P/Invoke
 Llamar código no administrado tiene sus
implicancias
Namespaces
• Concepto Organizacional Namespace MyLib
 Pueden y deben ser jerárquicos ...
 System.Reflection End Namespace
 MiLib.Ayudas.Controles.Ingresos
• Un programa puede tener múltiples Namespaces
declarados
• Los Namespaces pueden repartirse entre varios
programas
• Importando namespaces
 Permite acceder a los tipos sin necesidad de calificarlos
completamente
 Se ubican a nivel del archivo
• Namespace global, sin nombre
 Tienen alcance para todo el programa
Assemblies
• Resultado de compilar tanto una .dll o un .exe
 Puede ser en uno o más archivos
• El, archivo contiene la metadata (manifiesto)
 Descripción de sí mismo
 Descripción de los tipos implementados
 Referencias externas
 Información de versión
 Control de la seguridad
 Y más ...
Módulos
• La más pequeña unidad a ser compilada
• Contiene una o más clases o interfaces
 El Sub Main() habitualmente tiene alcance de
módulo
• Más de un módulo pueden compartir el
mismo assembly
 El cual entonces, es un assembly multi-archivo
• Ejemplo:
Imports System
Public Module Principal
Sub Main()
Console.WriteLine(“¡Hola mundo!")
End Sub
End Module
“Free Threading”
• Ejecuta múltiples tareas simultáneamente
 Pueden compartirse objetos entre hilos
• Usa el operador AddressOf en el Sub
para declarar
Dim miThread As New Threading.thread(AddressOf MiSub)
miThread.Start()
miThread.Join()

• El Sub no puede tener argumentos, ni


devolver valores
• Es necesario sincronizar
Ejemplo
Dim Escritor As Thread = new Thread( _
AddressOf UnObjeto.ThreadSub)
Dim Lector As Thread = new Thread( _
AddressOf UnObjeto.ThreadSub)
...
Escritor.Start()
Lector.Start()
Escritor.Join()
Lector.Join()
...
Public Sub ThreadSub
Monitor.Enter(Me) ‚Inicia un bloque de sincronización
...
Monitor.Exit(Me)
End Sub
Reflection
• Mecanismo para obtener información
en tiempo de ejecución
 Assemblies
 Tipos: clases, interfaces, métodos
• Provee vinculación tardía para la
invocación de métodos
Atributos
• Información adicional declarativa de un elemento
del programa
• Es posible definir atributos personalizados de
clases
Public Class PersonFirstName
Inherits Attribute
End Class
• Pueden obtenerse en tiempo de ejecución, a
través de “reflection”
• Mejoran la funcionalidad del programa
 Brinda ayudas al ejecutor
Public Function <WebMethod()> Hello As String ...
 Se usa como meta elementos
Dim <PersonFirstName()> Vorname As String
Dim <PersonFirstName()> PrimeiroNome As String
Windows® Forms
• Nueva biblioteca de formularios, basada en el.NET
Framework
• Para aplicaciones de escritorio
• Servicios locales de usuario, para aplicaciones en
3 capas
Cliente Windows Web Service
Form1.vb Regla de Negocio Base
HTTP Obtener Pedido OLE DB de
Dataset XML Datos
Dataset Dataset Command
pedidos.xsd pedidos.xsd PedidoCmd
Compilador por línea de comando

• Compila fuentes Visual Basic a MSIL


Vbc /target:exe /out:myprogram.exe *.vb

• Tiene una multitud de opciones


• Puede llamarse de cualquier entorno
• Usa menos recursos que Visual
Studio
• Puede utilizarse con Nmake
 Útil para proyectos de múltiples idiomas
Visual Studio.NET
• Basado en el SDK del .NET Framewrok
• Integración y funcionalidad mejoradas
 Proyectos en varios lenguajes
 Un entorno (IDE) integrado para todos
 Herramientas integradas: Visual Modeler, Adm. De
Bases de Datos
 Integración perfecta de la ayuda: Ayuda dinámica,
IntelliSense®
• Mayor productividad para todo:
 Desarrollo rápido de aplicaciones
 Proyectos en gran escala
De Visual Basic 6 a Visual Basic.NET
• Visual Basic.NET es el sucesor de Visual
Basic 6
 ...pero algunas cosas marcan diferencia
• Las clases de compatibilidad ayudan en la
transición
 Microsoft.VisualBasic se importa por
defecto
 Clases que exponen funcionalidades de...
Colecciones
Funciones de Fecha/Hora
Más
Visual Basic Upgrade Wizard
• Aplica los cambios automáticamente
• Genera soluciones
 Conversión de tipos
 Variant a Object
 Integer a Short, Long a Integer
 Type a Structure
 Currency a Decimal
 Vectores que comienzan en cero
 Reemplazo de los formularios por .NET Windows
Forms
• Recomendaciones para la actualización
Duwamish Books
• Ejemplo de aplicación empresarial
• “Buenas prácticas” en el diseño en
múltiples capas
• Incluida en Visual Studio.NET
• Es un buen comienzo para aprender
 Visual Basic.NET
 ASP.NET
 ADO.NET
Resumen
• Grandes cambios para aprovechar las
ventajas del .NET Famework
• Lenguaje modernizado y consistente
• Características “heredadas” finalmente se
han eliminado
• El código Visual Basic.NET puede
reutilizarse
• Soporte para la migración

Vous aimerez peut-être aussi