Presentación 1 - Si busca información sobre el proyecto de Clusters

Transcripción

Presentación 1 - Si busca información sobre el proyecto de Clusters
MICROSOFT .NET
Presentación
1: Introducción
Jueves, 21 de Octubre de 2004
Iván Bernal, Ph.D.
[email protected]
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Politécnica Nacional
Quito – Ecuador
Copyright @2004, I. Bernal
Agenda
• Visión general de .NET
– Servicios ofrecidos.
• .NET framework
– MSIL, CLR, Garbage Collector, JITter.
– Assemblies, metadatos.
•
•
•
•
•
Control de versiones
Interoperabilidad con COM
Seguridad
ASP.NET y Servicios Web
Delegados y eventos
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
2
Bibliografía (1)
•
D. Platt, “Introducing Microsoft .NET”, 3rd
Edition, Microsoft Press, 2003.
ISBN:0735619182.
Nota:
•
– Las transparencias de esta presentación fue elaborado
tomando como referencia principal el libro de D. Platt; se
utilizan ejemplos y figuras del libro de Platt.
– Algunos capítulos, y los ejemplos utilizando C# y VB.NET
están disponibles gratuitamente en:
• http://www.introducingmicrosoft.net
– El presente material (transparencias) y algunas cosas
adicionales, que de seguro encontrarán interesantes,
pueden obtenerlas en:
• http://wwwfie.epn.edu.ec/ibernal
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
3
Bibliografía (2)
•
•
•
J. Webb, “Developing Web Applications
with Microsoft Visual Basic.NET and
Visual C#.NET”, Microsoft Press, 2003.
ISBN:0735619271.
J. Archer, A. Whitechapel, “Inside C#”,
Microsoft Press, 2002. ISBN:0735616485.
J. Clark, “Introducing the .NET
Framework with C#”,
http://www.wintellect.com/resources/tutorials.
•
D. Chappell, “One more time: What
exactly is .NET?”, Column: .NET &
Beyond. 2003 ,
http://www.adtmag.com/article.asp?id=8003
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
4
Objetivo
• Presentar una visión global de lo que involucra
la Infraestructura .NET, discutiendo sus
servicios y campos de acción.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
5
Microsoft .NET (1)
• “Infraestructura (infrastructure) prefabricada
para resolver problemas comunes en el
desarrollo de aplicaciones para el Internet”
---- David Platt.
• “Es una iniciativa para conectar
información, personas y dispositivos”
---- Jeffrey Richter.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
6
Microsoft .NET (2)
• Por qué una infraestructura prefabricada para el
Internet ?
• No podemos construirla nosotros mismos: tomaría
demasiado tiempo, costaría demasiado, y talvez no
sabríamos cómo.
• Mis requerimientos para una infraestructura para
aplicaciones Internet son similares a las de otros.
• Ejemplos:
• Escribir código seguro es extremadamente difícil.
• También es difícil realizar: pruebas, depuración, entrega,
instalación y mantenimiento.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
7
Microsoft .NET (3)
• Anunciada en el verano del 2000.
• Microsoft empezó a llamar a todo con la
etiqueta .NET:
–.NET Framework
–Visual Studio .NET
–.NET Enterprise Servers
–.NET My Services
–Windows .NET Server
–Incluso un posible Office .NET para el futuro
• Una estrategia de mercadeo, antes que
tecnológica, que confundió a muchos
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
8
Microsoft .NET (4)
• “.NET Enterprise Servers” son ahora parte
del conjunto de servidores “Windows
Server System”.
–Microsoft Application Center
–Microsoft BizTalk Server
–Microsoft Commerce Server
–Microsoft Exchange
–Microsoft Host Integration Server
–Microsoft Internet Security and Acceleration (ISA)
Server
–Microsoft Mobile Information
–Microsoft SQL Server
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
9
Microsoft .NET (5)
• “.NET My Services” no tuvo éxito en su conjunto.
–Plan para desarrollar Servicios Web propios de Microsoft
•Passport
•.NET Alerts
•.NET Calendar
•.NET Devices
•.NET Locations
•etc
• El Sistema Operativo “Windows .NET Server” fue
denominado finalmente “Windows Server 2003”,
aunque es la primera versión de Windows en traer el
.NET Framework como parte integral.
• El rumor sobre Office .NET desapareció, en su lugar
se entregó Office 2003.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
10
Microsoft .NET (6)
• Qué conservó la etiqueta .NET?
–.NET Framework y Visual Studio .NET
–La versión del IDE de desarrollo es ahora Visual Studio
2003.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
11
Microsoft .NET (7)
• .NET incluye los siguientes servicios:
• .NET Framework: (run-time environment)
• ASP.NET/ Web Forms (Formularios/ formas Web)
• Soporte para implementar Servicios Web (XML Web
Services)
• Windows Forms (Formularios/formas Windows)
• .NET no excluye aplicaciones de escritorio, a pesar
que énfasis es el Internet
• Soporte para desarrollo de controles:
• Windows Forms Controls
• Web Forms Controls
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
12
Microsoft .NET (8)
• .NET incluye los siguientes servicios:
• ADO.NET
• .NET Remoting
• Soporte para manipulación de documentos y streams
XML
• Soporte para señalización de eventos asincrónicos
(callbacks)
• Soporte para escribir aplicaciones multithreading con
mayor facilidad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
13
.NET Framework (1)
• .NET framework es un run-time environment.
– Componentes y programas se ejecutan en este ambiente.
– Runtimes ofrecen servicios a aplicaciones y evitan el
reinventar algoritmos para ciertas tareas.
• Parte de la iniciativa .NET que facilita la escritura de
código para que éste sea bueno, robusto, y se lo
escriba de manera rápida.
• Facilita la administración, instalación, y revisión
del código.
• Constituido de dos partes principales: CLR y FCL
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
14
.NET Framework (2): servicios
• Ofrece:
– Garbage collection (administración automática de
memoria).
– Fácil acceso a servicios del sistema operativo.
– Utilidades para acceso a bases de datos y el Internet.
– Un nuevo mecanismo para reutilización de código
(assemblies).
– Mayor facilidad para distribuir e instalar aplicaciones
– Soporte estandarizado para el control de versiones.
– Facilita la interoperabilidad de varios lenguajes de
programación.
– Control de acceso en tiempo de ejecución.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
15
.NET Framework (3)
• Varias descripciones del framework:
– Plataforma de desarrollo
– Ambiente de ejecución
– Sistema Operativo
• En realidad tiene un poco de todo lo
mencionado.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
16
.NET Framework (4): MSIL
• Escribimos nuestro código en un “lenguaje adecuado”
de alto nivel.
• Nuestro código se compila (transforma) en “Microsoft
Intermediate Language (MSIL)”.
– Abstracción de un lenguaje ensamblador.
• Para un CPU que no existe.
– MSIL es de alto nivel para ser un lenguaje
ensamblador
• Incluye instrucciones para conceptos de
programación avanzados como instanciación de
objetos o llamadas a funciones virtuales
– No importa el “lenguaje adecuado” seleccionado.
– El código correrá en un ambiente denominado CLR.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
17
.NET Framework (5): CLR
• El CLR (Common Language Runtime)
provee un “mejor” conjunto de servicios que
el API Win32.
• El CLR es a quien se entrega el código
intermedio para que lo procese.
– De cierta manera, el CLR es similar a otros motores de
ejecución: JVM (Java Virtual Machine) o Visual Basic.
• El código entregado al CLR se denomina:
Código Administrado (managed code)
– Se llama administrado porque corre bajo la constante
supervisión del CLR.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
18
.NET Framework (6):CLR
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
19
.NET Framework (7): Lenguajes
• Las herramientas de desarrollo que se
ajustan al CLR, deben procesar un
lenguaje de programación dado y generar
MSIL.
– Al momento de llegar al CLR, las diferencias entre
los lenguajes de programación han desaparecido.
• Ejemplo: No importa como se presente en el
código fuente de un lenguaje de programación
las cadenas (strings).
• La representación interna del programa
resultante es la misma: todas usan el objeto
String en el CLR.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
20
.NET Framework (8): Lenguajes
• MS Visual Studio, .NET y 2003, proveen
versiones de Visual Basic.NET, C#, Java#,
JScript y C++.
• Otras compañías están desarrollando
compiladores que generan MSIL para
alrededor de 20 lenguajes:
– COBOL, APL, PERL, Java, etc.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
21
.NET Framework (9): Lenguajes
VB
J#
C#
C++
…
Your Application
.NET Framework
Class Library
Common Language Runtime (CLR)
Operating System
Hardware
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
22
.NET Framework (10): Lenguajes
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
23
.NET Framework (11): JITter
• El código MSIL no puede correr directamente
en el procesador de una computadora.
• Se requiere algo que lea MSIL y produzca
código de máquina que corra en la plataforma
en uso:
– JITter (Just-in-time Compiler), parte del CLR.
• Cada plataforma debe tener su propio JITter.
• CLRs existen para plataformas Windows.
– Mono es una implementación para LINUX.
– http://www.mono-project.com
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
24
.NET Framework (12): JITter
• Mas detalles del JITter:
– La primera vez que un ejecutable administrado hace
referencia a una clase o tipo, se carga el módulo que
implementa esa clase.
– Al cargar el módulo, el JITter crea stubs (esqueletos)
para todos los métodos de la clase (en lenguaje de
máquina nativo).
• Los stubs solo tienen un salto a una función específica del
JITter.
• Se hace que cualquier llamada en el código que hace
referencia al nuevo tipo apunte a los stubs.
• Hasta ahora no ha existido compilación JIT del nuevo tipo.
– Cuando se invoque algún stub, el código del stub
produce un salto al JITter, que examina el código
(IL+metadata) y construye código en lenguaje de
máquina nativo, ese momento (on the fly).
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
25
.NET Framework (13): JITter
• Mas detalles del JITter:
– Se reemplaza el código del stub con un salto al nuevo
código generado.
– La siguiente vez que se invoque el mismo método, se
ejecutará el código nativo, sin necesidad de compilación
JIT, o ninguno de los otros pasos mencionados.
– No se desperdicia tiempo compilando métodos que no
son llamados (al menos esta vez).
– Al realizar compilación JIT de un método, puede ser que
éste haga referencia a otros tipos.
• El CLR chequea si estos se usan por primera vez en
esta ejecución de la aplicación.Si este es el caso, todo
el proceso descrito se inicia de nuevo para este nuevo
tipo.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
26
.NET Framework (14): JITter
• El código administrado no es interpretado.
– A diferencia de otros motores o ambientes de ejecución, el
código que corre bajo la supervisión del CLR se ejecuta de
forma nativa, en el lenguaje de máquina del CPU en uso.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
27
.NET Framework (15): metadatos
• Describen el código al CLR
– Definiciones de clases, la firma de los métodos, tipos
de los argumentos y de los valores de retorno, la
relación de tipos de un módulo con tipos que están en
módulos externos.
– Información sobre:
• La versión de un EXE, DLL.
• Cultura: lenguaje
• Conclusión: Los metadatos describen todo
aspecto de la estructura del código que no
sea la lógica de ejecución.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
28
.NET Framework (16): metadatos
• Un ejecutable administrado es MSIL +
metadatos.
– A esto se llama un assembly (más sobre
assemblies en las próximas transparencias)
– Ejecutables tradicionales solo contienen
instrucciones; las definiciones de clases, etc.,
desaparecen al momento de la compilación.
• El JITter utiliza MSIL y los metadatos de un
ejecutable administrado para crear las
instrucciones en lenguaje de máquina, en
tiempo de ejecución.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
29
.NET Framework (17): vista global
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
30
.NET Framework (18): FCL
• .NET Framework Class Library (FCL)
– Gran conjunto de clases, estructuras, tipos
enumerados e interfaces.
– Las clases facilitan tareas:
• Simples, como manejo de archivos, ventanas y
otros elementos de GUI.
• Complejas, para creación de aplicaciones Web
y distribuidas.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
31
.NET Framework (19): otros servicios del CLR
• El CLR provee además:
–
–
–
–
–
–
Verificación del código.
Administración de memoria.
Administración de threads (hilos o subprocesos).
Manejo de Excepciones.
Facilidades para control de versiones.
Seguridad.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
32
.NET Framework (20):Verificación
• Verificación de si el código es correcto.
– Durante compilación JIT, el CLR examina el MSIL y se
verifica de que todo sea seguro (safe).
• Ejemplos:
– Si existen referencias a memoria que ya fue liberada, o
a datos no inicializados.
– Castings a tipos no adecuados.
– Si los métodos se invocan con el número adecuado de
parámetros.
• Se puede marcar código como unsafe.
– Se produce código que no se puede verificar.
– Para uso de punteros: acceder al SO, implementar
algoritmos en donde el tiempo es crítico.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
33
.NET Framework (21): Unmanaged Code
• Unmanaged code ( código no administrado)
– Módulos que no requieren el CLR para su
ejecución (a los que estamos acostumbrados).
– El .NET Framework ofrece facilidades para
interactuar con código no administrado.
• Nota aparte: Visual C++ ahora puede
configurarse para que genere módulos que
requieran el CLR (managed code).
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
34
.NET Framework (22): Unmanaged Code
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
35
.NET Framework (23): GC
• El .NET Framework provee
administración automática de memoria:
garbage collection.
– Un programa no tiene que liberar explícitamente
memoria que ha reservado.
– El CLR detecta cuando un programa ya no está
usando cierta área de memoria (garbage) y la
recicla automáticamente.
– La memoria se reserva de un “managed heap”,
administrado por el CLR.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
36
.NET Framework (24):GC
• Mas detalles de garbage collection.
– Es un proceso que toma tiempo.
• El CLR debe detener la mayoría o todos los
threads en la aplicación para realizar GC.
– Se realiza cuando se detecta que no hay suficiente
memoria libre para satisfacer una petición de crear
un objeto o reservar espacio para buffers.
– Se puede forzar un GC por código con la función:
• System.GC.Collect
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
37
.NET Framework (25):GC
• Mas detalles de garbage collection.
– Cuando se realiza GC, se buscan los objetos
locales (stack) y globales referenciados, los cuales
no son “basura”; estos a su vez se usan para
buscar mas objetos referenciados, que tampoco
serán “basura”, y así sucesivamente.
• Todos los objetos que no han sido
referenciados son basura y su memoria puede
ser recuperada.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
38
.NET Framework (26): GC
• Mas detalles de garbage collection.
– Durante GC, la memoria de objetos “basura” se
compacta, y los objetos referenciados se
desplazan a utilizar esta memoria liberada.
• Se deben actualizar las referencias en el código
a las nuevas direcciones de los objetos
desplazados.
• Memoria se usa de mejor manera ya que se
evita fragmentación.
• Si bien GC toma tiempo, la asignación de
memoria es muy rápida.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
39
.NET Framework (27): GC
• Problema: en donde se debe ubicar el código
necesario para limpieza cuando un objeto se
destruye?
– C++ lo hace en los destructores de forma determinística.
– Cómo hacer esto con GC involucrado?
• La tarea de destructores en C++ era liberar
memoria reservada para otros objetos.
– En .NET eso ya está solucionado precisamente por GC.
• En .NET quedan pendientes tareas como:
– Cerrar conexiones a bases de datos.
– Logouts de sistemas remotos.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
40
.NET Framework (28): GC
• GC del CLR maneja la idea de finalizers.
– Es un método en los objetos que se invoca el momento en
el que GC destruye los objetos.
– System.Object contiene el método Finalize, el cual puede
ser redefinido.
– Si GC detecta que el objeto tiene el método Finalize lo
invoca, ejecutando el código de limpieza.
– Esto no es mecanismo determinístico.
• En C#, para sobrescribir Finalize, se escribe
algo que parece un destructor de C++.
– Class X{ public: X( ) {… } ~X( ) {……..} };
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
41
.NET Framework (29): GC
• Desventajas de finalizers:
– No hay forma de garantizar el orden en el que GC invoca los
finalizers en los objetos que se han convertido en basura.
– No escribir código que dependa de si un objeto terminó
antes o después que otros.
– No escribir código que invoque funciones de otros objetos
en los finalizers; si mi objeto es basura, puede ser que los
que intente invocar también lo sean.
– No se deben lanzar excepciones dentro de los finalizers.
• Ya nadie escucha a objeto por excepciones.
– Si se debe escribir código para capturar excepciones
generadas en el código del finalizer.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
42
.NET Framework (30): GC
• Los finalizers pueden ser una solución en ciertos
casos pero si se trata de recursos escasos, se
requiere algo determinístico.
– Se podría forzar que corra GC pero costoso.
– Se quiere liberar recursos de un objeto en particular.
• Los objetos que desean una finalización
determinística, deben implementar la interfaz
IDisposable.
– Tiene solo el método Dispose.
– En este método se incluye el código para liberar recursos.
– El cliente invoca este método paral liberar recursos este
momento.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
43
.NET Framework (31): GC
• WinForms soportan Dispose para liberar
rápidamente los manipuladores de ventana.
• Problema: el cliente puede olvidar el invocar
Dispose.
– El código de limpieza debería invocarse también en el
finalizer.
– Pero si el usuario Si invoca Dispose, GC desperdicia tiempo
en el finalizer.
• System.GC.SuppresFinalize
• El invocar Dispose en un objeto, no implica que
éste se convierta en basura.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
44
.NET Framework (32): POO
• El CLR es una plataforma diseñada para ser
totalmente orientada a objetos (OO), y
promover los principios y objetivos de POO
(Programación OO).
– Clases (datos + funcionalidad), objetos, herencia,
polimorfismo, etc.
• Todos los lenguajes que puedan compilarse a
MSIL puede ofrecer el mismo conjunto de
características.
– No necesariamente todo lenguaje expone todas las
propiedades del CLR al programador.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
45
.NET Framework (33): POO
• Características de POO que en Visual Basic
no estaban presentes:
– Herencia: heredar algo de alguien y luego modificar lo
que sea necesario o agregar algo nuevo (forma de
reutilización de código).
– Constructores (de clases) parametrizados.
• Todos los tipos, incluidos los primitivos están
derivados de System.Object, brindando
una vista homogénea de todos los tipos.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
46
.NET Framework (34): namespaces
• .NET Framework organiza las funcionalidades
ofrecidas por el Sistema Operativo con la
ayuda del namespace denominado System.
• En general un namespace es:
– Un namespace es el conjunto de nombres dentro
del cual un nombre particular tiene que ser único.
– Evita la colisión de nombres con la nomenclatura
de otros programadores.
– Agrupa funciones, clases, objetos que tengan
alguna relación.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
47
.NET Framework (35): namespaces
• Permiten organizar jerárquicamente servicios del SO,
una subdivisión lógica de funcionalidad que facilita
encontrar las características que se requieran de
entre 5000 funciones.
– System.Console.Write: un namespace subordinado
(subnamespace), parte de la jerarquía completa.
– Fully-qualified name de una función: nombre de la función
precedido por el namespace completo.
– System está implementado en varios dlls; deben especificarse los
utilizados al compilar el código.
– Problema si nombre calificado es muy largo.
• Importar namespace (VB.NET: Imports, C#: using)
• Se indica al compilador que se usaran nombres cortos, no
completamente calificados.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
48
.NET Framework (36): namespaces
• WinCV (SDK) permite explorar clases de assemblies
compartidas, pero es útil porque incluye a las clases
base.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
49
Ejemplos básicos con Visual Studio
• Ejemplos sencillos
– Consola con VB.NET y C#
• Hola Mundo
– GUI con C#
• Hola mundo
• Ejemplo de relativa complejidad
– Copia de archivos con C#
• Qué es C#?
– Un nuevo lenguaje de programación (POO) diseñado
específicamente para escribir código administrado que
tiene como objetivo el .NET Framework.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
50
Ejemplo 1: VB.NET y C#
• Utilizando Visual Studio.NET se
demuestra como se puede desarrollar
partes de un sistema utilizando
diferentes lenguajes.
– Un componente (dll) escrito en VB.NET que
obtenga la hora del sistema. Tipo de proyecto:
“class library”
– Una aplicación de consola en C# que utilice el
componente VB.NET e imprima la hora en
pantalla. Tipo de proyecto: “console application”
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
51
Ejemplo 1: Server en VB.NET
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
52
Ejemplo 1: Server en VB.NET
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
53
Ejemplo 1: Cliente en C#
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
54
Para compilar el cliente se
requiere agregar una
referencia al componente
Ejemplo 1: Cliente en C#
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
55
Assemblies (1)
• Son una colección lógica de uno o mas EXEs
o DLLs, que contienen el código, recursos y
metadatos.
• A la parte de metadatos se le denomina
manifest (manifiesto).
– Como el manifiesto de un embarque, en el que se detalla el
contenido del mismo.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
56
Assemblies (2)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
57
Assemblies (3) : ILDASM.exe
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
58
Assemblies (4) : Privadas
• Assemblies: private
– Modelo Simple: copiar en el directorio del cliente.
– No hay necesidad de registrar nada.
– Problema: proliferación de assemblies (esto era lo
que las DLLs intentaban solucionar originalmente).
• Para algunos, esto no es un problema en la
actualidad: existe suficiente disco duro.
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Oct. 20042004-CICC
.NET
Escuela Polité
Politécnica Nacional
Quito - Ecuador
59
Assemblies (5) : Compartidas
• Shared
– Si assembly será utilizada por múltiples (muchas)
aplicaciones.
– Ubicar assemblies en Global Assembly Cache (GAC)
– GAC es un directorio.
• Ejemplo: C:\WINDOWS\assembly.
– Problema es la posible colisión de nombres.
• A pesar de tener iguales nombres se las debe identificar
de forma única.
– Herramientas para administración (del SDK):
• GACUTIL.exe: programa de línea de comandos
• Assembly Cache Viewer: con GUI, integrada con
Windows Explorer.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
60
Assemblies (6) : Compartidas
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
61
Assemblies (7) : Compartidas
• Generar strong name (SN)
– El manifiesto de un shared assembly incluye una llave
pública.
– Se usa criptografía de llave pública para generar el nombre,
que debe ser único en el sistema, con:
• Parte de la llave pública.
• Nombre del archivo del assembly.
• Versión.
• Con Visual Studio:
– Usar SN.exe para generar un archivo con el par de llaves:
pública/privada.
– Usar el archivo AssemblyInfo.(vb o cs) para indicar a Visual
Studio sobre el archivo con las llaves.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
62
Assemblies (8) : Compartidas
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
63
Assemblies (9) : Compartidas
• Con Visual Studio:
– Al compilar se genera y asigna el strong name al
componente, lo que se conoce como signing.
– Luego se usa drag-and-drop para poner assembly en el GAC
(en desarrollo, proveer instalador al final).
• Cómo utilizar un assembly del GAC?
– Por ahora NO se puede añadir una referencia desde el GAC
al proyecto del cliente.
– Para compilar el cliente es “necesario” añadir una referencia
al assembly ubicado en un directorio cualquiera.
– Luego de terminado el proceso de desarrollo, el cliente usará
el assembly del GAC.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
64
Assemblies (10) : Compartidas
• Para el ejemplo de la hora:
– Realizar el signing del componente en VisualBasic.NET
– Mover el componente al GAC.
– Hacer una copia del cliente en C# (solo el .exe) al directorio
C:\ y comprobar que funcione. Al no encontrar el componente
en C:\ se busca en el GAC.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
65
Assemblies (11) : Compartidas
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
66
Assemblies (12) : Ngen.exe
• Una aplicación puede especificar que la
compilación JIT se realice una sola vez,
cuando la aplicación se instale, y se almacene
la versión en código nativo.
– Ngen.exe sirve para esta tarea.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
67
Control de Versiones (1)
• El .NET Framework soporta facilidades para
control de versiones.
– Evitar “DLL hell”.
• Información de versión en manifiesto.
– La herramienta de desarrollo la incluye en el manifiesto.
• Compatibility Version: cuatro números, que
usa el CLR para este control.
–
–
–
–
Major version number
Minor version number
Build number
Revision number
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
68
Control de Versiones (2)
• Usar el archivo AssemblyInfo.(vb o cs) para
indicar en Visual Studio.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
69
Control de Versiones (3)
• En el manifiesto de un cliente se indica cual
versión del assembly (servidor) se utilizó al
generar el cliente.
• Cuando el cliente se ejecuta, el CLR revisa la
versión del servidor indicada en el cliente y la
busca.
– El comportamiento por default, busca la versión exacta
indicada, si no se la encuentra falla la ejecución.
– Incluso en el caso del GAC, se pueden tener varias
versiones, ya que el strong name será diferente para cada
caso.
• No se rompe el código de clientes viejos.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
70
Control de Versiones (4): GAC
• Qué tal si descubrimos un error crítico y deseo
que todos los clientes usen una nueva versión
del assembly servidor?
– No es factible volver a compilar todos los clientes.
– Debo hacer que todos los clientes usen el nuevo servidor a
pesar que en sus manifiesto se indique otra versión.
• Podría ser que una nueva versión tenga un
error critico, y quiero que nuevos y viejos
clientes usen una versión anterior.
• La solución de .NET es usar “Archivos de
Configuración”
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
71
Control de Versiones (5): GAC
• Publisher Policy para todos los clientes de
assemblies en el GAC, utilizando el archivo
machine.config
– Archivo que tiene la configuración administrativa
de .NET para toda la máquina (XML).
– Usar mscorcfg.msc para manipular archivo.
• Disponible en Administrative Tools en Control
Panel
• Sirve par ver y añadir assemblies al GAC
– Se añade a la lista de “Configured Assemblies”
aquella cuyo comportamiento en lo referente a
versiones se desea modificar.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
72
Control de Versiones (6): GAC
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
73
Control de Versiones (7): GAC
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
74
Control de Versiones (8): GAC
• Se deben especificar las “binding policies”
• Se puede especificar la correspondencia entre:
– Una versión y otra.
– Entre un rango de versiones y una nueva.
• Cuando un cliente crea un objeto (especificando una
versión original), el CLR chequea el archivo de
configuración, detecta la publisher policy, y
automáticamente hace la sustitución.
• Se puede especificar el “codebase”, indicando de
donde se puede traer el código si todavía no está
presente en la máquina.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
75
Control de Versiones (9)
• Se desea que un cliente en específico utilice
una versión diferente.
– “Application Configuration File” (XML)
• Este archivo cambia la configuración de una
aplicación en particular.
–
–
–
–
Nombre: MiAplicacion.exe.config
Usar mscorcfg.msc para generar/manipular archivo.
Se crea en el directorio de trabajo de la aplicación.
Assembly a configurar puede estar en el GAC o en dir de la
aplicación.
• Añadir Aplicación al folder en mscorcfg.exe
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
76
Control de Versiones (10)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
77
Control de Versiones (11)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
78
Control de Versiones (12)
• Se puede especificar
otro lugar para el
nuevo assembly
(archivo en la misma
máquina o URL).
• El assembly original
podría continuar en el
mismo directorio que
el de la aplicación y
no habría conflicto.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
79
Control de Versiones (13)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
80
.NET Framework (1) :.NET y COM
• .NET Framework provee mecanismos de
interoperabilidad con COM (Component Object
Model) y COM+ (transacciones).
– Se puede acceder a servidores COM desde .NET,
utilizando envolturas (wrappers RCW) que dan la
ilusión de estar accediendo a un objeto .NET
cualquiera.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
81
.NET Framework (2) : NET y COM
• Se puede hacer que objetos .NET se
registren como objetos COM.
– Los clientes pueden ser escritos en otros lenguajes
como C++ o Visual Basic; para ellos los objetos
.NET parecen servidores COM comunes, gracias a
los CCW.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
82
.NET Framework: SEH (1)
• Structured Exception Handling
– Situación actual:
• SEH se usa para manejar errores durante ejecución.
• C++ y Java lo usan.
• Idea: generar un objeto que lleve información del error,
y se debe proveer un bloque de código para procesar
ese objeto.
• Se usan solo dentro de un determinado lenguaje.
– .NET permite manejar excepciones en todos los
lenguajes y entre los lenguajes.
– Toda excepción generada debe ser manejada, caso
contrario el CLR detiene la aplicación.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
83
.NET Framework: SEH (2)
• try/throw/catch/finally
• Se puede lanzar un objeto tipo
System.Exception.
– Se puede derivar nuevas clases en base a ésta.
• Problema: gracias al GC cualquier objeto
construido dentro del bloque try será liberado al
ocurrir una excepción.
– Si se desea que un objeto libere recursos de forma
determinística, esto no es posible porque no hubo oportunidad
de llamar a Dispose.
• Finalize se llamará en algún momento durante GC, pero
eso puede no ser lo deseado o adecuado.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
84
.NET Framework: SEH (3)
• Se usa un bloque finally
– Se garantiza que será llamado y puede ponerse
código de liberación de recursos, y no es
necesario esperar por la GC.
– Se puede tener finally combinado con catch, para
un mismo try.
• Dentro de un bloque try, se pueden lanzar
diferentes tipos de objetos de excepción; se
puede acompañar al try con varios catch, cada
un de los cuales procesa uno de los diferentes
tipos de excepción.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
85
.NET Framework (1): seguridad
• .NET Framework provee seguridad del código.
– Se puede especificar que es lo que puede hacer una
sección de código y que no.
– Ejemplo: Puedo especificar que se pueda leer archivos pero
no escribirlos.
• El CLR se encarga de hacer cumplir mis
especificaciones y bloquear cualquier intento fuera de lo
indicado en dichas especificaciones.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
86
.NET Framework (2): seguridad
• Previamente, se proveían mecanismos para tratar de
saber de donde provenía el código.
– Authenticode añadía una firma digital a los controles
ActiveX.
– La pregunta era se instala o no ?(todo o nada).
– Una vez instalado, no hay forma de evitar posibles daños
causados por el código.
• Se desea formas de restringir las operaciones de piezas
individuales de código, basados en el nivel de
“confianza” que se tiene en dicho código.
– Un control bajado del Internet pueda acceder a elementos
del interfaz de usuario pero no a archivos.
– Sistemas Operativos Windows no hacen esto; CLR si.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
87
.NET Framework (3): seguridad
• El CLR provee “code access security- CAS”
CAS
– Seguridad basada en lo que se le permite acceder
al código.
– Permite a un administrador especificar los
privilegios que cada assembly tiene, basado en el
nivel de confianza que tenga del assembly.
• Al hacer una llamada desde un assembly (A4),
para acceder a un recurso protegido, el CLR
chequea a ver si el administrador ha otorgado
los privilegios necesarios.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
88
.NET Framework (4): seguridad
• La llamada puede haber sido comandada
desde otro assembly (A3). Puede ser que
quien desencadeno la llamada (A3) no tenga
los privilegios necesarios y que la assembly
(A4) que accede al recurso si.
– A4 demanda que los que invoquen uno de sus métodos
tenga el permiso P.
• El CLR sigue la pista de que assembly invocó
a otro hasta llegar a la fuente (cabeza del
stack de llamadas).
– Se evita que alguien que no tenga los privilegios utilice a
otros que si tienen los privilegios necesarios.
– Esto puede hacer mas lento al sistema pero de otra manera
se dejaría un hueco en la seguridad.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
89
.NET Framework (5): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
90
.NET Framework (6): seguridad
• Política de seguridad (Security Policy).
– En archivos XML.
– Se administran gráficamente con “mscorcfg.msc”.
– Se administran con línea de comandos con
“caspol.exe”.
– Un conjunto de reglas configurables que indican
cuales assemblies pueden o no realizar tales o
cuales operaciones.
– Los permisos se otorgan al momento de cargar un
assembly.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
91
.NET Framework (7): seguridad
• Niveles de las políticas de seguridad:
– Enterprise (alto nivel)
– Machine
– User (bajo nivel)
• El valor de una configuración colocada a bajo nivel
puede incrementar las restricciones impuestas por un
valor colocado en un nivel mas alto, pero no lo
opuesto.
• Si a nivel de máquina se permite que un assembly
abra un archivo, a nivel de usuario se puede negar
este privilegio. Lo opuesto no se puede hacer.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
92
.NET Framework (8): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
93
.NET Framework (9): seguridad
• El administrador crea conjuntos de permisos
(permission sets).
– No se asignan permisos individuales a las
aplicaciones.
– El conjunto es el que se asigna a un assembly.
• Se provee una gama de permission sets
predefinidos:
– Desde Full trust (se puede hacer todo).
– Hasta Nothing (todo está negado incluso ejecutarse).
– No es posible modificar estos conjuntos, pero se
pueden hacer copias y modificar las copias. El
resultado son llamados named permission sets.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
94
.NET Framework (10): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
95
.NET Framework (11): seguridad
• Cada permission set consiste de 0 o mas
permisos (code access permissions).
– Un permiso es el derecho de usar cierta funcionalidad del
sistema; por ejemplo: las ventanas de diálogo para
manipular archivos.
• A su vez, cada permiso soporta una o mas
propiedades.
– Ejemplo: para las ventanas de diálogo para archivos, se
definir si se permite:
• Abrir
• Salvar
• Los dos anteriores
• Nada
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
96
.NET Framework (12): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
97
.NET Framework (13): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
98
.NET Framework (14): seguridad
• Resumen:
– Se ha visto como definir conjunto de permisos.
– No se ha asignado un conjunto a un assembly.
• Asignar conjunto de permisos a un assembly:
– A nivel individual, assembly por assembly (poco
utilizado).
– A nivel de grupos.
• Code groups:
groups grupos de assemblies, miembros
comparten un nivel común de privilegios.
– Son los que relacionan a los conjuntos de permisos con
los assemblies, basados en evidencia respecto a los
assemblies.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
99
.NET Framework (15): seguridad
• Evidencias:
– Strong name: simplemente el nombre mas versión y
llave pública.
– Publicante (publisher): si disponible es la firma
autenticode.
– Zona de origen: máquina local, Intranet Local, Internet.
– Ubicación de origen: el directorio del sistema de
archivos local, una URL.
• Algunas de las evidencias son mas fáciles de
falsificar que otras, aquí está la tarea del
administrador al definir una política.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
100
.NET Framework (16): seguridad
• No se puede esperar que cada vez que el browser
encuentre un componente en el Internet se dependa
del administrador, se quiere que esto se realice de
forma automática.
• Condiciones de membresía (membership conditions).
– Determinan los criterios para que un assembly se asige
a los grupos de código.
– Ejemplo de condición: “program zone”
• De donde vino el assembly ? El Internet, Intranet, mi
propia computadora, etc.
• Definidas las condiciones de membresía, se debe
asignar los conjuntos de permisos para los miembros
del grupo.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
101
.NET Framework (17): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
102
.NET Framework (18): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
103
.NET Framework (19): seguridad
• Es común que un assembly pertenezca a mas
de un grupo de código.
– Si bajo un componente de Microsoft, pertenecería a un
grupo de Microsoft y al del Internet.
– Los conjuntos de permisos se suman, y el resultado es el
que se aplica a un assembly.
• Si se escribe un programa y este no tiene los
suficientes privilegios, se podría escribir
código para informar que tiene y que le falta.
Se necesita interactuar con el sistema de
seguridad code-access.
– CLR tiene funciones y objetos para interacción.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
104
.NET Framework (20): seguridad
• En resumen: cada nivel de política (enterprise, machine,
user) consiste de una colección de grupos de código,
organizados jerárquicamente, y cada grupo tiene un
conjunto de permisos asociado.
• El .NET Framework encuentra todos los grupos en los
que encaja un assembly y realiza la unión de los
correspondientes conjuntos de permisos.
• Lo anterior se realiza para un nivel de política dado, y
luego continua con el siguiente nivel.
– Orden de evaluación: enterprise, machine, user.
• El conjunto de permisos resultante y que se aplica a un
assembly es la intersección de los resultados obtenidos
para cada nivel.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
105
.NET Framework (21): seguridad
• Ejemplo:
– Se presenta la jerarquía de grupos de
código.
– En la raíz se suele tener permisos muy
limitados o ninguno (como en la figura).
– Cuando se añaden mas nodos hijos, se
asignan mas y mas permisos, pero al
mismo tiempo se requiere evidencia mas
fuerte.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
106
.NET Framework (22): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
107
.NET Framework (23): seguridad
• Para un assembly con la evidencia indicada en
la figura:
Nothing U Execute U ( FileIO+Reflection)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
108
.NET Framework (24): seguridad
• Crear un aplicación con GUI: un botón y una
caja de texto multilínea.
– Probar la aplicación sin cambios en la configuración.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
109
.NET Framework (25): seguridad
• Se solicitan dos permisos:
– File IO para leer el directorio C:\WINNT
– Permiso para leer la variable de ambiente USERNAME
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
110
.NET Framework (26): seguridad
• Crear un directorio para definir una condición
en la cual los assemblies que corran desde
este directorio tengan ciertos permisos.
– C:\Test\PruebaPermisos
• Se crea un nuevo “permission set” con el
nombre “Test”
– Se quiere permitir a un assembly ejecutarse, acceder al
directorio C:\WINNT, leer la variable de ambiente
USERNAME, y crear elementos de interfaz de usuario.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
111
.NET Framework (27): seguridad
• Click con botón derecho del ratón sobre
“Permission Sets” y escoger “New”
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
112
.NET Framework (28): seguridad
• Luego de presionar “Next” y añadir “Security”.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
113
.NET Framework (29): seguridad
• Luego de añadir “File IO”.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
114
.NET Framework (30): seguridad
• Luego de añadir “Environment variables”
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
115
.NET Framework (31): seguridad
• Luego de añadir “User Interface”
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
116
.NET Framework (32): seguridad
• Se crea un nuevo “code group”
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
117
.NET Framework (33): seguridad
• Luego de presionar “Next”
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
118
.NET Framework (34): seguridad
• Luego de “Next” se asocia nuestro “permission
set”
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
119
.NET Framework (35): seguridad
• Ver “properties” del grupo y cambiar la opción:
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
120
.NET Framework (36): seguridad
• Si se ejecuta la aplicación todo debe
funcionar adecuadamente.
– Se cumple la condición de membresía al grupo
(que el assembly esté en un directorio
especificado).
– Se asoció al grupo el conjunto de permisos que
definimos (ningún otro conjunto se asocia):
• Ejecución y acceso al interfaz de usuario.
• También se garantizó acceso a un directorio y a
una variable de ambiente, que es lo que se
solicita dentro del programa.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
121
.NET Framework (37): seguridad
• Ahora se cambia el conjunto de permisos a
“Internet”.
– Se cumple la condición de membresía al grupo (que el
assembly esté en un directorio especificado).
– Se asoció al grupo el conjunto de permisos “Internet”:
• Este conjunto permite: ejecución y acceso al interfaz de
usuario.
• Pero NO garantiza acceso al directorio de interés ni a la
variable de ambiente, que es lo que se solicita dentro del
programa.
• Se obtendrán excepciones dentro de nuestro código, que
se reportan en la caja de texto.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
122
.NET Framework (38): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
123
.NET Framework (39): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
124
.NET Framework (40): seguridad
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
125
ASP.NET (1)
• Siguiente versión de ASP (Active Server
Pages).
• Alternativa a CGIs, ISAPIs, JSP.
• Para aplicaciones llamadas: Active Web
Applications o Web Form Applications
• Presentan su GUI como páginas web.
• Se ejecuta en IIS (Internet Information Server).
• Código se ejecuta en el lado del servidor.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
126
ASP.NET (2)
• Hace más fácil la tarea de escribir código para
generar dinámicamente páginas Web (en lugar de
HTML estático).
• Introduce nueva forma de escribir dicho código (code
behind) y asociarlo a peticiones de páginas.
• Introduce Web Forms que es un modelo de
programación basada en eventos para interactuar con
controles, haciendo que la programación de una página
web sea similar a desarrollar una forma en Visual Basic.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
127
ASP.NET (3)
• Proporciona soporte adecuado para seguridad y para
manejar el estado de una sesión.
• Introduce algunas mejoras en rendimiento
(performance) respecto ASP.
• Permite administrar fácilmente diferentes aspectos de
la aplicación Web.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
128
Servicios Web
• Forma para que servidores en el Internet expongan
su funcionalidad.
• Cualquier cliente, en cualquier máquina, utilizando
cualquier Sistema Operativo, puede consumir
Servicios Web.
• El cliente hace llamadas al servidor utilizando
XML/HTTP.
– SOAP (Simple Object Access Protocol)
• .NET ofrece facilidades para escribir Servicios Web.
• Clientes pueden ser aplicaciones con o sin interfaz de
usuario (comunicación máquina a máquina).
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
129
ADO.NET
• Muchas aplicaciones para el Internet emplean
gran parte del tiempo recopilando información
de un cliente, haciendo una petición a una
base de datos y presentando os resultados.
• ADO.NET provee un buen soporte para
acceso a bases de datos dentro de .NET
framework.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
130
Windows Forms (1)
• Facilitan escribir aplicaciones dedicadas
de cliente utilizando el .NET framework.
– Soporte para drag-and-drop, menús, barras de
herramientas y estado ( controles para GUI en
general).
– Soporte para manejar controles ActiveX.
– Soporte para impresión y vistas previas.
– Acceso fácil a bases de datos y Servicios Web.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
131
Windows Forms (2)
• La clase base que provee soporte para
albergar controles, adosamiento de ventanas
(docking) , y respuestas a eventos es:
System.Windows.Forms.Form
• Una aplicación basada en Win Forms, requiere
un hilo para correr un lazo de mensajes que
reciba mensajes del sistema operativo,
generados por la interacción con el usuario, y
los enrute a los manejadores adecuados.
– System.Windows.Forms.Applicattion.Run( )
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
132
Windows Forms (3)
• Se tiene a disposición un rico conjunto de
controles.
• En Visual Studio, la filosofía es similar ala de
Visual Basic: arrastrar controles de una barra
de herramientas a las formas y procesar los
eventos de dichos controles.
• A parte de solo insertar controles y manejar
eventos, hay soporte para:
– Dibujar
– Manejo de mouse, teclado
– Ventanas de diálogo.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
133
Controles Windows Forms y Web Forms
• Control: unidad con funcionalidad predefinida
para actividades de interfaz de usuario.
• Se ofrecen controles prediseñados y soporte
para el desarrollo de nuevos.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
134
Streams y documentos XML (1)
• XML es considerado como formato para transmitir
datos en Sistemas Distribuidos.
– Servicios Web,
– Serialización de datasets en XML para fácil transmisión.
• Aplicaciones que soporten XML.
– XML sirve par definir vocabularios para intercomunicarse entre
diferentes entidades de una industria en particular.
• ACORD XML para industrias de seguros
• XL7 (Health Level 7) para cuidado de la salud.
– No toda aplicación desea utilizar HTTP como mecanismo de
transporte.
– Se requiere una forma fácil de leer el contenido de documentos
XML que llegan y generar documentos XML para enviarlos.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
135
Streams y documentos XML (2)
• Soporte:
– Para serializar/deserializar objetos .NET a/de
documentos XML.
– Para ajustar los documentos generados a un
esquema predefinido, tal vez por otros.
– Usar herramienta que ajuste los documentos a un
esquema predefinido.
– A bajo nivel: parsers genéricos, sin optimizaciones
para tareas particulares, para generar y leer
documentos XML.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
136
Streams y documentos XML (3)
• Serializador .NET a XML
– System.Serialization.XmlSerializer
• Serialization: tomar cualquier objeto .NET, leer
sus propiedades, datos miembro y escribirlos a
un documento XML.
• Deserialization: tomar un documento XML, leer
su contenido y recrear un objeto del mismo tipo,
con los valores del objeto original.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
137
Streams y documentos XML (4)
• Serializador
– MiPunto es un objeto de la clase definida por nosotros
CPunto.
– El archivo en donde se guarda el resultado es xmlstream.
– El serializador para CPunto es serializer.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
138
Streams y documentos XML (5)
• Serializador
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
139
Streams y documentos XML (6)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
140
Streams y documentos XML (7)
• Serializador
– El proceso de creación del serializador es muy
costoso.
• Se lee los metadatos de la clase para encontrar
los nombres y tipos de variables y objetos.
• Se utiliza el API de Reflection.
• Costoso incluso para la clase CPunto.
– Se pueden reutilizar los serializadores.
• No es necesario crear uno cada vez.
• Se los puede crear al inicio de la aplicación y
mantenerlos
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
141
Streams y documentos XML (8)
• Control de documento XML generado
– Se requiere que salida .NET se ajuste a un
esquema dado.
– Se consigue con “programación con atributos”.
– Atributos son leídos de los metadatos de la clase.
– Ejemplo: Que los elementos de la clase CPunto (
X, Y) sean almacenados como atributos ( no
elementos).
• El resultado sería:
<CPunto m_X="114" m_Y="666" />
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
142
Streams y documentos XML (9)
• Control de documento XML generado
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
143
Streams y documentos XML (10)
• Control de documento XML generado
– Se puede serializar los miembros (X, Y) de la clase
punto ya sea como elementos o atributos.
– Puede ser necesario que durante ejecución se decida si
utilizar la opción elemento o atributo.
• Un punto puede ser de uno de dos tipos.
– Esto se puede hacer con atributos, listando todos los
posibles tipos que se puedan utilizar para la
serialización.
– Ejemplo: una clase rectángulo que requiere especificar
dos puntos.
• El tipo de los puntos es object para poder luego escoger
durante ejecución.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
144
Streams y documentos XML (11)
• Control de documento XML generado
– ElementPoint es una clase que permite serializar los
miembros X, Y como elementos.
– AttributePoint es una clase que permite serializar los
miembros X, Y como atributos.
– La lista de tipos se aplica a los dos puntos (caso único).
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
145
Streams y documentos XML (12)
• Control de documento XML generado
– Si no se conocen en tiempo de diseño todos los tipos
posibles:
• Sobreescribir los atributos en tiempo de ejecución.
• Poner los atributos en las variables: XmlAnyElement o
XmlAnyAttribute.
• Si se encuentra en un documento XML un tipo
desconocido, la serialización concluye.
– Otras funciones que se pueden realizar:
• Añadir namespaces a elementos y atributos.
• Serializar a tipos diferentes a los indicados en la clase
.NET
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
146
Streams y documentos XML (13)
• Esquemas y Serialización
– El esquema de un documento XML es la descripción,
(escrita también en XML), de todo lo que un documento
XML válido puede contener, en un vocabulario del
dominio de un problema particular.
• Especifica los nombres de los elementos, atributos,
frecuencia de ocurrencia, opciones, tipos de datos.
• Producido y distribuido por la agencia de estándares
que gobierna una industria en particular.
– Los documentos XML pueden ser muy grandes y
complejos (cientos de elementos son comunes).
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
147
Streams y documentos XML (14)
• Esquemas y Serialización
– Escribir una clase .NET que maneje adecuadamente
cada elemento o atributo es muy complicado.
– XSD.exe es una herramienta para generar
automáticamente :
• Clases .NET a partir de esquemas XML.
• Esquemas XML a partir de clases .NET, leídas
desde sus assemblies.
– El esquema describe los documentos que se generan cuando
se realiza serialización de objetos.
– Cualquiera que quiera enviarme un objeto CPunto serializado
en XML conoce como construir su documento XML, si el
esquema es publicado.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
148
Streams y documentos XML (15)
• Esquemas y Serialización
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
149
Streams y documentos XML (16)
• Esquemas y Serialización
– Se generan clases para el esquema de la figura de la
siguiente transparencia.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
150
Streams y documentos XML (17)
• Esquemas y Serialización
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
151
Streams y documentos XML (18)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
152
Streams y documentos XML (19)
• Soporte a bajo nivel: simples parsers
– Chequean si un documento está construido
adecuadamente, cuentan los < >, ven parejas de
nombres para las etiquetas, etc.
– Son genéricos, no ofrecen optimizaciones para
tareas particulares.
– Ofrecen un interfaz al cliente para leer/escribir.
– No ofrecen tipos de datos diversos; todo es un
string.
– A pesar de todo, son necesarios sino se tiene la
menor idea de la estructura del documento que se
procesara. Ejemplo: editor XML.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
153
Streams y documentos XML (20)
• Soporte a bajo nivel: simples parsers
– Implementación del DOM (Document Object
Model).
• Documento completo en memoria, ap
esar que se requiera nada mas una parte.
• Se lee el documento y se genera un árbol
con sus nodos representando elementos,
atributos y datos.
– System.Xml.XmlDocument (Load)
– System.Xml.XmlNode (Name, Value, ChildNodes)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
154
Streams y documentos XML (21)
• Soporte a bajo nivel: simples parsers
– Implementación alternativa:
• Mantiene en memoria solo partes del
documento.
• Para lectura:
– System.Xml.XmlTextReader
– System.Xml.XmlValidatingReader
• Para escritura:
– System.Xml.XmlTextWriter
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
155
Mecanismos de callback (1)
• Objeto A crea objeto B y hace llamadas a métodos de
B. Objeto B hace llamadas a funciones en su creador,
para notificar que algo interesante ha sucedido
(evento).
evento
– Disparar, señalar o levantar un evento.
• Mecanismos de callback previos:
– Enviar mensajes de Windows.
– “Punteros a función” para funciones de Win32.
– Puntos de conexión en COM.
• Mecanismos de descubrimiento:
– Ninguno para mensajes de Windows.
– Documentación escasa para API Win32.
– Librerías de tipos para COM.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
156
Mecanismos de callback (2)
• Nomenclatura: listener (receptor de eventos) es quien
desea recibir notificaciones del sender (generador de
eventos).
• En .NET se utilizan los mismos assemblies para
autodescripción de eventos que se generan.
– Esto permite descubrir los eventos que el sender
puede disparar.
– El descubrimiento puede ser en tiempo de diseño o
ejecución.
• En .NET, el listener provee al sender un objeto
delegado (delegate).
delegate
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
157
Mecanismos de callback (3)
• Un delegado (intermediario) es un objeto de
tipo System.Delegate (o derivados) que
encapsula la dirección de una función (puntero
a función) que debe ser implementada en el
listener.
– No se limita el mecanismo al uso de funciones
estáticas de clases sino que también se
pueden invocar funciones sobre objetos
individuales.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
158
Mecanismos de callback (4)
• El delegado tiene métodos que el sender
utiliza para hacer que se invoque la función en
el listener.
– El delegado tiene un puntero a la función en el listener.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
159
Mecanismos de callback (5)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
160
Mecanismos de callback (6)
• Ejemplo:
– En este ejemplo, el sender se lo implementa como
un componente, lo cual no es un requerimiento
para emplear eventos/delegados.
• Derivando de
System.ComponentModel.Component
– Se elige esta opción para aprovechar las
facilidades de Visual Studio:
• Poder agregar al componente a la “barra de
componentes” y visualmente agregarlo a la
forma.
• Usar los wizards para que generen código por
nosotros.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
161
Mecanismos de callback (7)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
162
Mecanismos de callback (8)
• Línea 1:
– Declara un delegado llamado
SomethingHappenedEventHandler
• Esto es el nombre de un nuevo tipo ( un nuevo
tipo de delegado).
– Esta línea combina la declaración del delegado
con la especificación del prototipo de la función
que el delegado encapsulará y que el listener
debe implementar.
• En este caso una función:
void F(DateTime)
• Estamos relacionado el delegado con el
prototipo de función que encapsula.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
163
Mecanismos de callback (9)
• Línea 2:
– Declara que el evento SomethingHappened
requiere un delegado de tipo
SomethingHappenedEventHandler.
– Especifica el delegado que el listener debe
implementar.
– Se puede tener varios eventos, con diferentes
nombres, que requieren el mismo tipo de
delegado.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
164
Mecanismos de callback (10)
• Con ILDASM se ve el código generado:
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
165
Mecanismos de callback (11)
• La línea 1 provoca que el compilador genere la
definición (de forma anidada) del tipo llamado
SomethingHappenedEventHandler que hereda
de System.MulticastDelegate.
– Lo de Multicast significa que puede mantener mas de
un puntero a función (delegado), pudiendo notificarse a
mas de un cliente.
• Se mencionó que el delegado tiene una
función (Invoke) que el sender utiliza para
hacer que se llame a la función encapsulada
por el delegado.
– Invoke es generada por el compilador como parte del
tipo SomethingHappenedEventHandler.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
166
Mecanismos de callback (12)
• La línea 2 hace que el compilador genere:
– La variable privada SomethingHappened de tipo
SomethingHappenedEventHandler (el rombo).
– Un método público add_SomethingHappened
que permite que los listeners se registren para recibir
eventos.
– Un método público
remove_SomethingHappened que permite que
los listeners retiren su interés de recibir eventos.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
167
Mecanismos de callback (13)
• Línea 2, sobre la variable generada:
– Esta variable es el objeto que en realidad sirve
para que el sender dispare el evento.
– Esta variable se inicializa en null.
– Esta variable no es una referencia a un solo
delegado sino es un referencia a la cabeza de
una lista entrelazada de delegados que desean
ser notificados de este evento.
– Como es privada, el listener no la puede usar
directamente.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
168
Mecanismos de callback (14)
• Línea 2 también hace que se presente el
símbolo de triángulo.
– Junto al triángulo se indica que el componente
dispara un evento llamado SomethingHappened.
– En la misma línea del triángulo se hace referencia a
un objeto de tipo SomethingHappenedEventHandler
que es el delegado que debe proveer el listener.
• Tomar en cuenta que tenemos el mismo
nombre asociado a una variable privada y
al evento (rombo y triangulo).
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Oct. 20042004-CICC
.NET
Escuela Polité
Politécnica Nacional
Quito - Ecuador
169
Mecanismos de callback (15)
• Línea 3:
– Para este ejemplo, el listener puede invocar esta
función para que a su vez el componente dispare
el evento hacia el mismo listener.
• SomethingHappened(DateTime.Now);
– Da la impresión de usar el delegado como una
función, lo cual no es correcto, pues no existe
ninguna función llamada SomethingHappened.
– El compilador sabe que existe una variable con
una referencia a un delegado, y se encarga de
generar código para usar Invoke. Algo como:
SomethingHappened.Invoke(DateTime.Now);
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
170
Mecanismos de callback (16)
• Para el listener,
se crea una
WinForm con un
simple botón.
• Se agrega
nuestro
componente a la
“barra de
WinForms”.
– Ubicar el
assembly en el
directorio
respectivo.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
171
Mecanismos de callback (17)
• Se agrega el componente a la Forma.
– Como no tiene GUI, se presenta en la parte inferior.
– En la lista de eventos se visualiza SomethingHappened y
podemos agregar la función que procese este evento.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
172
Mecanismos de callback (18)
Visual Studio añadió:
• Visual Studio añadió la función que le
indicamos en respuesta al evento; en este
caso la llamamos OnEvent:
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
173
Mecanismos de callback (19)
• Para conectar la función OnEvent (nuestra
función) al evento disparado por el sender,
Visual Studio agrega el siguiente código:
• Aquí se construye el delegado, que toma
como argumento la función que encapsula.
• Luego se registra el interés en el evento.
• La sintaxis (y por el nombre) da la idea que
estoy accediendo a la variable privada o al
evento, lo que no es correcto.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
174
Mecanismos de callback (20)
• El compilador traduce la línea de código
anterior en algo como:
• El compilador de C# provee sobrecargas de
los operadores += y -= para nuestro
delegado.
– Internamente add_XX y remove_XX utilizan las
funciones Delegate.Combine y Delegate.Remove
para crear cadenas de delegados (lista
entrelazada).
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
175
Mecanismos de callback (21)
• Este código (que crea el delegado y usa +=)
es lo que deberíamos agregar manualmente si
no tuviésemos la ayuda de Visual Studio.
– Es decir, si no tuviésemos nuestro sender como un
componente.
• Resumen:
– En sender solo se han agregado tres líneas para
emplear los mecanismos de callback.
– En listener no ha sido mucho el código agregado.
– Muchas cosas se realizan con el ambiente de
desarrollo, el compilador pero sobre todo gracias al
soporte que brinda .NET
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
176
Mecanismos de callback (22)
• Llamadas a funciones sincrónicamente.
– Se invoca una función y se espera por su retorno
antes de seguir con la siguiente línea de código.
– Si tengo que procesar mensajes de interfaz de
usuario, no lo puedo hacer.
– Puede usarse múltiples hilos de ejecución
(threads).
• No aconsejable si la aplicación es bastante
sencilla.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
177
Mecanismos de callback (23)
• Llamadas a funciones asincrónicamente.
– Se invoca una función y se retorna inmediatamente.
– Esto se lo puede hacer utilizando delegados que
tiene funciones que facilitan la tarea.
– BeginInvoke
• El cliente invoca la función y ésta retorna
inmediatamente.
• El hilo del cliente queda libre para realizar otras
operaciones (actualizar UI).
• Hace que la función se ejecute en un hilo diferente
(thread parte de un pool de threads del sistema,
creado para este objetivo).
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
178
Mecanismos de callback (24)
• La función ejecutándose en el hilo secundario
termina y entrega los resultados al delegado.
• EndInvoke
– El cliente debe llamar esta función para recolectar el
resultado.
– Si el resultado no está listo esta función se
BLOQUEA, hasta que el resultado esté disponible.
– Cómo estar seguros que el resultado está listo?
• System.IAsyncResult result ;
• result = DELEGADO.BeginInvoke(…) ;
• result.IsCompleted; //bool
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
179
Mecanismos de callback (25)
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
180
Mecanismos de callback (26)
• Con delegados las funciones se invocan:
– Sincrónicamente (se hizo en los ejemplos con
eventos).
– Asincrónicamente (BeginInvoke + EndInvoke).
– Asincrónicamente con notificación automática,
proporcionando un delegado (AsyncCallback) con la
función (MyOwnCallback) a BeginInvoke.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
181
Código Multithreading
• Era difícil escribir código debido al bajo nivel
de soporte ofrecido por el Sistema Operativo
(SO).
• .NET framework permite utilizar con mayor
facilidad las capacidades multithreading del
SO.
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
182
Visual Studio (1): Documentación
• Documentación XML.
– La idea es documentar los programas a medida que se los
escribe.
– Similar a la idea de javadoc.
• Procesar etiquetas especiales dentro del código fuente y
luego generar páginas HTML.
– Diferente en dos aspectos:
• El procesamiento lo hace el mismo compilador, no una
herramienta separada.
• Se genera XML en lugar de HTML.
– El texto a procesarse se señala en comentarios especiales
“///”.
• Ejemplo: /// <summary>
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
183
Visual Studio (2): Documentación
• Si se ponen tres “/”, Visual Studio genera
automáticamente lo señalado:
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
184
Visual Studio (3): Documentación
• Para generar la documentación XML:
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
185
Visual Studio (4): Documentación
Oct. 20042004-CICC
.NET
Ivá
Iván Bernal, Ph.D.
Ph.D.
http://
wwwfie.epn.edu.ec//ibernal
http://wwwfie.epn.edu.ec
Escuela Polité
Politécnica Nacional
Quito - Ecuador
186

Documentos relacionados