Visual Basic.

NET
Daniel A. Seara
NDSoft
Director Regional MSDN Buenos Aires – ARGENTINA

Objetivos
• Introducción a Microsoft Visual Basic .NET
 Nuevos conceptos  Cambios

• Integración con .NET • Herramientas

Contenido
• Sección 1: • Sección 2: lenguaje • Sección 3: • Sección 4: • Resumen Conceptos generales Características del Integración con .Net Uniendo las partes

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
 Composición (TieneMiForm
Control

un)

 MiForm Tiene-un Control

 Herencia (Es-un)

Form

• Construyendo jerarquías de tipo • Versionamiento • Polimorfismo

 MiForm Es-un EntryForm

FormInic

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)

• Cada tipo puede ser un valor o una referencia
 Tipos de valores:

entre lenguajes

Primitivas, enumeradores, estructuras
 Referencias:

Clases, módulos, interfaces, vectores, delegados, y cadenas
 Los objetos pueden contener ambas

TODO hereda implícitamente de System.Object

• Enteros

Tipos Primitivos

 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

• Concepto para objetos: código y datos • Las clases contienen miembros:
 De datos: variables, constantes  Propiedades: valores que se

Clases

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 • Clases no heredables

Public MustInherit Class AbstractBase ... End Class Public NotInheritable Class FinalClass ... End Class

Herencia
• Sobrecarga

2/2

 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

• Tipos definidos por el usuario • Clases “livianas”
 reemplazan Type
 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

Estructuras

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

• 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

Propiedades

• Se usan como miembros de datos • No pueden indexarse
intVal = Sample.valPlus1

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 • Sintaxis:
 Propagadas entre componentes

Try <Algo riesgoso> Catch e As Exception <Recupero del error> Finally <Ejecutar en cualquier caso> End Try

• y pueden dispararse con explícitamente
 Throw

 Pueden definirse personalizadas  Derivadas de System.Exception

Delegados
• Punteros a funciones orientados a objetos • Pueden apuntar a un método en particular de un objeto As Boolean Delegate Function CmpFunc(x As Integer, y As Integer)específico
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 • Transmitibles a muchos • Se vinculan dinámicamente manejadores a los eventos • Muchos eventos pueden enviarse al mismo método
 AddHandler, RemoveHandler  Basado en delegados

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

• Control de Tipos estricto

Más robusto

 Conversiones implícitas y explícitas
Dim Base as CBase Dim Derivada as CDerivada = new CDerivada() Base = Derivada

 Option Strict

• Inicializadores • Los Parámetros opcionales DEBEN tener un valor por defecto
 Sub Calcular(Optional ByVal

 Option Explicit

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”:

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

• 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

 Pueden y deben ser jerárquicos ...  System.Reflection End Namespace  MiLib.Ayudas.Controles.Ingresos

• Namespace global, sin nombre
 Tienen alcance para todo el programa

calificarlos completamente  Se ubican a nivel del archivo

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

• Más de un módulo pueden compartir el mismo assembly
archivo Imports • Ejemplo: System Public Module Principal Sub Main() Console.WriteLine(“¡Hola mundo!") End Sub End Module
 El cual entonces, es un assembly multi-

de módulo

“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
miThread.Start() miThread.Join()

MiSub)

• 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

• Información adicional declarativa de un elemento del programa • Es posible definir atributos personalizados de clases
Public Class PersonFirstName Inherits Attribute End Class

Atributos

• Pueden obtenerse en tiempo de ejecución, a través de “reflection” • Mejoran la funcionalidad del programa
Public Function <WebMethod()> Hello As String ...
 Se usa como meta elementos  Brinda ayudas al ejecutor

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 HTTP Regla de Negocio Obtener Pedido Dataset
pedidos.xsd

Form1.vb Dataset
pedidos.xsd

OLE DB

XML

Dataset Command PedidoCmd

Base de Datos

Compilador por línea de comando
• Compila fuentes Visual Basic a Vbc /target:exe /out:myprogram.exe *.vb MSIL • Tiene una multitud de opciones • Puede llamarse de cualquier entorno • Usa menos recursos que Visual Studio • Puede utilizarse con Nmake

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

Sección 4: Uniendo las partes
• Sample Walkthrough
 Exploring Visual Basic.NET Features in

Duwamish Books

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

Questions?

Duwamish Books
A Sample Application for Microsoft .NET

Installing the Sample

1/2

• Install the "Enterprise Samples" with Visual Studio.NET • Location of the Visual Basic Version
 Directory

.\EnterpriseSamples\DuwamishOnline VB

• Installation Tasks
 Check the prerequisites Microsoft Windows 2000 Server; Microsoft SQL Server™ 2000 with English Query optional and supported

Installing the Sample

2/2

• The installation wizard will guide you • Defaults should be OK for almost everybody. • Setup will install database, Web site, and code • After installation is complete:
 File/Open Solution with the

Duwamish.sln file  Can build the sample with

Duwamish Architecture Overview User / Browser ASP.NET
IIS Web SystemFramework ADO.NE T Common.Data BusinessFacade BusinessRules DataAccess

Database

• Duwamish7.Common

Common Components

 Contains systems configuration

options  Contains common data definitions (classes)
subnamespace Duwamish.Common.Data

 "Internal" data representation for

Book, Category, Customer, OrderData

• Duwamish7.SystemFramework
 Diagnostics utilities

Duwamish7.DataAccess
• Contains all database-related code • Uses ADO.NET architecture
 Using SQL Server managed

provider  Shows DataSet, DataSetCommand usage

• Optimized for performance by using stored procs

Duwamish7.BusinessRules
• Implements all business rules
 Validation of business objects (for

examle, Customer EMail)  Updating business objects  Calculations (Shipping Cost, Taxes)

• All data access performed through DataAccess

Duwamish7.BusinessFacade
• Implements logical business subsystems
 CustomerSystem: Profile

management  OrderSystem: Order management  ProductSystem: Catalog management

• Reads data through DataAccess • Data validated and updated using BusinessRules

Duwamish7.Web
• Implements the user interface for Web access • Uses ASP.NET architecture
 Employs Web Forms model  Uses code behind forms  Manages state  Uses custom Web controls

• All functionality accessed through BusinessFacade

• Demo: Duwamish in Action

Shop at Duwamish Online.NET

Exploring Duwamish VB
• Exploring Visual Basic.NET Features in Duwamish

Extending Duwamish VB
• Extending Duwamish VB

Legal Notices
Unpublished work. © 2001 Microsoft Corporation. All rights reserved. Microsoft, IntelliSense, Visual Basic, Visual Studio, and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. The names of actual companies and products mentioned herein may be the trademarks of their respective owners.