Title: Desarrollo de componentes en Visual Basic .NET
1Desarrollo de componentes en Visual Basic .NET
2Descripción
- Descripción de los componentes
- Creación de componentes con servicio
- Creación de clases de componentes
- Creación de controles de formularios Windows
Forms - Hilos de ejecución
3Descripción de los componentes
- Tipos de componentes
- Uso de módulos como componentes
- Uso de clases como componentes
- Uso de componentes en aplicaciones cliente no
gestionadas - Descripción de .NET Remoting
4Tipos de componentes
- Estructuras
- Módulos
- Clases
- Clases de componentes
- Componentes con servicio
- Controles de usuario
- Controles de usuario de formularios Windows Forms
- Controles de usuario de formularios Web Forms
5Uso de módulos como componentes
- Declarar el módulo como público
- Referenciar e importar el ensamblado en código
cliente
Public Module MyMathFunctions Public Function
Square(ByVal lng As Integer) As Long
Return (lng lng) End Function ... End
Module 'Client code Imports MyAssembly ... Dim
x As Long Square(20)
6Uso de clases como componentes
- Declarar la clase como pública
- Referenciar e importar el ensamblado en código
cliente
Public Class Account Public Sub Debit(ByVal
AccountId As Long, Amount As Double)
'Perform debit action End Sub Public
Sub Credit(ByVal AccountId As Long, Amount As
Double) 'Perform credit action End
Sub End Class 'Client code Imports
MyAssembly Dim x As New Account( ) x.Debit(1021,
1000)
7Uso de componentes en aplicaciones cliente no
gestionadas
- Establecer las propiedades del ensamblado
- Generar un nombre seguro
- Seleccionar Registrar para COM Interop en las
opciones de Generar - Exponer miembros de claes a COM y a los servicios
de componentes - Definir e implementar interfaces
- Utilizar el atributo ClassInterface con valor
AutoDual - Utilizar el atributo COMClass
8Descripción de .NET Remoting
Servidor AppDomain
Cliente AppDomain
Marshal By Reference
Código cliente
Formateador
Servidor Proxy
Marshal By Value
Canal
Código cliente
Copia objeto servidor
Límite de Remoting
9Creación de componentes con servicio
- Hospedar componentes en los servicios de
componentes - Uso de transacciones
- Uso de la agrupación de objetos
- Uso de cadenas de constructor
- Uso de seguridad
- Uso de otros servicios de componentes
- Configurar ensamblados para usar los servicios de
componentes
10Hospedar componentes en los servicios de
componentes
- Agregar una referencia a System.EnterpriseServices
en el ensamblado - El espacio de nombres System.EnterpriseServices
proporciona - Clase ContextUtil
- Clase ServicedComponent
- Atributos de ensamblado, clase y método
11Uso de transacciones
- El atributo Transaction especifica cómo participa
una clase en las transacciones - La clase ContextUtil proporciona votación en una
transacción - El atributo AutoComplete impide el uso de los
métodos SetAbort, SetComplete y ContextUtil
ltTransaction(TransactionOption.Required)gt Public
Class Account Inherits ServicedComponent
Public Sub Debit(...) 'Perform debit
action ContextUtil.SetComplete( ) End Sub
ltAutoComplete( )gt Public Sub Credit(...)
'Perform credit action 'No SetComplete because
AutoComplete is on End Sub End Class
12Uso de la agrupación de objetos
- La agrupación de objetos permite crear objetos
con antelación - El atributo ObjectPooling especifica MinPoolSize
y MaxPoolSize - ServicedComponent proporciona el método
CanBePooled
ltObjectPooling(EnabledTrue, MinPoolSize5,
_ MaxPoolSize50)gt _ Public Class Account
Inherits ServicedComponent ...
Protected Overrides Function CanBePooled( ) As
Boolean Return True End Function End
Class
13Uso de las cadenas de constructor
- Especifican el atributo ConstructionEnabled para
indicar que se necesita una cadena de constructor - Reemplazan el método Construct para recuperar
información
ltConstructionEnabled(True)gtPublic Class Account
Inherits ServicedComponent Protected
Overrides Sub Construct(ByVal s As
String) 'Called after class constructor 'Use
passed in string End Sub End Class
14Uso de seguridad
- Los atributos de la configuración de seguridad
habilitan la configuración de la seguridad y su
papel - La clase SecurityCallContext proporciona
comprobación de roles y ofrece información sobre
el llamador
ltComponentAccessControl(True), seguridadRole("Mana
ger")gt _ Public Class Account Inherits
ServicedComponent Public Function
GetDetails( ) As String With
seguridadCallContext.CurrentCall If
.IsCallerInRole("Manager") Then
Return .OriginalCaller.AccountName
End If End With End Function End Class
15Uso de otros servicios de componentes
- Otros servicios de componentes incluyen
- Activación Just-in-time
- Componentes encolados
- Propiedades compartidas
- Sincronización
16Configurar ensamblados para usar los servicios de
componentes
- Establecer atributos a nivel de ensamblado
- ApplicationName
- Description
- ApplicationActivation biblitoteca o aplícación
servidora - AssemblyKeyFile
- Uso de Regsvcs para registrar y crear
aplicaciones de servicios de componentes - Regsvcs.exe myApplication.dll
- Uso de Lazy Registration
- Aplicación registrada la primera vez que se
utilice por parte de un cliente
17Demostración Creación de un componente con
servicio
18Creación de clases de componentes
- Arquitectura de una clase de componentes
- Creación de una clase de componentes
19Arquitectura de una clase de componentes
System.ComponentModel.Component
Clase base
Interfaz IComponent
Clases de componentes
Clases derivadas
Clases predefinidas
Clases personalizadas
20Creación de una clase de componentes
- 1. Heredar de System.ComponentModel.Component
- Realizar las inicializaciones por parte del
constructor - Sobrecargar el método Dispose
- 2. Agregar los componentes ubicados
- Utilizar elementos del Explorador de servidores o
del cuadro de herramientas - 3. Crear la funcionalidad requerida
- Propiedades, métodos y eventos
- 4. Generar el ensamblado
21Demostración Creación de un componente Stopwatch
22Creación de controles de formularios Windows Forms
- Heredar de la clase UserControl
- Heredar de un control existente Windows Forms
- Proporcionar atributos a los controles
23Heredar de la clase UserControl
- Heredar de System.Windows.Forms.UserControl
- Agregar los controles necesarios al diseñador
- Agregar propiedades y métodos que correspondan a
los de los controles constitutivos - Agregar propiedades y métodos adicionales
- No InitProperties, ReadProperties ni
WriteProperties - El almacenamiento de propiedades es automático
24Heredar de un control existente Windows Forms
- Permite mejorar la versión de un determinado
control - Heredar de un control System.Windows.Forms
Public Class MyTextBox Inherits
System.Windows.Forms.TextBox Private strData
As String Public Property HiddenData( ) As
String Get Return strData
End Get Set(ByVal Value As String)
strData Value End Set End
Property ... End Class
25Proporcionar atributos a los controles
- System.ComponentModel proprociona atributos a los
controles - A nivel de clase DefaultProperty, DefaultEvent,
ToolboxBitmap - A nivel de propiedad Category, Description,
DefaultValue
Imports System.ComponentModel ltToolboxBitmap("C\
txticon.ico"), DefaultEvent("Click")gt _ Public
Class MyTextBox Inherits System.Windows.Forms.
UserControl ltCategory("Appearance"), _
Description("Stores extra data"), _
DefaultValue("Empty")gt _ Public Property
HiddenData( ) As String ... End
Property ... End Class
26Demostración Creación de una caja de texto
mejorada
27Manejo de hilos de ejecución
- Qué es un hilo?
- Ventajas de múltiples hilos de ejecución
- Creación de hilos
- Uso de hilos
- Cuándo utilizar el manejo de hilos
28Qué es un hilo?
- La unidad de ejecución que procesa la CPU
- Todos los procesos de una aplicación contienen al
menos un hilo - Los hilos están planificados
- Parece que el equipo realiza varias tareas a la
vez - Cada hilo contiene su propia pila de llamadas y
almacenamiento
Programador de subprocesos
Proceso 1
CPU
Subproc. 2
Subproc. 1
Subproc. 3
Subproc. 1
Subproc. 2
Subproc. 3
Proceso 2
29Ventajas de múltiples hilos de ejecución
- Mejor respuesta de la interfaz de usuario
- Ejemplo barra de estado
- Sin bloqueos
- Comunicación asíncrona
- Sin afinidad de hilos
- Los objetos no están vinculados a un hilo
30Creación de hilos
- Uso de la clase System.Threading.Thread
- El constructor especifica el método delegado
- Los métodos proporcionan control del
procesamiento de hilos - Las propiedades proporcionan información de
estado y prioridades - Utilizar una clase si se requieren parámetros
- Permitir acceso público a variables clase
- Lanzar un evento cuando finalice
31Uso de hilos
Class Calculate Public iValue As Integer
Public Event Complete(ByVal Result As Integer)
Public Sub LongCalculation( ) 'Perform a long
calculation based on iValue ...
RaiseEvent Complete(iResult) 'Raise event to
signal finish End Sub End Class
Sub Test( ) Dim calc As New Calculate( ) Dim
th As New Threading.Thread(AddressOf
calc.LongCalculation) calc.iValue 10
AddHandler calc.Complete, AddressOf CalcResult
th.Start( ) End Sub Sub CalcResult(ByVal Result
As Integer) ... End Sub
32Cuándo utilizar el manejo de hilos
- Utilizar los hilos con precaución
- El uso de más hilos requiere más recursos del
sistema - Sincronizar el acceso a recursos compartidos
- Evitar que dos hilos accedan simultáneamente a
datos compartidos - Utilizar la instrucción SyncLock para bloquear
secciones de código
Sub Worker( ) SyncLock(theData) 'Lock this
object variable theData.id iValue
'Perform some lengthy action iValue
theData.id End SyncLock 'Unlock the object
variable End Sub
33Demostración Uso de la instrucción SyncLock