Visual Basic.Net

Download Report

Transcript Visual Basic.Net

Visual
Basic.NET
Daniel A. Seara
NDSoft Consultoría y Desarrollo
Director Regional MSDN Argentina
[email protected]
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()
•
– unObjeto = New Class(“Arg”, datos)
Eventos orientados a objetos
Conceptos de Herencia
• Reutilización
– Composición (Tiene-un)
MiForm
Control
• MiForm Tiene-un Control
– Herencia (Es-un)
• MiForm Es-un FormInic
Form
FormInic
• Construyendo
•
•
jerarquías de tipo
Versionamiento
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 IPersonaEdad
Property Nacimiento() As Integer
Function TraerEdadActual() As Integer
End Interface
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 UnaDimension(10) As Integer
Dim DosDimensions(20,intVal) As Integer
• Sintaxis declarativa
Dim UnVector() As Integer
ReDim UnVector(10)
• El límite inferior siempre es cero
• No se soporta tamaño “fijo” (4 to 12)
• 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 ClaseDerivada
Inherits ClaseBase
Implements IBase1, IBase2
...
End Class
• Clases base abstractas
Public MustInherit Class ClaseAbstracta
...
End Class
• Clases no heredables
Public NotInheritable Class ClaseFinal
...
End Class
Herencia 2/2
•
•
•
•
Sobrecarga
– Un método sobrecarga otro
• Igual nombre
• Diferentes parámetros
Sobre escritura
– Métodos que sobrescriben a otros de una
clase heredada, con la misma declaración
NotOverridable, MustOverride
– Definen si deben o no pueden sobrescribirse
Acceso calificado
– MyClass, MyBase
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 aún de distintos
lenguajes
Try
Sintaxis:
<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 explícitamente con
– Throw
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
– ¡Pero se deben conocer muy bien los
mecanismos de manejo de hilos de
ejecución!
• Evaluación rápida
– X = A And B AndAlso (C OR D)
• Si A y B Son Verdad, no se evalúan C ni 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!
Integración con .Net
• Common Language Runtime
• Conceptos de Namespaces,
•
•
•
Assemblies, Módulos
“Free Threading”
Atributos
Visual Studio.Net
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
– Pueden y deben ser jerárquicos
– System.Reflection
– MiLib.Ayudas.Controles.Ingresos
Namespace MyLib
...
End Namespace
•
Un programa puede tener múltiples Namespaces
declarados
Los Namespaces pueden repartirse entre varios
programas
Importando namespaces
•
Namespace global, sin nombre
•
– Permite acceder a los tipos sin necesidad de calificarlos
completamente
– Se ubican a nivel del archivo
– 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
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 ...
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: Visio, 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
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