Dce1 introduccion microsoft.net

284 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
284
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Esta presentación constituye el material teórico, y está acompañada de una aplicación de ejemplo descargable por separado y que ilustra de manera práctica los conceptos más relevantes. Es altamente recomendable que descargue, instale, revise y ejecute la aplicación de ejemplo para poder obtener un conocimiento más completo de los temas que se explicarán a lo largo de este curso.
  • Si bien solemos tener la sensación de que los paradigmas de programación de tecnologías Microsoft se encuentran en constante cambio, la realidad nos muestra que los grandes cambios vienen ocurriendo aproximadamente cada 10 años. Uno de ellos se dio a finales de la década de 1990 y principios de la década del 2000, con el desarrollo y la introducción al mercado de la plataforma Microsoft .NET. Hubo varios factores que motivaron al desarrollo de esta plataforma, entre los cuales podemos mencionar:
    La amplia disponibilidad de conexiones a Internet de alta velocidad, e incluso inalámbricas
    La proliferación de nuevos tipos de dispositivos de hardware que son usados en la vida diaria (teléfonos inteligentes, Pocket PC’s, HandHelds, Media Centers, etc.)
    El creciente poder de cómputo de las computadoras personales y servidores basados en arquitecturas x86.
    El surgimiento de estándares de Internet para permitir la comunicación e integración entre diversas plataformas de software
  • Antes de decir qué es .NET, es conveniente aclarar qué NO es .NET:
    .NET no es un sistema operativo, como si lo es Microsoft Windows en sus distintas versiones.
    .NET no es un Lenguaje de Programación: si bien la plataforma Microsoft .NET incluye lenguajes de programación de aplicaciones, su concepto es más amplio y va más allá de éstos.
    .NET no es un Entorno de Desarrollo: si bien la plataforma Microsoft .NET incluye entornos de desarrollo integrados (IDEs), su concepto es más amplio y va más allá de éstos.
    .NET no es un servidor de aplicaciones (Application Server)
    .NET no es un producto empaquetado que se pueda comprar como tal, sino que es una plataforma que engloba distintas aplicaciones, servicios y conceptos y que en conjunto permiten el desarrollo y la ejecución de aplicaciones.
  • Microsoft .NET es una plataforma de desarrollo y ejecución de aplicaciones. Esto quiere decir que no sólo nos brinda todas las herramientas y servicios que se necesitan para desarrollar modernas aplicaciones empresariales y de misión crítica, sino que también nos provee de mecanismos robustos, seguros y eficientes para asegurar que la ejecución de las mismas sea óptima. Los componentes principales de la plataforma .NET son:
    Un entorno de ejecución de aplicaciones, también llamado “Runtime”, que es un componente de software cuya función es la de ejecutar las aplicaciones .NET e interactuar con el sistema operativo ofreciendo sus servicios y recursos.
    Un conjunto de bibliotecas de funcionalidades y controles reutilizables, con una enorme cantidad de componentes ya programados listos para ser consumidos por otras aplicaciones.
    Un conjunto de lenguajes de programación de alto nivel, junto con sus compiladores y linkers, que permitirán el desarrollo de aplicaciones sobre la plataforma .NET.
    Un conjunto de utilitarios y herramientas de desarrollo para simplificar las tareas más comunes del proceso de desarrollo de aplicaciones
    Documentación y guías de arquitectura, que describen las mejores prácticas de diseño, organización, desarrollo, prueba e instalación de aplicaciones .NET
    A lo largo de esta presentación se analizará cada uno de estos puntos con mayor detalle.
    Por otra parte, .NET representa la evolución COM (Component Object Model), la plataforma de desarrollo de Microsoft anterior a .NET y sobre la cual se basaba el desarrollo de aplicaciones Visual Basic 6 (entre otros tantos lenguajes y versiones).
  • Describiremos a continuación algunas de las características principales de la plataforma Microsoft .NET:
    Se dice que es una plataforma de ejecución intermedia, ya que las aplicaciones .NET no son ejecutadas directamente por el sistema operativo, como ocurre en el modelo tradicional de desarrollo. En su lugar, las aplicaciones .NET están diseñadas para ser ejecutadas contra un componente de software llamado Entorno de Ejecución (muchas veces también conocido como “Runtime”, o , “Máquina Virtual”). Este componente es el encargado de manejar el ciclo de vida de cualquier aplicación .NET, iniciándola, deteniéndola, interactuando con el Sistema Operativo y proveyéndole servicios y recursos en tiempo de ejecución.
    La plataforma Microsoft .NET está completamente basada en el paradigma de Orientación a Objetos (para más información acerca de este tema puede consultar el material de estudio de la Estrella 0 del programa)
    .NET es multi-lenguaje: esto quiere decir que para poder codificar aplicaciones sobre esta plataforma no necesitamos aprender un único lenguaje específico de programación de alto nivel, sino que se puede elegir de una amplia lista de opciones. Veremos este tema con mayor detalle más adelante en la presentación.
    .NET es una plataforma que permite el desarrollo de aplicaciones empresariales de misión crítica, entendiéndose por esto que permite la creación y ejecución de aplicaciones de porte corporativo que sean críticas para la operación de tipos variados de organizaciones. Si bien también es muy atrayente para desarrolladores no profesionales, estudiantes y entusiastas, su verdadero poder radica en su capacidad para soportar las aplicaciones más grandes y complejas.
  • .Net fue diseñado de manera tal de poder proveer un único modelo de programación, uniforme y consistente, para todo tipo de aplicaciones (ya sean de formularios Windows, de consola, aplicaciones Web, aplicaciones móviles, etc.) y para cualquier dispositivo de hardware (PC’s, Pocket PC’s, Teléfonos Celulares Inteligentes, también llamados “SmartPhones”, Tablet PC’s, etc.). Esto representa un gran cambio con respecto a las plataformas anteriores a .NET, las cuales tenían modelos de programación, bibliotecas, lenguajes y herramientas distintas según el tipo de aplicación y el dispositivo de hardware.
    Uno de los objetivos de diseño de .NET fue que tenga la posibilidad de interactuar e integrarse fácilmente con aplicaciones desarrolladas en plataformas anteriores, particularmente en COM, ya que aún hoy existen una gran cantidad de aplicaciones desarrolladas sobre esa base.
    .NET no sólo se integra fácilmente con aplicaciones desarrolladas en otras plataformas Microsoft, sino también con aquellas desarrolladas en otras plataformas de software, sistemas operativos o lenguajes de programación. Para esto hace un uso extensivo de numerosos estándares globales que son de uso extensivo en la industria, y acerca de los cuales iremos aprendiendo a lo largo del curso. Algunos ejemplos de estos estándares son XML, HTTP, SOAP, WSDL y UDDI.
  • En el diagrama podemos ver que la plataforma Microsoft.NET es denominada “de Ejecución Intermedia” justamente porque se ubica entre el Sistema Operativo y las aplicaciones finales con las que interactúan los usuarios, actuando como intermediario entre ambos.
  • El .NET Framework (traducido como “Marco de Trabajo”) es el componente fundamental de la plataforma Microsoft .NET, necesario tanto para poder desarrollar aplicaciones como para poder ejecutarlas luego en entornos de prueba o producción.
    El .NET framework tiene tres variantes principales, todas descargables gratuitamente desde Internet
    .NET Framework Redistributable Package: este es el mínimo componente de la plataforma .NET que se necesita para poder ejecutar aplicaciones. Normalmente ésta es la variante que se instala en los entornos productivos, una vez que el desarrollo y las pruebas de la aplicación han finalizado.
    Está compuesto por:
    El entorno de ejecución de la plataforma .NET
    Las bibliotecas de funcionalidad reutilizable
    .NET Framework SDK: esta versión contiene herramientas de desarrollo de línea de comandos (compiladores, depuradores, etc.), documentación de referencia, ejemplos y manuales para desarrolladores de aplicaciones. Normalmente ésta variante se instala en los entornos de desarrollo de aplicaciones, y es más útil a los programadores que a los usuarios finales. Para poder instalar la versión SDK (Software Development Kit) es necesario instalar previamente el Redistributable Package.
    .NET Compact Framework: esta es una versión reducida del .NET Framework Redistributable, especialmente pensada para ser instalada en dispositivos móviles como Pocket PC’s y SmartPhones.
    El .NET Framework puede ser instalado en cualquier sistema operativo de la familia Windows superior a Windows 98. Para más información acerca de los prerrequisitos se puede consultar:
    http://msdn.microsoft.com/netframework/technologyinfo/sysreqs/default.aspx
    Actualmente, Windows 2003 Server y Windows XP SP2 traen el .NET Framework preinstalado. Para más información acerca de las descargas gratuitas, por favor consulte http://msdn.microsoft.com/netframework/downloads/updates/default.aspx
  • El .NET Framework debe estar instalado en cualquier dispositivo de hardware para que la ejecución de una aplicación .NET sea posible. En el caso de las aplicaciones de escritorio (también llamadas “De Formularios Windows”) y las aplicaciones de consola (aplicaciones cuya interfaz de usuario es una consola de comandos), el Framework debe estar presente del lado del cliente (computadora donde se ejecuta la parte de la aplicación que interactúa con el usuario), y en el servidor sólo en caso de que la aplicación sea distribuída y tenga parte de su funcionalidad centralizada en una única computadora.
    En el caso de las aplicaciones Web, el único requisito del lado del cliente es tener un navegador y una conexión de red al servidor, el cual debe tener instalado el .NET Framework. Veremos más sobre aplicaciones Web a lo largo del curso.
    Para las aplicaciones móviles, que se ejecutan sobre Windows Mobile en algún dispositivo tipo Pocket PC o SmartPhone, es necesario tener instalado el .NET Compact Framework en el dispositivo.
  • Actualmente hay 3 versiones de la plataforma Microsoft .NET:
    La versión 1.0: fue liberada a principios del año 2002, e incluía la versión 1.0 del .NET Framework, la versión 2002 de Visual Studio y varios lenguajes de programación nuevos compatibles con la plataforma (como C#.NET y Visual Basic.NET)
    La versión 1.1: fue liberada en 2003, aproximadamente un año después que su predecesora. Esta versión introdujo el .NET Framework 1.1 junto con Visual Studio .NET 2003, la primer versión del .NET Compact Framework y un nuevo lenguaje de programación llamado J#.NET.
    La versión 2.0: fue liberada a finales del año 2005, y es la primer gran renovación que sufrió la plataforma en su tiempo de vida. Con la idea de ser una “evolución” en lugar de una “revolución”, esta versión trajo consigo las versiones 2.0 del .NET Framework y el .NET Compact Framework, asi como también una nueva versión de Visual Studio.
    Ya existen planes en desarrollo para la próxima generación de la plataforma .NET, nombre código “Orcas”, que verá la luz aproximadamente al mismo tiempo que el sistema operativo Windows Vista.
  • En la figura se pueden apreciar las distintas partes que componen al .NET Framework, incluídas el entorno de ejecución de aplicaciones (CLR, en verde), el conjunto de bibliotecas de funcionalidad reutilizable (.NET Framework Class Library, en azul) y los compiladores y herramientas de desarrollo para los lenguajes .NET (en rojo). Todos estos componentes se motan por encima de la familia de sistemas operativos Windows.
    Dentro del conjunto de la .NET Framework Class Library se distinguen 4 sub-componentes principales:
    La Base Class Library (BCL - Biblioteca de Clases Base), que contiene la funcionalidad más comunmente utilizada para el desarrollo de todo tipo de aplicaciones. Algunos ejemplos de la funcionalidad provista por la BCL son el manejo de colecciones, cadenas de texto, entrada/salida, threading, operaciones matemáticas y dibujos 2D.
    ADO.NET, que contiene un conjunto de clases que permiten interactuar con bases de datos relacionales y documentos XML como repositorios de información persistente.
    ASP.NET, que constituye la tecnología dentro del .NET Framework para construir aplicaciones con interfaz de usuario Web (es decir, aplicaciones cuya lógica se encuentra centralizada en uno o varios servidores y que los clientes pueden acceder usando un browser o navegador mediante una serie de protocolos y estándares como HTTP y HTML).
    Windows Forms (o simplemente WinForms), que constituye la tecnología dentro del .NET Framewok que permite crear aplicaciones con interfaz de usuario basada en formularios y ventanas Windows de funcionalidad rica y que se ejecutan directamente en los clientes.
  • El modelo de ejecución que propone la plataforma .NET se suele definir como “virtual”, o “de máquina virtual”, ya que las aplicaciones no son desarrolladas directamente contra las APIs de programación expuestas por el sistema operativo, ni es éste el que se encarga de su ejecución y ciclo de vida, sino que .NET provee un entorno de ejecución (el CLR) que corre por sobre el sistema operativo y que es el encargado de ejecutar las aplicaciones y proveerles servicios en tiempo de ejecución. A los componentes de software que se ejecutan de esta manera se los conoce comúnmente como “componentes manejados”, ya que su ejecución es controlada por un entorno intermedio. En la figura podemos ver las diferencias entre las arquitecturas de ejecución de los componentes tradicionales (como los COM) y los componentes manejados.
    Una de las principales ventajas de contar con una plataforma virtual es que no están “atadas” de ninguna forma con el sistema operativo y la plataforma de hardware subyacente. Es sabido que una aplicación compilada para que utilice directamente las APIs y servicios expuestas por un sistema operativo “x” muy difícilmente pueda ser ejecutada en otro sistema operativo distinto sin ser recompilada. Las aplicaciones manejadas, en cambio, descansan la tarea de su compilación a un código de máquina específico en el entorno de ejecución. De esta manera, si existen distintos entornos de ejecución intermedia para diferentes Sistemas Operativos, la misma aplicación puede ejecutarse en todos ellos si necesidad de recompilarse.
  • Ya hemos visto como el CLR actúa como un motor de ejecución de aplicaciones y componentes manejados. Veamos ahora algunos de los principales servicios que les brinda a las aplicaciones que se ejecutan sobre él:
    Compilación Just In Time (o Justo A Tiempo): el CLR se encarga de compilar las aplicaciones .NET a código de máquina nativo para el sistema operativo y la plataforma de hardware en la que se está ejecutando. Esto lo hace sin intervención alguna del desarrollador o el usuario, y solamente a medida que se necesita.
    Gestión Automática de Memoria: el CLR abstrae a los desarrolladores de tener que pedir y liberar memoria explícitamente. Para esto, uno de sus componentes llamado Garbage Collector (Recolector de Basura) se encarga de liberar periódicamente la memoria que ya no está siendo usada por ninguna aplicación. Por otra parte, el CLR también abstrae a los desarrolladores del uso de punteros y del acceso a memoria de bajo nivel. Si bien estas características pueden ser consideradas poderosas, suelen hacer el desarrollo y mantenimiento de aplicaciones más propenso a errores y menos productivo.
    Gestión de Errores Consistente: como las aplicaciones .NET no se ejecutan directamente contra el Sistema Operativo, cualquier error no manejado que ocurra en tiempo de ejecución será atrapado por el CLR en última instancia, no afectando a ninguna otra aplicación que se esté ejecutando ni teniendo efecto alguno sobre su estabilidad.
    Ejecución Basada en Componentes: todas las aplicaciones .NET son empaquetadas en componentes reutilizables denominados genéricamente Assemblies, que el CLR se encarga de cargar en memoria y ejecutar. Profundizaremos sobre este tema más adelante en el curso.
    Gestión de Seguridad: el CLR provee una barrera más de contención a la hora de ejecutar aplicaciones manejadas, ya que permite establecer políticas de seguridad muy detalladas que las aplicaciones .NET que se ejecuten en una determinada computadora deberán cumplir.
    Multithreading: el CLR provee un entorno de ejecución multi-hilos por sobre las capacidades del Sistema Operativo, asi como también mecanismos para asegurar su sincronización y acceso concurrente a recursos compartidos.
  • En la figura podemos apreciar los disintos componentes internos que constituyen el CLR, cada uno de los cuales tiene un propósito específico. Iremos hablando de ellos a lo largo del curso, explicando sus funciones y detalles.
  • El desarrollo de una aplicación .NET comienza con la escritura de su código fuente en alguno de los lenguajes de alto nivel soportados por la plataforma. El mismo luego es compilado obteniendose un ejecutable (que en Windows normalmente llevan la extensión .exe) o una biblioteca (que en Windows normalmente llevan la extensión .dll). A estos componentes .NET resultantes del proceso de compilación se los denomina genéricamente Assemblies, o Ensamblados.
    Ahora bien, en lugar de contener código de máquina específico para el sistema operativo y el hardware en el cual fueron compilados (nativo), los assemblies contienen un código denominado MSIL (Microsoft Intermediate Language). EL MSIL es un set de instrucciones independientes de cualquier CPU existente y que puede ser convertido a código nativo muy eficientemente. MSIL incluye instrucciones para cargar, almacenar, inicializar e interactuar con objetos y sus atributos y métodos, asi como también instrucciones aritméticas y lógicas, control de flujo, acceso directo a memoria, manejor de errores y otras operaciones. Antes de que el código MSIL pueda ser ejecutado debe convertirse a código nativo específico para un CPU y Sistema Operativo, tarea a cargo de los compiladores JIT incluidos en el CLR.
  • Aqui podemos ver el tradicional método que imprime “Hola Mundo” por consola escrito en MSIL. Como se puede apreciar, el MSIL tiene ciertas similitudes con el assembler de x86, y en cierta forma podemos decir que es análogo a un assembler para la máquina virtual que constituye el CLR. Se puede apreciar también que el CLR se comporta como una máquina “de stack”, en la cual las instrucciones se van apilando y desapilando de a una para lograr la funcionalidad deseada.
    Todos los compiladores de todos los lenguajes .NET producen código MSIL como salida, ya que es el único lenguaje capaz de ser comprendido e interpretado por el CLR.
    El .NET Framework SDK incluye herramientas para obtener el código MSIL a partir de un ejecutable o biblioteca (ildasm.exe) y para generar un ejecutable o biblioteca a partir de un archivo fuente MSIL (ilasm.exe). Para más información sobre estas y otras herramientas se puede consultar la documentación del SDK o el siguiente sitio web:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconNETFrameworkTools.asp
  • Un Assembly es la menor unidad de ejecución y distribución de una aplicación .NET.
    Los assemblies son reutilizables, versionables y autodescriptivos, ya que no sólo contienen el código MSIL que representa la lógica de la aplicación, sino que también incluyen información sobre si mismos y sobre todos los recursos externos de los que dependen para funcionar correctamente. A esta información se la denomina “MetaData” , y forma una parte integral de un assembly junto con el código MSIL ya que ambos no pueden estar separados. La MetaData se ubica en una sección especial del Assembly denominada “Manifest”, o “Manifiesto”, y es utilizada por el CLR a la hora de cargar y ejecutar el Assembly.
    La herramienta ildasm.exe (Intermediate Languaje Dissasembler, incluida en el .NET Framework SDK) puede utilizarse para inspeccionar la metadata de un assembly.
  • Una aplicación .NET se compone, entonces, de uno o más assemblies. Otra de las características de los Assemblies es que no necesitan estar registrados en la Registry de Windows, como sus predecesores COM. De esta forma, instalar una aplicación .NET puede ser tan simple como copiar todos los assemblies necesarios a la computadora de destino, y basta con borrarlos a todos para tener una desinstalación limpia y completa.
    Dado que .NET no depende de la Registry, y que cada assembly contiene información acerca de su versión y las versiones de los componentes de que depende, múltiples versiones de assemblies pueden coexistir sin ningún problema en la misma computadora.
    Existen dos formas de que una aplicación pueda encontrar en tiempo de ejecución los assemblies de los que depende:
    Ubicarlos en el mismo directorio. Esta es la opción preferida si esos assemblies sólo serán utilizados por esa única aplicación.
    Ubicarlos en un repositorio centralizado de assemblies denominado Global Assembly Cache, en el cual se instalan todos los assemblies que serán utilizados por múltiples aplicaciones en la misma computadora. Para registrar un assembly en el GAC es necesario utilizar otra herramienta incluida en el SDK llamada gacutil.exe.
  • De muy poco serviría a los desarrolladores el contar con una plataforma de ejecución de aplicaciones tan sofisticada y robusta como el CLR sin tener además un conjunto de funcionalidades y componentes empaquetados listos para aprovechar y reutilizar en sus aplicaciones. Justamente ese es el propósito de la .NET Framework Class Library (Biblioteca de Clases del .NET Framework), que provee cientos de tipos básicos (clases e interfaces principalmente) orientados a objetos, extensibles mediante herencia, independientes del lenguaje de programación de alto nivel que se desee utilizar y organizados en namespaces jerárquicos.
  • En la figura se aprecian los principales namespaces de la biblioteca de clases .NET:
    System: raíz de todos los otros namespaces, y dentro del cual podemos encontrar la mayoria de los namespaces correspondientes a la Base Class Library
    System.Data y System.Xml: en conjunto, estos dos namespaces constituyen la tecnología conocida como ADO.NET
    System.Web: dentro de este namespace se encuentran todos los tipos necesarios para programar aplicaciones y servicios web ASP.NET
    System.Windows.Forms: dentro de este namespace se encuentran todos los tipos necesarios para programar aplicaciones de escritorio basadas en formularios y ventanas Windows.
  • Uno de los objetivos de diseño de la plataforma .NET fue el ser independiente del lenguaje de programación elegido para el desarrollo de aplicaciones. Para lograr esto es que se creó la Especificación de Lenguaje Común (o CLS, por sus siglas en inglés), que define y estandariza un subconjunto de todas las características soportadas por el CLR y que son necesarias en la mayoría de las aplicaciones. Todos los componentes desarrollados y compilados de acuerdo con la especificación CLS pueden interactuar entre si, independientemente del lenguaje de programación de alto nivel en el que fueron escritos.
    Junto con el .NET Framework, Microsoft provee implementaciones de 4 lenguajes compatibles con CLS, junto con sus compiladores:
    Microsoft Visual Basic .NET
    Microsoft Visual C# .NET
    Microsoft Visual J#.NET
    Microsoft Visual C++.NET
    Esto quiere decir que una aplicación escrita, por ejemplo, en Visual Basic.NET, puede incorporar sin problemas nuevas partes escritas en C# o C++ .NET.
    Para obtener más información acerca de la CLS puede consultar el siguiente sitio web:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconwhatiscommonlanguagespecification.asp
  • Dado que la especificación CLS es un estándar disponible públicamente, ha sido posible que otros diseñadores de lenguajes y compiladores desarrollaran más de una veintena de lenguajes compatibles con la especificación, y por ende interoperables entre si y con los lenguajes desarrollados por Microsoft.
  • Un punto importante a destacar es que la elección del lenguaje de alto nivel en el que debe escribirse una aplicación .NET prácticamente ha sido reducida a una cuestión de gustos personales y comodidad con la sintaxis. No hay prácticamente motivos tecnológicos sobresalientes que inclinen la balanza hacia algún lenguaje en particular, al menos entre los ofrecidos por Microsoft. Todos utilizan el mismo runtime, todos utitlizan el mismo conjunto de bibliotecas de la misma forma, no existen diferencias notorias de performance entre ellos, todos tienen la misma potencia y todos tienen la misma capacidad de acceso a los recursos y servicios que expone el .NET Framework. De hecho, al cargar y ejecutar un assembly el CLR no sabe en qué lenguaje de programación de alto nivel éste fue escrito, ya que lo que el recibe como entrada es código MSIL.
  • La infraestructura de lenguaje común (Common Language Infrastructure, CLI) es una especificación estandarizada que describe un entorno virtual para la ejecución de aplicaciones, cuya principal característica es la de permitir que aplicaciones escritas en distintos lenguajes de alto nivel puedan luego ejecutarse en múltiples plataformas tanto de hardware como de software sin necesidad de reescribir o recompilar su código fuente.
    Si bien el CLI tuvo sus orígenes en Microsoft (en principio se pensaba desarrollar un entorno de ejecución compartido para COM con el nombre de Common Object Runtime, que luego de extendió y generalizó para dar lugar a CLI), sus especificaciones fueron llevadas ante ECMA (European Computer Manufacturers Association), una importante organización europea de estándares, para su estandarización en el año 2000. Luego de un año de trabajo conjunto entre ECMA, Microsoft y otras empresas que co-sponsorearon el proceso (Intel, HP, IBM y Fujitsu entre otras), el estándar ECMA-335 que define el entorno CLI finalmente vio la luz en diciembre de 2001. En abril del año 2003 ISO ratificó este estándar con el denominación ISO/IEC 23271:2003 .
    Para comprender mejor la inclusión de cada una de las partes principales de la arquitectura de CLI es interesante analizar los objetivos de diseño que se plantearon desde su concepción. Según su especificación, la arquitectura de CLI debe:
    Permitir escribir componentes ínter operables independientemente de la plataforma subyacente y del lenguaje de programación utilizado.
    Exponer todas las entidades programáticas a través de un único sistema unificado de tipos (en la especificación, este sistema es conocido como CTS, o Common Type System).
    Empaquetar todos los tipos en unidades completamente auto descriptivas y portables.
    Cargar los tipos de forma tal que se encuentren aislados unos de otros en tiempo de ejecución, pero que puedan a su vez compartir recursos.
    Resolver dependencias entre tipos en tiempo de ejecución usando una política flexible que pueda tener en cuenta la versión, atributos de localización y políticas administrativas.
    Ejecutar aplicaciones bajo la supervisión de un entorno privilegiado que permita controlar y hacer cumplir políticas en tiempo de ejecución.
    Diseñar toda la infraestructura y servicios basándose en metadatos extensibles, de manera tal que toda la arquitectura pueda acomodarse con poco impacto a nuevas incorporaciones y cambios.
    Poder realizar tareas de bajo nivel, como carga de tipos en memoria, linkeo con librerías y compilación a código nativo sólo cuando sea necesario (este enfoque se conoce típicamente como “on demand”, o “just in time”).
    Proveer una serie de funcionalidades comunes mediante un grupo de librerías de programación que los desarrolladores puedan utilizar para construir sus aplicaciones.
    Microsoft .NET de hecho es un súper conjunto de esta especificación, es decir, provee todo lo necesario para cumplir con la misma y además agrega una serie de herramientas, librerías y funcionalidades no contempladas por ella originalmente y que proveen una enorme utilidad y flexibilidad a los desarrolladores (por ejemplo, librerías para la creación de aplicaciones y servicios web, acceso a motores de bases de datos, controles gráficos, herramientas para desensamblar assemblies, debuggers, etc.). Si bien es gratuito, su código fuente no es abierto, y es distribuido por Microsoft en versiones para sistemas operativos Windows 98 y sus sucesores únicamente.
    Para conocer otra implementación desarrollada por Microsoft de la especificación CLI distinta a .NET puede consultar: msdn.microsoft.com/net/sscli/
    Para conocer más detalles acerca de .NET y la especificación CLI puede consultar http://msdn.microsoft.com/netframework/ecma
  • La figura representa el modelo de compilación y ejecución de aplicaciones .NET, al cual muchas veces se denomina “de compilación diferida”, o “de compilación en dos etapas”. Esto es asi ya que el primer paso para poder ejecutar una aplicación dentro del CLR es compilar su código fuente para obtener un assembly con código MSIL. Este paso es realizado por cada uno de los compiladores de los distintos lenguajes de alto nivel soportados por .NET.
    Luego, el CLR se encarga de compilar el código MSIL a código nativo que hace uso específico de los servicios del sistema operativo y la plataforma de hardware subyacente.
    Todos los compiladores de los nuevos lenguajes .NET de Microsoft siguen este modelo de ejecución, con excepción de C++ .NET, que es el único lenguaje al que se le ha dejado la capacidad de emitir también código “no manejado”. Esto se debe a que ciertas aplicaciones, como los drivers de dispositivos, necesitan tener acceso a los recursos del sistema operativo a muy bajo nivel para lograr un rendimiento óptimo y mayor performance.
  • Aqui podemos ver el modelo de ejecución del CLR en acción. Sus tres pasos principales son:
    Desarrollo, cuya salida es una aplicación .NET compuesta de uno o más assemblies
    Instalación o Deployment: es el proceso de instalar y configurar la aplicación .NET en el dispositivo físico en el que debe ejecutarse
    Ejecución: aqui es donde los componentes del CLR empiezan a actuar, cargando el assembly en memoria, revisando su metadata y política de seguridad para ver si puede ejecutarse o no, cargando las clases y compilándolas luego a código nativo a medida que se las va utilizando.
  • Los sistemas operativos y los entornos de ejecución normalmente proveen alguna forma de aislamiento entre aplicaciones, lo cual es necesario para asegurar que una aplicación no pueda afectar de manera negativa a otra que se está ejecutando simultáneamente.
    Un Application Domain (o Frontera de Aplicación) es la mínima unidad de aislamiento de aplicaciones dentro del CLR, y todos los assemblies que conforman una aplicación siempre son cargados dentro de uno. El aislamiento entre aplicaciones garantiza que:
    Una aplicación pueda ser detenida independientemente del resto
    Una aplicación no pueda acceder diractamente a código en ejecución o recursos de otra aplicación (el CLR prohibe invocaciones directas entre objetos cargados en distintos Application Domains)
    Una falla en una aplicación no afecte al resto de las aplicaciones en ejecución.
    Para más información acerca de los Application Domains puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconapplicationdomains.asp o consultar la sección
    .NET Framework >  Inside the .NET Framework > Application Domains del .NET Framework SDK.
  • El sistema operativo Windows no provee soporte para ejecutar directamente una aplicación .NET mediante el CLR, sino que este soporte es provisto por los llamados “CLR Hosts”.
    Un CLR Host en una aplicación responsable por cargar el CLR en un proceso del sistema operativo, crear los application domains necesarios dentro de ese proceso y ejecutar la aplicación dentro de los application domains.
    Para más información acerca de los CLR Hosts puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/library/en-us/cpguide/html/cpconruntimehosts.asp
  • El sistema común de tipos, conocido como CTS, provee una definición común de los tipos de datos básicos que utiliza el CLR. El CTS posibilita, entre otras cosas, que todos los lenguajes de alto nivel que compilan contra una plataforma CLI compartan el mismo sistema de tipos de datos, permitiendo lograr una mejor interoperabilidad.
    El CTS define como se declaran, usan y manejan en tiempos de ejecución los tipos de datos orientados a objetos que formarán el núcleo de cualquier aplicación manejada.
    Para más información acerca de CTS puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/library/en-us/cpguide/html/cpconcommontypesystemoverview.asp
  • El CLR administra dos segmentos de memoria, los cuales son utilizados de distinta forma a lo largo del ciclo de vida de una aplicación:
    El Stack, o Pila: es una sección de memoria que almacena los “tipos de valor” (Value Types), llamados asi porque tanto su referencia como su valor se encuentran en la misma posición de memoria. Ejemplos de tipos por valor en el CLR son los caracteres, los números enteros y los booleanos. A estos tipos de dato también se los conoce como “tipos primitivos”. El stack se comporta como una lista LIFO (Last In – First Out), donde se van apilando valores uno encima de otro y sólo se puede recuperar un valor desapilando los que tiene por encima. La memoria ocupada por los Value Types es liberada automáticamente por el CLR una vez que se finaliza el procedimiento o el bloque de código donde fueron declarados.
    El Heap, o “Montón”: es unas sección de memoria que almacena los “tipos de referencia” (Reference Types), llamados asi porque su almacenamiento se encuentra dividido
    En el stack se almacena una referencia al contenido de la variable
    En el heap se guarda el valor propiamente dicho de la variable
    Ejemplos de tipos por referencia son los Strings (cadenas de caracteres) y cualquier tipo de dato definido por el usuario (por ejemplo clases e interfaces que se creen a lo largo del desarrollo de una aplicación).
    La memoria ocupada por los Reference Types es liberada automáticamente por el Garbage Collector del CLR, de manera no determinística (esto quiere decir que no se puede tener conocimiento acerca de en qué momento se liberará la memoria). El CLR no puede ser invocado por los desarrolladores, y nuca debe hacerse ninguna presuposición acerca de cuándo y cómo se ejecutará.
  • Como ya hemos mencionado, la Base Class Library constituye los fundamentos de la .NET Framework Class Library, ya que provee la mayor parte de las funcionalidades elementales que pueden necesitarse para construir una aplicación o servicio. En la figura se pueden apreciar los namespaces más importantes que componen la BCL.
    Para más información acerca de estos namespaces y sus funcionalidades incluídas puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/netframework/programming/bcl/default.aspx
  • ADO.NET es un subconjunto de la .NET Framework Class Library, que contiene todas las funcionalidades necesarias para conectarse e interactuar con dos tipos de repositorios permamentes de información:
    Bases de Datos, como Microsoft SQL Server (clases del namespace System.Data, que se encuentran compiladas en System.data.dll)
    Archivos XML (clases del namespace System.XML, que se encuentran compiladas en System.Xml.dll)
    Una descripción detallada acerca del modelo relacional de bases de datos está fuera del alcance del presente curso. Para obtener más información al respecto puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/data/DataFundamentals/databasefundamentals/default.aspx
    Una descripción detallada acerca del formato XML está fuera del alcance del presente curso. Para obtener más información al respecto puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/XML/Understanding/default.aspx
    Para más información acerca de ADO.NET puede consultarse el siguiente sitio web: http://msdn.microsoft.com/library/en-us/cpguide/html/cpconoverviewofadonet.asp
    Encontrará esta misma información en la siguiente sección de la documentación del .NET Framework SDK:
    .NET Framework >  Programming with the .NET Framework >  Accessing Data with ADO.NET
    Comenzaremos a hablar del acceso a bases de datos relacionales en primera instancia.
  • En la actualidad se plantean dos tipos de escenarios de acceso a bases de datos relacionales. El primero de ellos es el que se conoce como “Escenario Conectado”, ya que en él se requiere una conexión física establecida con el servidor de datos durante todo momento para poder efectuar cualquier consulta o actualización sobre los datos.
    Esto tiene algunas ventajas y también sus desventajas.
    Algunas Ventajas:
    Al haber una única conexión a la base de datos por usuario, o incluso a veces por aplicación, establecida permanentemente, puede llegar a resultar más sencillo administrar la seguridad y el acceso al servidor de datos. Lo mismo ocurre con el control de concurrencia: en un escenario donde múltiples usuarios se estuvieran conectando y desconectando permanentemente para realizar distintas acciones, este control sería más difícil de llevar.
    Siempre la aplicación tiene acceso a los datos actualizados
    Algunas Desventajas:
    Se requiere una conexión abierta todo el tiempo con el servidor de base de datos, lo cual consume recursos innecesariamente si no se la está utilizando.
    La escalabilidad del acceso a los datos se ve limitada por la cantidad de conexiones establecidas simultáneamente contra el servidor de base de datos.
  • El segundo escenario de acceso a bases de datos relacionales se conoce como “Escenario Desconectado”, ya que en él una parte de los datos del servidor central se copia localmente y puede luego ser consultada y actualizada sin contar con una conexión abierta. Luego si se desea puede establecerse una conexión con el servidor de base de datos para sincronizar los cambios efectuados sobre la copia local y actualizar los datos. Este tipo de funcionalidad es particularmente útil para escenarios de usuarios móviles, que salen de su oficina con una laptop, un SmartPhone o una PocketPC y desean poder continuar trabajando por más que no tengan conectividad física con el servidor de base de datos ubicado en la red interna de la empresa.
    Algunas ventajas que provee un escenario de acceso a datos desconectado son:
    La posibilidad de trabajar sobre los datos independientemente del resto de los usuarios de la aplicación
    Mayor escalabilidad en el acceso a datos y utlización más óptima de recursos del servidor, ya que se mantiene en un mínimo indispensable la cantidad y duración de conexiones abiertas.
    Mayor performance, al trabajar con una copia local de los datos.
    Algunas Desventajas:
    Puede ocurrir que en un momento dado un usuario no esté accediendo a los datos más actualizados del repositorio central
    Al momento de sincronizar los cambios efectuados localmente contra el repositorio central pueden surgir conflictos, los cuales deben ser resueltos manualmente.
    ADO.NET soporta el acceso a datos tanto en escenarios conectados como desconectados.
  • La arquitectura de ADO.NET está basada en el concepto de proveedores de acceso a datos, siendo un proveedor un conjunto de clases que permiten conectarse a una base de datos, ejecutar un comando sobre ella y tener acceso a los resultados de su ejecución, tanto de forma conectada como desconectada. En las proximas diapositivas hablaremos con más detalle de estos proveedores y las clases que los componen.
    Para más información acerca de la arquitectura de ADO.NET puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/library/en-us/cpguide/html/cpconadonetarchitecture.asp
    Encontrará esta misma información en la siguiente sección de la documentación del .NET Framework SDK:
    Programming with the .NET Framework >  Accessing Data with ADO.NET >  Overview of ADO.NET
  • Los proveedores de acceso a datos ADO.NET (conocidos como “Managed Data Providers”) representan conjuntos específicos de clases que permiten conectarse e interactuar con una base de datos, cada uno utilizando un protocolo particular. El .NET Framework incluye cuatro proveedores de acceso a datos, que en conjunto le permiten conectarse e interactuar virtualmente con cualquier base de datos existente en la actualidad:
    Data Provider For SQL Server: es el proveedor de acceso nativo a servidores de bases de datos Microsoft SQL Server 7.0 o superior, y Microsoft Access. Al conectarse via protocolos nativos de bajo nivel, povee la alternativa más performante para conexiones contra estos motores de bases de datos. Sus clases se encuentran en el namespace System.Data.SqlClient.
    Data Provider For OLE DB: es el proveedor de acceso a datos que permite interactuar via el protocolo estándar OLE DB con cualquier repositorio de datos que lo soporte. Sus clases se encuentran en el namespace System.Data.OleDb.
    Data Provider For ODBC: es el proveedor de acceso a datos que permite interactuar via el protocolo estándar ODBC con cualquier repositorio de datos que lo soporte. Sus clases se encuentran en el namespace System.Data.Odbc.
    Data Porvider For Oracle: es el proveedor de acceso nativo a bases de datos Oracle, desarrollado por Microsoft utilizando las herramientas de conectividad de Oracle. De esta forma puede lograrse un acceso más performante a bases de datos Oracle desde aplicaciones .NET que utilizando ODBC u OLE DB. Sus clases se encuentran en el namespace System.Data.OracleClient, y están compiladas en un assembly diferente al resto: System.Data.OracleClient.dll.
    ADO.NET provee una arquitectura extensible, posibilitando que terceras partes creen sus propios proveedores de acceso nativo para aplicaciones .NET. Algunos ejemplos de esto son:
    Data Provider For DB2, desarrollado por IBM
    Oracle Data Provider For .NET, desarrollado por Oracle
    Providers de acceso nativo a bases de datos OpenSource, como MySQL y PostgreSQL
    Es importante volver a destacar que utilizando estos proveedores de acceso a datos cualquier aplicación .NET puede utilizar casi cualquier base de datos relacional existente en la actualidad como respositorio de información persistente (esto incluye, además de MS SQL Server, a IBM DB2, Oracle, Sybase, Informix, TeraData, MySQL y PostgreSQL, entre otras).
    Para más información acerca de los proveedores puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/library/en-us/cpguide/html/cpconadonetproviders.asp
    Encontrará esta misma información en la siguiente sección de la documentación del .NET Framework SDK:
    .NET Framework >  Programming with the .NET Framework >  Accessing Data with ADO.NET >  Overview of ADO.NET
  • En la figura se pueden apreciar las clases más comunes que componen a todos los proveedores de acceso a datos de ADO.NET. Nótese que algunos nombres empiezan con las letras “Xxx”: esto se debe a que los nombres de esas clases varían según el proveedor específico que se esté utilizando. Por ejemplo, la clase que representa una conexión con la base de datos usando el Data Provider For Sql Server es “SqlConnection”, mientras que si usamos el Data Provider For Oracle podemos obtener la misma funcionalidad de la clase “OracleConnection”. Mas allá del ejemplo, pasemos a describir cada una de estas clases y su funcionalidad:
    XxxConnection: representa una conexión. Almacena, entre otras cosas, el string de conexión (connection string), y permite conectarse y desconectarse con una base de datos.
    XxxCommand: permite almacenar y ejecutar una instrucción SQL contra una base de datos, enviando parámetros de entrada y recibiendo parámetros de salida.
    Estas dos clases se utilizan tanto en escenarios conectados como desconectados.
    XxxDataReader: permite acceder a los resultados de la ejecución de un comando contra la base de datos de manera read-only (sólo lectura), forward-only (sólo hacia adelante). Esta clase se utiliza en escenarios conectados, ya que no es posible operar sobre los registros de un DataReader estando desconectado de la fuente de datos.
    XxxDataAdapter y DataSet: en conjunto, estas clases constituyen el corazón del soporte a escenarios desconectados de ADO.NET. El DataSet es una representación en memoria de una base de datos relacional, que permite almacenar un conjunto de datos obtenidos mediante un DataAdapter. El DataAdapter actúa como intermediario entre la base de datos y el DataSet local desconectado. Una vez que el DataSet se encuentra lleno con los datos que se necesitan para trabajar, la conexión con la base de datos puede cerrarse sin problemas y los datos pueden ser modificados localmente. Por último, el DataAdapter provee un mecanismo para sincronizar los cambios locales contra el servidor de base de datos. Nótese que la clase System.Data.DataSet no tiene el prefijo Xxx, ya que es independiente del proveedor de acceso a datos utilizado.
  • Como ya se ha mencionado, el DataSet es una representación residente en memoria de datos relacionales, independiente de la base de datos y del protocolo utilizado para interactuar con la misma. Un DataSet, al igual que una base de datos, está compuesto por un conjunto de tablas (colección de clases “DataTable”), cada una de las cuales está compuesta a su vez por un conjunto de filas (colección de clases “DataRow”) y columnas (colección de clases “DataColumn”). Dentro de un DataSet pueden establecerse relaciones entre DataTables, y hasta restricciones de integridad referencial (Claves Primarias y Foráneas). Internamente, los DataSets representan toda su estructura y datos contenidos en formato XML.
    Para más información acerca de los proveedores puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/library/en-us/cpguide/html/cpcontheadonetdataset.asp
    Encontrará esta misma información en la siguiente sección de la documentación del .NET Framework SDK:
    .NET Framework >  Programming with the .NET Framework >  Accessing Data with ADO.NET >  Overview of ADO.NET
  • ADO.NET es el sucesor de ADO (ActiveX Data Objects), la biblioteca de acceso a datos de la plataforma COM. Si bien ADO soporta sólo escenarios conectados, puede resultar útil hacer una analogía de las clases más comunes utilizadas en ADO con respecto a sus nuevas versiones en ADO.NET:
    La clase Connection de ADO tiene su paralelo en las clases XxxConnection de los distintos proveedores de ADO.NET
    La clase Command de ADO tiene su paralelo en las clases XxxCommand de los distintos proveedores de ADO.NET
    La clase Recordset de ADO dejó de existir como tal en ADO.NET. En su lugar existen en ADO.NET las clases XxxDataReader (es lo más parecido a un Recordset read-only forward-only de ADO), y las nuevas clases DataSet y XxxDataAdapter para escenarios desconectados.
  • En la diapositiva se listan los pasos genéricos que habría que seguir para conectarse con una base de datos utilizando el modelo conectado. Para ver un ejemplo práctico de uso le recomendamos descargar la aplicación de ejemplo que acompaña el material teórico del presente curso.
  • En la diapositiva se listan los pasos genéricos que habría que seguir para conectarse con una base de datos utilizando el modelo desconectado. Se verán ejemplos prácticos de uso más adelante a lo largo del curso.
  • Las clases que se muestran en la diapositiva ilustran una parte del extenso soporte a XML provisto por el .NET Framework, que va desde la simple lectura de un documento XML a su navegación, búsqueda y transformaciones complejas.
    XmlReader – clase abstracta cuyo propósito es proveer un mecanismo de lectura forward-only de un documento XML. Tiene tres clases derivadas:
    XmlTextReader – utilizada para leer datos de un documento XML o un stream. Se utiliza normalmente cuando la performance de lectura es un factor clave y todo el sobreprocesamiento de DOM debe evitarse.
    XmlValidatingReader – similar a XmlTextReader, pero pensada para validaciones DOM.
    XmlNodeReader – permite leer datos de un nodo XML.
    XmlTextWriter – permite que datos XML puedan ser escritos a un archivo XML o a un stream, y puede además proveer mecanismos de validación para asegurar que sólo datos XML válidos y bien formados sean escritos.
    XmlDocument – esta es una clase compleja que actúa como un contenedor de datos XML, representando en un modelo de objetos en memoria toda la esctructura de un documento XML. Esto permite tener facilidades de navegación y edición, pero a un cierto costo de performance y consumo de recursos.
    DocumentNavigator – permite navegar libremente la estructura de un documento XML una vez que ha sido cargado dentro de una instancia de la clase XmlDocument.
  • El namespace System.Windows.Forms contiene las clases necesarias para crear aplicaciones basadas en formularios y ventanas de Windows, que aprovechan al máximo todas las posibilidades que el sistema operativo Windows tiene para ofrecer en términos de interfaz de usuario. Entre estas clases podemos encontrar además formularios, cuadros de diálogo y controls gráficos necesarios para construir una interfaz de usuario rica.
    Windows Forms será visto con mayor detalle en el módulo correspondiente a la Estrella 2 del presente curso.
    Para más información y recursos acerca de Windows Forms pueden consultarse los siguientes sitios web:
    http://www.windowsforms.net/
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsforms.asp
    Encontrará esta misma información en la siguiente sección de la documentación del .NET Framework SDK:
    .NET Framework >  Reference >  Class Library
  • ASP.NET es un subconjunto de la .NET Framework Class Library que contiene las funcionalidades necesarias para desarrollar aplicaciones y servicios Web, y sus clases se encuentran dentro del namespace System.Web. ASP.NET no es sólo la nueva versión de su predecesor, ASP, sino que provee un nuevo modelo unificado de programación orientada a objetos que permite hacer uso de todos los servicios y facilidades del .NET Framework programando en cualquier lenguaje compatible con la plataforma. Por otra parte, nuevos servicios a nivel de infraestructura (seguridad, performance, estabilidad, configuración, instalación, mantenimiento) hacen que ASP.NET sea ideal para construir aplicaciones web de porte empresarial y misión crítica.
    ASP.NET será vista con mayor detalle en el módulo correspondiente a la Estrella 2 del presente curso.
    Para más información y recursos acerca de ASP.NET pueden consultarse los siguientes sitios web:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconintroductiontoasp.asp
    http://www.asp.net
    Encontrará esta misma información en la siguiente sección de la documentación del .NET Framework SDK:
    .NET Framework >  Building Applications >  Creating ASP.NET Web Applications
  • Resumiremos a continuación algunas de las principales ventajas que ofrece la plataforma Microsoft .NET según los temas que se han ido tocando a lo largo del curso.
  • Una de las principales ventajas de .NET es que unifica los modelos de programación, bibliotecas de funcionalidad y entornos de ejecución que existían anteriormente para distintos tipos de aplicaciones y distintos dispositivos.
    Anteriormente a .NET existían lenguajes, bibliotecas, entornos de ejecución y herramientas de desarrollo distintas y específicas para cada tipo de aplicación y dispositivo (Visual Basic, Visual C++, ASP/VBScript, Embedded Visual C++, etc.).
    .NET unifica todos esos modelos de programación ofreciendo una única API, un único entorno de ejecución, un único conjunto de bibliotecas y una única herramienta de desarrollo para cualquier tipo de aplicación.
  • Una de las principales ventajas de la plataforma .NET es que ofrece un modelo de desarrollo simplificado, basado en objetos que utilizan un sistema unificado de tipos de datos y se empaquetan en componentes reutilizables y auto descriptivos (los assemblies).
  • Otra de las principales ventajas con las que cuenta la plataforma .NET es su robusto entorno de ejecución (el CLR), que provee servicios a las aplicaciones en ejecución y maneja su ciclo de vida reforzando la seguridad y abstrayendo a los programadores de optimizaciones y manejos de memoria de bajo nivel.
  • Otra de los grandes beneficios de .NET es su soporte a múltiples lenguajes de programación, lo cual acelera la curva de aprendizaje de los desarrolladores permitiendo que cada uno elija en base a sus gustos personales. Además, la posibilidad de utilizar las mismas herramientas de programación y tener las mismas capacidades de acceso a la plataforma independientemente del lenguaje le proporcionan una flexibilidad sin precedentes.
  • .NET también simplifica, gracias al uso de assemblies auto-descriptivos, la instalación y administración de aplicaciones resolviendo gran parte de los problemas existentes en COM en lo que respecta la registración de componentes, manejo de múltiples versiones en paralelo y compatibilidad de aplicaciones.
  • Todas las clases incluidas en el .NET Framework son extensibles mediante los mecanismos de herencia propios de la orientación a objetos. Esto posibilita que funcionalidades o controles gráficos que no cumplan exactamente con una determinada necesidad pueden ser extendidos para agregarle o modificarle comportamiento sin tener que escribir todo el código nuevamente.
  • La plataforma .NET provee un altísimo grado de interoperabilidad con otras aplicaciones:
    Interoperabilidad entre aplicaciones .NET escritas en distintos lenguajes
    Interoperabilidad entre aplicaciones .NET y aplicaciones COM, mediante un módulo del CLR llamado COM-Interop. Esto permite reutilizar y aprovechar aplicaciones o componentes existentes desarrollados sobre la plataforma COM (por ejemplo Visual Basic 6).
    Interoperabilidad entre aplicaciones .NET y múltiples tipos de aplicaciones desarrolladas sobre otras plataformas de software o hardware, incluso plataformas no Microsoft, mediante la tecnología de Servicios Web XML. Se tratará el tema de Servicios Web XML con mayor detalle en los módulos correspondientes a las próximas estrellas del presente curso.
  • Visual Studio es la herramienta de desarrollo por excelencia de la plataforma .NET, siendo una herramienta única que permite desarrollar cualquier tipo de aplicación (Web, Windows, de Consola, para dispositivos Móviles, para Microsoft Office, de Bases de Datos y más) en cualquiera de los lenguajes .NET provistos por Microsoft (C#, VB.NET, C++.NET y J#).
    La familia de Visual Studio 2005 tiene un producto a la medida de las necesidades y posibilidades de cada tipo de desarrollador, partiendo de la línea gratuita de versiones “Express” a una suite completa de productos destinada a grandes equipos de desarrollo denominada “Visual Studio Team System”.
  • Para descargar y aprender más acerca de Visual Web Developer 2005 Express Edition, Visual Basic 2005 Express Edition, Visual C# 2005 Express Edition, Visual C++ 2005 Express Edition, y Visual J# 2005 Express Edition puede consultar el siguiente sitio web:
    http://msdn.microsoft.com/vstudio/express/default.aspx
    A lo largo del curso utilizaremos las versiones “Express”, por ser de acceso libre y gratuito, aunque normalmente se podrán realizar los ejericios y ver las aplicaciones de ejemplo en cualquier producto de la familia de Visual Studio 2005 (en caso contrario se indicará apropiadamente).
  • SQL Server 2005 Express Edition es parte de la familia de productos del más nuevo y sofisticado motor de bases de datos relacional de Microsoft: SQL Server 2005.
    Al igual que su predecesor, el MSDE, esta herramienta es gratuita y royalty free (se puede embeber en aplicaciones comerciales sin pagar regalías a Microsoft). Esta edición express tiene ciertas limitaciones que la hacen inapropiada para soportar la operatoria de una organización, pero puede ser utilizada perfectamente como base de datos de escritorio, prueba o desarrollo. A lo largo del curso utilizaremos esta versión de SQL Server, por se de acceso libre y gratuito, aunque normalmente se podrán realizar los ejericios y ver las aplicaciones de ejemplo en cualquier producto de la familia de SQL Server 2005 (en caso contrario se indicará apropiadamente).
    Para descargar y aprender más acerca de SQL Server 2005 Express Edition puede consultar el siguiente sitio web:
    http://msdn.microsoft.com/vstudio/express/sql/
  • Veremos a continuación algunas de las más importantes novedades introducidas en la versión 2.0 del NET Framework, disponible a partir de Noviembre de 2005. Nos concentraremos en las novedades a nivel CLR y ADO.NET 2.0, ya que en los módulos correspondientes a las próximas estrellas se tratarán las novedades de, entre otras cosas, WindowsForms 2.0 y ASP.NET 2.0.
    Para una lista completa de novedades y mejoras en el .NET Framework 2.0 puede consultarse el siguiente sitio web:
    http://msdn2.microsoft.com/en-us/library/t357fb32(en-US,VS.80).aspx
    La misma información puede consultarse en el SDK del .NET Framework 2.0, en la sección:
    .NET Framework > What's New in the .NET Framework > What's New in the .NET Framework Version 2.0
  • El .NET Framework 2.0 introduce el concepto de generics, permitiendo la creación de código más flexible y reutilizable. Por generics en realidad se entiende a una característica del CLR que permite declarar clases, estructuras, interfaces y métodos sin especificar en tiempo de compilación los tipos de datos que almacenan o utilizan, y especificando en su lugar parámetros “genéricos”. Los tipos reales de los datos se especifican cuando el tipo genérico es utilizado y no cuando es declarado, permitiendo definirlo una única vez y utilizarlo muchas veces con parámetros de distinto tipo.
    Generics está soportado directamente por el CLR, aunque sólo se puede hacer uso de esta característica desde Visual Basic.NET, C# y C++ .NET.
    Para obtener más información acerca de generics puede consultarse el siguiente sitio web:
    http://msdn2.microsoft.com/en-us/library/ms172193.aspx
    La misma información se encuentra disponible en la siguiente sección del .NET Framework 2.0 SDK:
    .NET Framework > Core Development Technologies > Development Fundamentals > Generics
  • Al definir una clase genérica especificamos un contenedor, o parámetro de tipo genérico, para los tipos de dato que ésta almacenará y utilizará. Este parámetro de tipo genérico se identifica con la letra “T”.
    Al crear una instancia de una clase genérica se debe especificar el tipo de dato real que será utilizado en lugar del parámetro de tipo genérico. De esta forma, el tipo de dato que definamos al instanciar la clase genérica reemplazará al tipo genérico en todos los lugares donde éste aparezca.
    Para ver más ejemplos sobre el uso práctico de generics es recomendable revisar el código fuente de la aplicación de referencia que acompaña el presente módulo del curso.
  • Al definir una clase genérica especificamos un contenedor, o parámetro de tipo genérico, para los tipos de dato que ésta almacenará y utilizará. Este parámetro de tipo genérico se identifica con la letra “T”.
    Al crear una instancia de una clase genérica se debe especificar el tipo de dato real que será utilizado en lugar del parámetro de tipo genérico. De esta forma, el tipo de dato que definamos al instanciar la clase genérica reemplazará al tipo genérico en todos los lugares donde éste aparezca.
    Para ver más ejemplos sobre el uso práctico de generics es recomendable revisar el código fuente de la aplicación de referencia que acompaña el presente módulo del curso.
  • El .NET Framework 2.0 incluye en el namespace System.Collections.Generic una serie de colecciones genéricas que, siempre que sea posible, deberían ser utilizadas en lugar de sus equivalentes de System.Collections. En la tabla se pueden ver las nuevas colecciones e interfaces genéricas, junto con sus equivalentes no genéricas del namespace System.Collections.
    Las colecciones de System.Collections están preparadas para recibir y devolver un System.Object (clase base de todas las clases .NET), y dejan a responsabilidad de los desarrolladores el casteo al tipo de dato correspondiente al obtener un elemento determinado. Las colecciones genéricas, en cambio, son fuertemente tipadas, ya que al momento de instanciarse se define el tipo de dato de los objetos que almacenará, y el compilador hace uso de esa definición para permitir insertar y obtener solamente elementos de ese tipo sin tener que realizar ninguna conversión.
  • Las dos desventajas principales de la utilización de de colecciones no genéricas son:
    Performance: como almacenan System.Object, cualquier tipo por referencia que agregue a la colección será casteado automáticamente a un Object, y cualquier tipo por valor deberá ser convertido su correspondiente tipo por referencia para ser casteado luego a Object (a esta operación se la conoce como Boxing). Los casteos y operaciones de boxing/unboxing necesarias para insertar y obtener elementos de las colecciones no genéricas tienen un impacto negativo en la performance de las mismas.
    Falta de validación en tiempo de compilación: al almacenar objetos de tipo System.Object, no hay forma de que el compilador valide que los datos que se están insertando en una colección sean válidos para la aplicación.
    Estos dos problemas se solucionan, como se puede apreciar en el ejemplo de código fuente, con el uso de las colecciones genéricas.
  • Las dos desventajas principales de la utilización de de colecciones no genéricas son:
    Performance: como almacenan System.Object, cualquier tipo por referencia que agregue a la colección será casteado automáticamente a un Object, y cualquier tipo por valor deberá ser convertido su correspondiente tipo por referencia para ser casteado luego a Object (a esta operación se la conoce como Boxing). Los casteos y operaciones de boxing/unboxing necesarias para insertar y obtener elementos de las colecciones no genéricas tienen un impacto negativo en la performance de las mismas.
    Falta de validación en tiempo de compilación: al almacenar objetos de tipo System.Object, no hay forma de que el compilador valide que los datos que se están insertando en una colección sean válidos para la aplicación.
    Estos dos problemas se solucionan, como se puede apreciar en el ejemplo de código fuente, con el uso de las colecciones genéricas.
  • .NET 2.0 proporciona soporte nativo a las nuevas plataformas de procesadores y sistemas operativos de 64 bits, mejorando la performance, estabilidad y rendimiento de aplicaciones de procesamiento intensivo y alto uso de memoria.
    Para obtener más información acerca del soporte para plataformas de 64 bits puede consultarse el siguiente sitio web:
    http://msdn.microsoft.com/netframework/programming/64bit/default.aspx
    La misma información se encuentra disponible en la siguiente sección del .NET Framework 2.0 SDK:
    .NET Framework > Core Development Technologies > 64-bit Applications
  • En las versiones 1.x del CLR las clases deben definirse en su totalidad dentro de un único archivo fuente que se compila como una unidad. Existen casos donde se necesita o se quiere definir una clase en más de un archivo, como por ejemplo en escenarios donde interviene un generador automático de código. Para posibilitar esto la versión 2.0 del CLR incorpora el concepto de Tipos Parciales: con sólo agregar la palabra “partial” a la definición de la clase se está indicando que hay partes de la definición de la misma en otros archivos. Esta característica también puede resultar útil a la hora de querer que múltiples desarrolladores trabajen en partes distintas de la misma clase utilizando mecanismos de control de versiones.
    Para obtener más información acerca de los tipos parciales pueden consultarse los siguientes sitios web:
    http://msdn2.microsoft.com/en-us/library/wa80x488.aspx
    http://msdn2.microsoft.com/en-us/library/yfzd5350.aspx
  • Este ejemplo de código ejemplifica el uso de los tipos parciales, y muestra algunos de los errores más comunes:
    Error 1: causado por la falta de la palabra “partial” en la definición de la clase
    Error 2: causado por la re-declaración de la variable i, declarada previamente en Demo.Part2.cs
    Error 3: causado por la falta del “using System” en Demo.Part3.cs. Por más que se esté haciendo un using del namespace System en Demo.Part1.cs, cada parte debe escribir los nombres completos de cada clase o declarar sus propios “using”.
  • Aqui vemos la versión VB.NET del ejemplo de la diapositiva anterior. Los errores 1 y 3, que se producían en C#, no se producen en Visual Basic.NET ya que el lenguaje permite ese tipo de comportamientos.
  • Hasta ahora una property podía ser pública o privada en su totalidad, tanto para el get como para el set. Esto cambió en .NET 2.0, que permite definir un nivel de acceso diferente para cada operación dentro de la property (típicamente se quiere tener el get como público y el set como privado, o protegido).
  • ADO.NET 2.0 incluye una serie de mejoras y optimizaciones muy interesantes, que mejorarán la experiencia de desarrollo y ejecución de aplicaciones que interactúan con bases de datos.
    Mencionaremos a continuación algunas de las más importantes.
    Junto con .NET 2.0 fue liberada al mercado la versión 2005 de MS SQL Server, el motor de base de datos relacional de Microsoft. Estas dos plataformas han sido diseñadas para integrarse y trabajar en conjunto, al punto tal que SQL Server 2005 tiene embebido un entorno de ejecución CLR. Esto le permite ejecutar código .NET nativamente dentro del ambiente del servidor de base de datos, abriendo un nuevo abanico de posibilidades a la hora de desarrollar aplicaciones de datos. ADO.NET 2.0 permite aprovechar al máximo todas las nuevas características incluídas en SQL Server 2005.
    Para obtener una lista completa de las nuevas características de ADO.NET 2.0 puede consultarse el siguiente sitio web:
    http://msdn2.microsoft.com/en-us/library/ex6y04yf.aspx
    La misma información puede encontrarse en la siguiente sección de la documentación del .NET Framework 2.0 SDK:
     Development Tools and Languages > Visual Studio > .NET Framework Programming in Visual Studio > Accessing Data > ADO.NET > What's New in ADO.NET
  • Para obtener una lista completa de las nuevas características de ADO.NET 2.0 puede consultarse el siguiente sitio web:
    http://msdn2.microsoft.com/en-us/library/ex6y04yf.aspx
    La misma información puede encontrarse en la siguiente sección de la documentación del .NET Framework 2.0 SDK:
     Development Tools and Languages > Visual Studio > .NET Framework Programming in Visual Studio > Accessing Data > ADO.NET > What's New in ADO.NET
  • En ADO.NET 1.x, los proveedores manejados de acceso a datos trabajan cada uno con su conjunto de clases independientes, por ejemplo:
    4 clases para representar una conexión, todas implementando una misma interfaz:
    SqlConnection
    OracleConnection
    OdbcConnection
    OleDbConnection
    De esta forma, tenemos tantas clases XxxCommand, XxxDataAdapter, XxxConnection y XxxDataReader como proveedores de acceso haya en ADO.NET. Esto lleva a la escritura de código que utiliza clases específicas de un proveedor, el cual deberá ser moficiado ante un cambio en la infraestructura de base de datos sobre la que opera la aplicación. Obviamente no resulta beneficioso ni recomendable tener que modificar extensivamente el código fuente de una aplicación por el hecho de cambiar de proveedor de bases de datos.
    Por este motivo, las clases de ADO.NET 2.0 han sido modificadas y reorganizadas para proveer ahora una API (Interfaz de Programación de Aplicaciones) limpia, consistente y genérica para todos los tipos de proveedores. El coraón de esta API lo constituyen una serie de nuevas clases base abstractas, que podemos ver en la figura, ubicadas en el namespace System.Data.Common.
    Por más que la aplicación utilice MS SQL Server como base de datos, ya no es necesario utilizar las clases Sql* del proveedor manejado de ADO.NET, sino que en su lugar se recomienda la utilización de las nuevas clases genéricas Db*. El uso de estas clases es independiente de la base de datos seleccionada, lo cual permite escribir el código de acceso a datos una única vez.
    Para obtener un ejemplo de utilización práctica de esta API independiented del proveedor de acceso a datos se recomienda analizar el código fuente de la aplicación de ejemplo que acompaña el presente curso.
  • Para más detalles acerca del nuevo modelo de clases genéricas de ADO.NET 2.0 puede consultarse el siguiente sitio web:
    http://msdn2.microsoft.com/en-us/library/t9f29wbk.aspx
    Para obtener un ejemplo de utilización práctica de esta API independiented del proveedor de acceso a datos se recomienda analizar el código fuente de la aplicación de ejemplo que acompaña el presente curso.
  • Dce1 introduccion microsoft.net

    1. 1. Estrella 1Estrella 1 Introducción a Microsoft .NETIntroducción a Microsoft .NET Programa MicrosoftPrograma Microsoft Desarrollador CincoDesarrollador Cinco EstrellasEstrellas
    2. 2. ObjetivoObjetivo Presentar una introducción a la plataformaPresentar una introducción a la plataforma de desarrollo Microsoft .NET, describiendode desarrollo Microsoft .NET, describiendo sus principios básicos de funcionamiento,sus principios básicos de funcionamiento, su arquitectura de componentes y sussu arquitectura de componentes y sus principales bibliotecas reutilizables,principales bibliotecas reutilizables, mostrando además las novedadesmostrando además las novedades introducidas en la última versión de laintroducidas en la última versión de la misma.misma.
    3. 3. PrerrequisitosPrerrequisitos Poseer los conocimientos proporcionadosPoseer los conocimientos proporcionados por la Estrella 0 del programapor la Estrella 0 del programa Haber aprobado el examenHaber aprobado el examen correspondiente a la Estrella 0 delcorrespondiente a la Estrella 0 del programaprograma Conocimientos fundamentales de bases deConocimientos fundamentales de bases de datos relacionales, incluyendodatos relacionales, incluyendo  Modelo RelacionalModelo Relacional  Protocolos de Acceso (ODBC/OLEDB)Protocolos de Acceso (ODBC/OLEDB)  Lenguaje SQLLenguaje SQL
    4. 4. Temas a TratarTemas a Tratar Introducción a Microsoft .NETIntroducción a Microsoft .NET Componentes FundamentalesComponentes Fundamentales Funcionamiento Interno del CLRFuncionamiento Interno del CLR Bibliotecas PrincipalesBibliotecas Principales Ventajas de .NETVentajas de .NET Herramientas de Desarrollo .NETHerramientas de Desarrollo .NET Novedades en .NET 2.0Novedades en .NET 2.0
    5. 5. Temas a TratarTemas a Tratar Introducción a Microsoft .NETIntroducción a Microsoft .NET  ¿Qué no es .NET?¿Qué no es .NET?  ¿Qué es .NET?¿Qué es .NET?  .NET Como evolución de COM.NET Como evolución de COM
    6. 6. Paradigmas de ProgramaciónParadigmas de Programación 19801980 19901990 20002000 FuncionalidadFuncionalidad Win16Win16 Win32Win32 COMCOM MFCMFC Componentes Componentes Servicios Servicios APIs APIs Windows 3.0
    7. 7. ¿Qué NO es .NET?¿Qué NO es .NET? .NET no es un Sistema Operativo.NET no es un Sistema Operativo .NET no es un Lenguaje de Programación.NET no es un Lenguaje de Programación .NET no es un Entorno de Desarrollo.NET no es un Entorno de Desarrollo .NET no es un Servidor de Aplicaciones.NET no es un Servidor de Aplicaciones .NET no es un producto empaquetado que se.NET no es un producto empaquetado que se pueda comprar como talpueda comprar como tal
    8. 8. ¿Qué es .NET?¿Qué es .NET? Plataforma de Desarrollo compuesta dePlataforma de Desarrollo compuesta de  Entorno de Ejecución (Runtime)Entorno de Ejecución (Runtime)  Bibliotecas de Funcionalidad (Class Library)Bibliotecas de Funcionalidad (Class Library)  Lenguajes de ProgramaciónLenguajes de Programación  CompiladoresCompiladores  Herramientas de Desarrollo (IDE & Tools)Herramientas de Desarrollo (IDE & Tools)  Guías de ArquitecturaGuías de Arquitectura La evolución de la plataforma COMLa evolución de la plataforma COM
    9. 9. Características de .NET (1/2)Características de .NET (1/2) Plataforma de ejecución intermediaPlataforma de ejecución intermedia 100% Orientada a Objetos100% Orientada a Objetos MultilenguajeMultilenguaje Plataforma Empresarial de Misión CríticaPlataforma Empresarial de Misión Crítica
    10. 10. Características de .NET (2/2)Características de .NET (2/2) Modelo de Programación único para todo tipoModelo de Programación único para todo tipo de aplicaciones y dispositivos de hardwarede aplicaciones y dispositivos de hardware Se integra fácilmente con aplicacionesSe integra fácilmente con aplicaciones existentes desarrolladas en plataformasexistentes desarrolladas en plataformas MicrosoftMicrosoft Se integra fácilmente con aplicacionesSe integra fácilmente con aplicaciones desarrolladas en otras plataformasdesarrolladas en otras plataformas
    11. 11. Plataforma de Ejecución IntermediaPlataforma de Ejecución Intermedia Entorno de Desarrollo Microsoft.NET Librerías de Funcionalidad Lenguajes de Programación Entorno de Ejecución Sistema Operativo (Familia Windows) Aplicación .NET
    12. 12. .NET como evolución de COM.NET como evolución de COM Entorno de Ejecución (Runtime)Entorno de Ejecución (Runtime)  COM: WindowsCOM: Windows  .NET: Common Language Runtime.NET: Common Language Runtime Librerías de FuncionalidadLibrerías de Funcionalidad  COM: Algunas (ADO, FSO, etc.)COM: Algunas (ADO, FSO, etc.)  .NET: Muy extensa (.NET Framework Class Library).NET: Muy extensa (.NET Framework Class Library) Lenguajes de ProgramaciónLenguajes de Programación  COM: VB, C++, VFP, ASP, J++COM: VB, C++, VFP, ASP, J++  .NET: Common Language Specification.NET: Common Language Specification Entorno de Desarrollo (IDE)Entorno de Desarrollo (IDE)  COM: Uno para cada lenguajeCOM: Uno para cada lenguaje  .NET: Uno independiente del lenguaje (VS.NET).NET: Uno independiente del lenguaje (VS.NET)
    13. 13. ¿Qué es el .NET Framework?¿Qué es el .NET Framework? Paquete de software fundamental de laPaquete de software fundamental de la plataforma .NET. Incluye:plataforma .NET. Incluye:  Entorno de Ejecución (Runtime)Entorno de Ejecución (Runtime)  Bibliotecas de Funcionalidad (Class Library)Bibliotecas de Funcionalidad (Class Library) Se distribuye en forma libre y gratuitaSe distribuye en forma libre y gratuita Existen tres variantes principales:Existen tres variantes principales:  .NET Framework Redistributable Package.NET Framework Redistributable Package  .NET Framework SDK.NET Framework SDK  .NET Compact Framework.NET Compact Framework Está instalado por defecto en WindowsEstá instalado por defecto en Windows 2003 Server o superior2003 Server o superior
    14. 14. .NET Compact Framework *  * Aplicación Móvil Aplicación de Consola Aplicación Web Aplicación de Escritorio ¿Dónde instalar el .NET Framework?¿Dónde instalar el .NET Framework? ServidorCliente * Sólo si la aplicación es distribuída* Sólo si la aplicación es distribuída
    15. 15. Línea del tiempo de .NETLínea del tiempo de .NET Visual Studio 6.0 Visual Basic VBA Visual FoxPro VBScript C++ J++ JScript ASP Visual Studio .NET 2003 .NET Framework 1.1 .NET Compact Framework J# Visual Studio “Orcas” .NET Framework “Orcas” .NET Compact Framework “Orcas” 2000 2001 2002 2003 2004 2005 2006 y más Visual Studio 2005 (“Whidbey”) .NET Framework 2.0 (“Whidbey”) .NET Compact Framework 2.0 (“Whidbey”) Visual Studio .NET 2002 .NET Framework 1.0 Visual Basic .NET C#
    16. 16. Temas a TratarTemas a Tratar Introducción a Microsoft .NETIntroducción a Microsoft .NET Componentes FundamentalesComponentes Fundamentales  ArquitecturaArquitectura  Common Language Runtime (CLR)Common Language Runtime (CLR)  Microsoft Intermediate LanguageMicrosoft Intermediate Language  AssembliesAssemblies  .NET Class Library.NET Class Library  Common Language Specification (CLS)Common Language Specification (CLS)
    17. 17. Windows COM+ Services Common Language Runtime Base Class Library ADO.NET y XML ASP.NET Windows Forms Common Language Specification VB C++ C# J# … Arquitectura del .NET FrameworkArquitectura del .NET Framework .NETFramework Redistributable .NETFrameworkSDK .NETFramework ClassLibrary
    18. 18. CLR - Arquitecturas de Ejecución deCLR - Arquitecturas de Ejecución de AplicacionesAplicaciones
    19. 19. CLR – Common Language RuntimeCLR – Common Language Runtime El CLR es el motor de ejecución (runtime) deEl CLR es el motor de ejecución (runtime) de .NET.NET CaracterísticasCaracterísticas  Compilación Just-In-Time (JIT)Compilación Just-In-Time (JIT)  Gestión automática de memoria (GarbageGestión automática de memoria (Garbage Collector)Collector)  Gestión de errores consistente (Excepciones)Gestión de errores consistente (Excepciones)  Ejecución basada en componentesEjecución basada en componentes (Assemblies)(Assemblies)  Gestión de SeguridadGestión de Seguridad  MultithreadingMultithreading
    20. 20. CLR – Componentes InternosCLR – Componentes Internos Class Loader IL to Native Compilers Code Manager Garbage Collector Security Engine Debug Engine Type Checker Exception Manager Thread Support COM Marshaler Base Class Library Support
    21. 21. CódigoCódigo FuenteFuente CódigoCódigo FuenteFuente CualquierCualquier lenguaje .NETlenguaje .NET CompiladorCompilador AssemblyAssembly (MSIL)(MSIL) AssemblyAssembly (MSIL)(MSIL) BibliotecaBiblioteca o Ejecutableo Ejecutable CLR – Proceso de CompilaciónCLR – Proceso de Compilación
    22. 22. CLR - MSILCLR - MSIL .method private hidebysig static void Main(string[] args) cil managed { .entrypoint maxstack 8 L_0000: ldstr "Hola Mundo" L_0005: call void [mscorlib]System.Console::WriteLine(string) L_000a: ret }
    23. 23. ¿Qué es un “Assembly”?¿Qué es un “Assembly”? Un Assembly es la unidad mínima de ejecución,Un Assembly es la unidad mínima de ejecución, distribución, instalación y versionado dedistribución, instalación y versionado de aplicaciones .NETaplicaciones .NET MetadataMetadata Código CompiladoCódigo Compilado MSILMSIL RecursosRecursos MiBiblioteca.DLLMiBiblioteca.DLL Descripción de TiposDescripción de Tipos ClasesClases Clases BaseClases Base Interfaces ImplementadasInterfaces Implementadas Atributos de las ClasesAtributos de las Clases Métodos de las ClasesMétodos de las Clases NombreNombre VersiónVersión CulturaCultura Manifiesto del AssemblyManifiesto del Assembly Otros AssembliesOtros Assemblies Permisos de SeguridadPermisos de Seguridad Tipos ExternosTipos Externos
    24. 24. Assemblies - Aplicaciones .NETAssemblies - Aplicaciones .NET Uno o más AssembliesUno o más Assemblies Al ejecutar una aplicación, ¿cómo ubico losAl ejecutar una aplicación, ¿cómo ubico los assemblies necesarios?assemblies necesarios?  El Class Loader busca en el directorio localEl Class Loader busca en el directorio local (preferido)(preferido)  Global Assembly Cache (GAC)Global Assembly Cache (GAC) Diferentes aplicaciones pueden usarDiferentes aplicaciones pueden usar diferentes versionesdiferentes versiones  Actualizaciones más simplesActualizaciones más simples  Desinstalación más simpleDesinstalación más simple
    25. 25. .NET Framework Class Library.NET Framework Class Library Conjunto de Tipos básicos (clases, interfaces, etc.) que vienen incluídos en el .NET Framework Los tipos están organizados en jerarquías lógicas de nombres, denominados NAMESPACES Los tipos son INDEPENDIENTES del lenguaje de desarrollo Es extensible y totalmente orientada a objetos
    26. 26. .NET Framework Class Library.NET Framework Class Library El namespace raíz es SYSTEM System System.Data System.Xml System.Web GlobalizationGlobalization DiagnosticsDiagnostics ConfigurationConfiguration CollectionsCollections ResourcesResources ReflectionReflection NetNet IOIO ThreadingThreading TextText ServiceProcessServiceProcess SecuritySecurity CommonCommon OleDbOleDb SqlClientSqlClient OdbcOdbc XPathXPath XSLTXSLT RuntimeRuntime InteropServicesInteropServices RemotingRemoting SerializationSerialization SerializationSerialization ConfigurationConfiguration SessionStateSessionState CachingCaching SecuritySecurity ServicesServices DescriptionDescription DiscoveryDiscovery ProtocolsProtocols UIUI HtmlControlsHtmlControls WebControlsWebControls System.Drawing ImagingImaging Drawing2DDrawing2D TextText PrintingPrinting System.Windows.Forms DesignDesign ComponentModelComponentModel
    27. 27. Common Language Specification (CLS)Common Language Specification (CLS) Especificación que estandariza una serie de características soportadas por el CLR Contrato entre diseñadores de lenguajes de programación y autores de bibliotecas Permite la interoperabilidad entre lenguajes Microsoft provee implementaciones de 4 lenguajes, todos compatibles con CLS  Microsoft Visual Basic .NETMicrosoft Visual Basic .NET  Microsoft Visual C# .NETMicrosoft Visual C# .NET  Microsoft Visual J#.NETMicrosoft Visual J#.NET  Microsoft Visual C++.NETMicrosoft Visual C++.NET
    28. 28. Common Language Specification (CLS)Common Language Specification (CLS) El resto de la industria y el sector académico han desarrollado más de 20 lenguajes compatibles con la especificación CLS CobolCobol EiffelEiffel FortranFortran PascalPascal PerlPerl C++.NETC++.NET C#C# HaskellHaskell JavaJava JavaScriptJavaScript Visual Basic.NETVisual Basic.NET MercuryMercury MLML PHPPHP Objective CamlObjective Caml OberonOberon SmalltalkSmalltalk SchemeScheme J#J# RPGRPG MondrianMondrian APLAPL DelphiDelphi PythonPython LISPLISP PrologProlog
    29. 29. CLS - Elección del lenguajeCLS - Elección del lenguaje .NET posee un único runtime (el CLR) y un.NET posee un único runtime (el CLR) y un único conjunto de bibliotecas para todos losúnico conjunto de bibliotecas para todos los lenguajeslenguajes No hay diferencias notorias de performanceNo hay diferencias notorias de performance entre los lenguajes provistos por Microsoftentre los lenguajes provistos por Microsoft El lenguaje a utilizar, en gral., dependerá deEl lenguaje a utilizar, en gral., dependerá de su experiencia previa con otros lenguajes osu experiencia previa con otros lenguajes o de gustos personalesde gustos personales  Si conoce Java, Delphi, C++, etc.Si conoce Java, Delphi, C++, etc.  C#C#  Si conoce Visual Basic o VBScriptSi conoce Visual Basic o VBScript  VB.NETVB.NET Los tipos de aplicaciones .NET sonLos tipos de aplicaciones .NET son INDEPENDIENTES del lenguaje que elijaINDEPENDIENTES del lenguaje que elija
    30. 30. Temas a TratarTemas a Tratar Introducción a Microsoft .NETIntroducción a Microsoft .NET • Componentes FundamentalesComponentes Fundamentales • Funcionamiento Interno del CLRFuncionamiento Interno del CLR  Especificación CLIEspecificación CLI  Modelo de EjecuciónModelo de Ejecución  Application DomainsApplication Domains  Common Type SystemCommon Type System
    31. 31. Infraestructura de Lenguaje Común (CLI)Infraestructura de Lenguaje Común (CLI) Especificación patrocinada porEspecificación patrocinada por Microsoft, Intel, HP y estandarizada porMicrosoft, Intel, HP y estandarizada por ECMA (2001) e ISO (2003) queECMA (2001) e ISO (2003) que describe:describe:  Entorno de Ejecución de AplicacionesEntorno de Ejecución de Aplicaciones  Conjunto de Librerías Básicas (BCL)Conjunto de Librerías Básicas (BCL)  Tipos de Datos Comunes (CTS)Tipos de Datos Comunes (CTS) El .NET Framework y el .NET CompactEl .NET Framework y el .NET Compact Framework son implementaciones deFramework son implementaciones de la especificación CLIla especificación CLI
    32. 32. Sub-Especificaciones de CLISub-Especificaciones de CLI Lenguajes de Alto Nivel BCL (Base Class Library) CLR (Common Language Runtime) Sistema Operativo CLS (Common Language Specification) CTS (Common Type System) se ajustan a las reglas de la… y utilizan las clases de la… cuyos tipos básicos forman el… y se ejecutan bajo el control de y usan los servicios del… que está acoplado al y utiliza los servicios del …
    33. 33. VB.NETVB.NETCódigoCódigo FuenteFuente CompiladorCompilador VB.NETVB.NET C++.NETC++.NETC#C# AssemblyAssembly Código MSILCódigo MSIL Sistema Operativo (Windows)Sistema Operativo (Windows) Common Language RuntimeCommon Language Runtime Compilador JITCompilador JIT Código NativoCódigo Nativo CódigoCódigo ManejadoManejado ComponenteComponente No ManejadoNo Manejado Modelo de Ejecución del CLRModelo de Ejecución del CLR CompiladorCompilador C#C# CompiladorCompilador C++ .NETC++ .NET AssemblyAssembly Código MSILCódigo MSIL AssemblyAssembly Código MSILCódigo MSIL
    34. 34. Debug EngineDebug Engine CompiladorCompilador JITJIT Assembly enAssembly en la máquinala máquina destinodestino Modelo de Ejecución del CLRModelo de Ejecución del CLR AssemblyAssembly DesarrolloDesarrollo InstalaciónInstalación InstalaciónInstalación EjecuciónEjecución AssemblyAssembly LoaderLoader SeguridadSeguridad ClassClass LoaderLoader .exe Nativo.exe Nativo ++ Tabla GCTabla GC CodeCode ManagerManager Garbage CollectorGarbage Collector Manejador ExcepcionesManejador Excepciones Soporte MultiThreadSoporte MultiThread COM InteropCOM Interop Policy <?xml version="1.0" encoding="utf-8" ?> <configuration> <mscorlib> <security> <policy> <PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="Nothing" Name="All_Code" Description="Code group grants no permissio ns and forms the root of the code group tree."> <IMembershipCondition clas s="AllMembershipCondition" version="1"/> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust"
    35. 35. Application DomainsApplication Domains Procesos virtuales dentro del CLRProcesos virtuales dentro del CLR  Se ejecutan dentro de un proceso del SistemaSe ejecutan dentro de un proceso del Sistema OperativoOperativo  Un proceso del sistema operativo puedeUn proceso del sistema operativo puede contener varios AppDomainscontener varios AppDomains  Más eficiente que múltiples procesos delMás eficiente que múltiples procesos del sistema operativosistema operativo  Más eficiente en el intercambio de contexto deMás eficiente en el intercambio de contexto de ejecuciónejecución Un Assembly y sus tipos son siempreUn Assembly y sus tipos son siempre cargados dentro de un AppDomaincargados dentro de un AppDomain Provee una frontera para: Fallos, Tipos,Provee una frontera para: Fallos, Tipos, SeguridadSeguridad
    36. 36. Application Domains - CLR HostApplication Domains - CLR Host Código Manejado CLR CLR Host AppDomain 1 Código Manejado AppDomain N
    37. 37. CTS (Common Type System)CTS (Common Type System) Define un conjunto común de “tipos” de datosDefine un conjunto común de “tipos” de datos orientados a objetosorientados a objetos Todo lenguaje de programación .NET debeTodo lenguaje de programación .NET debe implementar los tipos definidos por el CTSimplementar los tipos definidos por el CTS Todo tipo heredaTodo tipo hereda directa odirecta o indirectamente delindirectamente del tipo System.Objecttipo System.Object Define Tipos deDefine Tipos de VALOR y deVALOR y de REFERENCIAREFERENCIA
    38. 38. La Memoria y los Tipos de DatosLa Memoria y los Tipos de Datos El CLR administra dos segmentos de memoria:El CLR administra dos segmentos de memoria: Stack (Pila)Stack (Pila) yy Heap (Montón)Heap (Montón) ElEl StackStack es liberado automáticamente y eles liberado automáticamente y el HeapHeap es administrado por eles administrado por el GCGC ((GarbageGarbage CollectorCollector)) Los tiposLos tipos VALORVALOR se almacenan en else almacenan en el StackStack Los tiposLos tipos REFERENCIAREFERENCIA sese almacenan en elalmacenan en el HeapHeap
    39. 39. Temas a TratarTemas a Tratar Introducción a Microsoft .NETIntroducción a Microsoft .NET • Componentes FundamentalesComponentes Fundamentales • Funcionamiento Interno del CLRFuncionamiento Interno del CLR • Bibliotecas PrincipalesBibliotecas Principales  Base Class Library (BCL)Base Class Library (BCL)  ADO.NETADO.NET  Windows FormsWindows Forms  ASP.NETASP.NET
    40. 40. Base Class LibraryBase Class Library System Globalization Diagnostics Configuration Collections Resources Reflection Net IO Threading Text ServiceProcess Security InteropServices Remoting Serialization
    41. 41. Acceso a Datos: ADO.NETAcceso a Datos: ADO.NET System.Data OleDb SqlClient OracleClient Common Odbc SqlTypes System.Xml Serialization XPath XSLT Schema
    42. 42. Acceso a Bases de Datos RelacionalesAcceso a Bases de Datos Relacionales Escenario ConectadoEscenario Conectado Un entorno conectado es uno en el cual losUn entorno conectado es uno en el cual los usuarios están constantemente conectadosusuarios están constantemente conectados a la fuente de datosa la fuente de datos Ventajas:Ventajas:  Mayor seguridadMayor seguridad  Mejor control de concurrenciaMejor control de concurrencia  Los datos se mantienen actualizadosLos datos se mantienen actualizados Desventajas:Desventajas:  Se requiere una conexión constante (consumeSe requiere una conexión constante (consume recursos del servidor)recursos del servidor)  EscalabilidadEscalabilidad
    43. 43. En un entorno desconectado, una parte deEn un entorno desconectado, una parte de los datos del repositorio central se copia ylos datos del repositorio central se copia y modifica en forma local, para luegomodifica en forma local, para luego sincronizarse con éste.sincronizarse con éste. VentajasVentajas  Se puede trabajar en forma independienteSe puede trabajar en forma independiente  Mayor escalabilidad y performanceMayor escalabilidad y performance DesventajasDesventajas  Los datos no están sinconizadosLos datos no están sinconizados  Resolución manual de conflictosResolución manual de conflictos Acceso a Bases de Datos RelacionalesAcceso a Bases de Datos Relacionales Escenario DesconectadoEscenario Desconectado
    44. 44. ADO.NET - ArquitecturaADO.NET - Arquitectura
    45. 45. ADO.NET- Proveedores de AccesoADO.NET- Proveedores de Acceso a Datosa Datos SQL Server/Access (System.Data.SqlClient)SQL Server/Access (System.Data.SqlClient) OLE DB (System.Data.OleDb)OLE DB (System.Data.OleDb) ODBC (System.Data.Odbc)ODBC (System.Data.Odbc) Oracle (System.Data.OracleClient)Oracle (System.Data.OracleClient) Otros provistos por terceros (MySQL,Otros provistos por terceros (MySQL, PostgreSQL, DB2, etc..)PostgreSQL, DB2, etc..)
    46. 46. Base de Datos XxxConnectionXxxConnection XxxCommandXxxCommand DataSetDataSet XxxDataReaderXxxDataReader XxxDataAdapterXxxDataAdapter Maneja la conección a una base de datos Maneja la conección a una base de datos Ejecuta comandos contra una base de datos Ejecuta comandos contra una base de datos Copia local de datos relacionalesCopia local de datos relacionales Provee acceso a datos read-only, Forward-only Provee acceso a datos read-only, Forward-only Intercambia datos entre un dataset y una base de datos Intercambia datos entre un dataset y una base de datos ADO.NET- Clases más comunesADO.NET- Clases más comunes
    47. 47. DataSetDataSet DataTableDataTable DataTableDataTable DataRowDataRow DataColumnDataColumn RelacionesRelaciones RestriccionesRestriccionesEsquema XMLEsquema XML ADO.NET- DataSetADO.NET- DataSet
    48. 48. ADO.NET vs. ADOADO.NET vs. ADO
    49. 49. ADO.NET – Accediendo a datosADO.NET – Accediendo a datos ConectadoConectado En un escenarioEn un escenario conectado, los recursos seconectado, los recursos se mantienen en el servidormantienen en el servidor hasta que la conexión sehasta que la conexión se cierracierra 1) Abrir Conexión1) Abrir Conexión 2) Ejecutar Comando2) Ejecutar Comando 3) Procesar Filas en3) Procesar Filas en DataReaderDataReader 4) Cerrar Reader4) Cerrar Reader 5) Cerrar Conexión5) Cerrar Conexión
    50. 50. En un escenario desconectado, losEn un escenario desconectado, los recursos no se mantienen en elrecursos no se mantienen en el servidor mientras los datos seservidor mientras los datos se procesanprocesan 1) Abrir Conexión1) Abrir Conexión 2) Llenar DataSet mediante2) Llenar DataSet mediante DataAdapterDataAdapter 3) Cerrar Conexión3) Cerrar Conexión 4) Procesar DataSet4) Procesar DataSet 5) Abrir Conexión5) Abrir Conexión 6) Actualizar fuente de datos6) Actualizar fuente de datos mediante DataAdaptermediante DataAdapter 7) Cerrar Conexión7) Cerrar Conexión ADO.NET – Accediendo a datosADO.NET – Accediendo a datos DesconectadoDesconectado
    51. 51. XmlTextWriterXmlTextWriter XmlTextReaderXmlTextReader <XML><XML> XmlDocumentXmlDocument DocumentNavigatorDocumentNavigator XmlReaderXmlReader XmlValidatingReaderXmlValidatingReader XmlNodeReaderXmlNodeReader ADO.NET - Soporte a XMLADO.NET - Soporte a XML
    52. 52. Windows FormsWindows Forms System.Drawing Drawing2D Imaging Printing Text System.WinForms Design ComponentModel
    53. 53. Aplicaciones Web: ASP.NETAplicaciones Web: ASP.NET System.Web Caching Configuration Services UI SessionState HtmlControls WebControls Description Discovery Security Protocols
    54. 54. Temas a TratarTemas a Tratar Introducción a Microsoft .NETIntroducción a Microsoft .NET Componentes FundamentalesComponentes Fundamentales Funcionamiento Interno del CLRFuncionamiento Interno del CLR Bibliotecas PrincipalesBibliotecas Principales Ventajas de .NETVentajas de .NET
    55. 55. Ventajas de .NETVentajas de .NET Unifica los modelos de programaciónUnifica los modelos de programación Simplifica aún más el desarrolloSimplifica aún más el desarrollo Provee un Entorno de Ejecución robusto yProvee un Entorno de Ejecución robusto y seguroseguro Es independiente del lenguaje deEs independiente del lenguaje de programaciónprogramación Interoperabilidad con código existenteInteroperabilidad con código existente Simplifica la instalación y administración deSimplifica la instalación y administración de las aplicacioneslas aplicaciones Es ExtensibleEs Extensible
    56. 56. Unificando los ModelosUnificando los Modelos Windows APIWindows API .NET Framework.NET Framework API consistente mas allá del lenguajeAPI consistente mas allá del lenguaje o del modelo de programacióno del modelo de programación ASPASP Basado en Servidor,Basado en Servidor, UI Embebido en elUI Embebido en el códigocódigo MFC/ATL (C++)MFC/ATL (C++) OOP,OOP, Potencia,Potencia, Acceso a bajo nivelAcceso a bajo nivel Visual BasicVisual Basic Desarrollo Rapido,Desarrollo Rapido, Componentes,Componentes, Event DrivenEvent Driven
    57. 57. Desarrollo SimplificadoDesarrollo Simplificado Alto nivel de abstracciónAlto nivel de abstracción  No mas accesos COM a bajo nivelNo mas accesos COM a bajo nivel  Orientado a Objetos desde el NúcleoOrientado a Objetos desde el Núcleo Sistema de tipos unificado (CTS)Sistema de tipos unificado (CTS)  Todo es un objeto, no mas variantsTodo es un objeto, no mas variants Componentes de SoftwareComponentes de Software  Propiedades, métodos, eventos, y atributosPropiedades, métodos, eventos, y atributos incluidos en la construcción de clasesincluidos en la construcción de clases API organizada en forma JerárquicaAPI organizada en forma Jerárquica
    58. 58. Entorno de Ejecución Robusto yEntorno de Ejecución Robusto y SeguroSeguro Gestión automática de la memoriaGestión automática de la memoria  Todos los objetos son administrados por elTodos los objetos son administrados por el Garbage CollectorGarbage Collector Manejo de ExcepcionesManejo de Excepciones Fuertemente tipadoFuertemente tipado  Solo casteos segurosSolo casteos seguros  Inicialización de variables obligatoriaInicialización de variables obligatoria Instalación con Cero ImpactoInstalación con Cero Impacto  No requiere registración en la RegistryNo requiere registración en la Registry
    59. 59. Independencia del lenguajeIndependencia del lenguaje Libertad en la elección del lenguajeLibertad en la elección del lenguaje  Todas las facilidades de la plataforma .NETTodas las facilidades de la plataforma .NET están disponibles a todos los lenguajes deestán disponibles a todos los lenguajes de programación .NETprogramación .NET  Los componentes de una aplicación .NETLos componentes de una aplicación .NET pueden ser escritos en distintos lenguajes depueden ser escritos en distintos lenguajes de alto nivel compatibles con la plataformaalto nivel compatibles con la plataforma Herramientas compartidasHerramientas compartidas  Debuggers, profilers, analizadores de código, yDebuggers, profilers, analizadores de código, y otras trabajan para todos los lenguajesotras trabajan para todos los lenguajes
    60. 60. Instalación y Administración másInstalación y Administración más simplessimples Unidades de Ensamblado (“Assemblies”)Unidades de Ensamblado (“Assemblies”)  Mínima unidad de distribución, versionado yMínima unidad de distribución, versionado y administración de seguridad de aplicacionesadministración de seguridad de aplicaciones .NET.NET  Auto-descriptas a través de un manifiestoAuto-descriptas a través de un manifiesto (“manifest”)(“manifest”) Instalaciones Cero-impactoInstalaciones Cero-impacto  Aplicaciones y componentes pueden serAplicaciones y componentes pueden ser compartidas o privadascompartidas o privadas VersioningVersioning  Múltiples versiones del mismo componenteMúltiples versiones del mismo componente pueden co-existir, aún en el mismo procesopueden co-existir, aún en el mismo proceso
    61. 61. ExtensibilidadExtensibilidad El Framework no es una “caja negra”El Framework no es una “caja negra” Sus clases pueden ser extendidas a travésSus clases pueden ser extendidas a través del mecanismo de herenciadel mecanismo de herencia  A diferencia de COM, usamos y extendemos lasA diferencia de COM, usamos y extendemos las clases en si mismas, no un “wrapper”clases en si mismas, no un “wrapper” Herencia entre distintos lenguajesHerencia entre distintos lenguajes
    62. 62. InteroperabilidadInteroperabilidad .NET Framework.NET Framework Servicios Web XMLServicios Web XML C#C# C++C++ VBVB Otros...Otros... .NET.NET COMCOMCOM INTEROP
    63. 63. Temas a TratarTemas a Tratar Introducción a Microsoft .NETIntroducción a Microsoft .NET • Componentes fundamentalesComponentes fundamentales • Funcionamiento internoFuncionamiento interno • Bibliotecas PrincipalesBibliotecas Principales • Ventajas de .NETVentajas de .NET • Herramientas de Desarrollo .NETHerramientas de Desarrollo .NET  Visual Studio 2005Visual Studio 2005  SQL Server 2005 ExpressSQL Server 2005 Express
    64. 64. Visual Studio 2005Visual Studio 2005 Novatos Entusiastas Estudiantes Hobbyists Part-Timers Profesionales Consultores Desarrolladores Arquitectos Testers VB6 Devs
    65. 65. Visual Studio 2005 Express EditionsVisual Studio 2005 Express Editions Herramientas de desarrollo gratuitasHerramientas de desarrollo gratuitas Muy livianas, fáciles de usar y de aprenderMuy livianas, fáciles de usar y de aprender Diseñadas para entusiastas, estudiantes yDiseñadas para entusiastas, estudiantes y desarrolladores principiantesdesarrolladores principiantes Hay varias ediciones, según el tipo de aplicación yHay varias ediciones, según el tipo de aplicación y el lenguajeel lenguaje Tiene características avanzadas, por ejemplo:Tiene características avanzadas, por ejemplo:  RefactoringRefactoring  Code SnippetsCode Snippets  Diseñadores WYSIWYGDiseñadores WYSIWYG  DepuradoresDepuradores  IntellisenseIntellisense
    66. 66. SQL Server 2005 ExpressSQL Server 2005 Express La nueva versión de MSDELa nueva versión de MSDE Es gratuitoEs gratuito Preparado para trabajar integrado con .NETPreparado para trabajar integrado con .NET 2.02.0 Tamaño máximo de base: 4 GbTamaño máximo de base: 4 Gb Max. Conexiones Concurrentes: no tieneMax. Conexiones Concurrentes: no tiene Incluye una interfaz de administracion y unIncluye una interfaz de administracion y un editor de consultaseditor de consultas Mayor integración con Visual Studio 2005Mayor integración con Visual Studio 2005
    67. 67. Temas a TratarTemas a Tratar Introducción a Microsoft .NETIntroducción a Microsoft .NET Componentes fundamentalesComponentes fundamentales Funcionamiento internoFuncionamiento interno Bibliotecas PrincipalesBibliotecas Principales Ventajas de .NETVentajas de .NET Herramientas de Desarrollo .NETHerramientas de Desarrollo .NET Novedades en .NET 2.0Novedades en .NET 2.0
    68. 68. Temas a TratarTemas a Tratar • Novedades en .NET 2.0Novedades en .NET 2.0  GenericsGenerics  Soporte para 64 bitsSoporte para 64 bits  Tipos ParcialesTipos Parciales  Nivel de Accesibilidad de PropertiesNivel de Accesibilidad de Properties  Novedades en ADO.NET 2.0Novedades en ADO.NET 2.0
    69. 69. GenericsGenerics Son tipos parametrizados soportados por elSon tipos parametrizados soportados por el CLRCLR  Un tipo parametrizado es aquel que puedeUn tipo parametrizado es aquel que puede definirse sin especificar los tipos de datos dedefinirse sin especificar los tipos de datos de sus parámetros en tiempo de compilación.sus parámetros en tiempo de compilación. Nos dan la posibilidad de declarar clases,Nos dan la posibilidad de declarar clases, estructuras, métodos e interfaces queestructuras, métodos e interfaces que actuarán uniformemente sobre valoresactuarán uniformemente sobre valores cuyos tipos se desconocen a priori y soncuyos tipos se desconocen a priori y son recién especificados al momento de surecién especificados al momento de su utilizaciónutilización
    70. 70. Generics - EjemploGenerics - Ejemplo Definiendo una clase genérica en C#Definiendo una clase genérica en C# Utilizando una clase genérica en C#Utilizando una clase genérica en C# public class ClaseGenerica<T> { public T atributo; } ClaseGenerica <string> g = new ClaseGenerica<string>(); g.atributo = “Un string"; g.atributo = 2; //Genera Error de Compilación … ClaseGenerica<int> g2 = new ClaseGenerica<int>(); g2.atributo = 2; //NO genera error de compilación
    71. 71. Generics - EjemploGenerics - Ejemplo Definiendo una clase genérica en VB.NETDefiniendo una clase genérica en VB.NET Utilizando una clase genérica en VB.NETUtilizando una clase genérica en VB.NET Public Class ClaseGenerica(Of T) Public atributo As T End Class Dim g As New ClaseGenerica(Of String) g.atributo = “Un string" g.atributo = 2 ‘Genera error de compilación … Dim g2 As New ClaseGenerica(Of Integer) g2.atributo = 2 ‘NO genera error de compilación
    72. 72. Generics - ColeccionesGenerics - Colecciones Colecciones Genéricas Vs. Colecciones Tradicionales System.Collections.Generic System.Collections Comparer<T> Comparer Dictionary<K,T> HashTable List<T> ArrayList Queue<T> Queue SortedDictionary<K,T> SortedList Stack<T> Stack ICollection<T> ICollection IComparable<T> System.IComparable IComparer<T> IComparer IDictionary<K,T> IDictionary IEnumerable<T> IEnumerable IEnumerator<T> IEnumerator IKeyComparer<T> IKeyComparer IList<T> IList
    73. 73. Generics - ColeccionesGenerics - Colecciones Sin generics Con generics
    74. 74. Generics - ColeccionesGenerics - Colecciones Sin generics Con generics
    75. 75. Soporte para 64 bitsSoporte para 64 bits El CLR 1.x sólo tiene soporte paraEl CLR 1.x sólo tiene soporte para aplicaciones de 32 bitsaplicaciones de 32 bits  No aprovechan las características de losNo aprovechan las características de los sistemas operativos de 64 bits, ya que sesistemas operativos de 64 bits, ya que se ejecutan emuladasejecutan emuladas El CLR 2.0 tiene una versión de 64 bitsEl CLR 2.0 tiene una versión de 64 bits  Permite compilar aplicaciones para que haganPermite compilar aplicaciones para que hagan uso nativamente de las nuevas característicasuso nativamente de las nuevas características de los sistemas operativos y procesadores dede los sistemas operativos y procesadores de 64 bits64 bits
    76. 76. Tipos ParcialesTipos Parciales Permiten la declaración de un tipo en variosPermiten la declaración de un tipo en varios archivos físicosarchivos físicos  Válido para clases y estructuras  Válido para interfaces sólo en C#  Utilizan la palabra clave “partial” en la declaración Su uso puede tener varias ventajasSu uso puede tener varias ventajas  Dividir implementaciones complejas en partes pequeñas  Separación de código auto-generado  Mútiples desarrolladores pueden trabajar sobre distintas secciones del mismo tipo simultáneamente  Puede facilitar el mantenimiento y el control de versiones de código
    77. 77. // Demo.Part1.cs// Demo.Part1.cs using System;using System; public partial class Demopublic partial class Demo {{ public Demo()public Demo() {{ Console.Write( "P1" );Console.Write( "P1" ); }} }} // Demo.Part2.cs// Demo.Part2.cs public partial class Demopublic partial class Demo {{ private int i;private int i; }} // Demo.Part3.cs// Demo.Part3.cs // Error 1!// Error 1! public class Demopublic class Demo {{ // Error 2!// Error 2! private int i;private int i; // OK// OK private int j;private int j; public void Test()public void Test() {{ // Error 3!// Error 3! Console.Write( "P3" );Console.Write( "P3" ); }} }} Tipos Parciales - EjemploTipos Parciales - Ejemplo
    78. 78. Tipos Parciales - EjemploTipos Parciales - Ejemplo ' Demo.Part1.vb' Demo.Part1.vb Imports SystemImports System Partial Public Class DemoPartial Public Class Demo Public Sub New()Public Sub New() Console.Write("P1")Console.Write("P1") End SubEnd Sub End ClassEnd Class ' Demo.Part2.vb' Demo.Part2.vb Partial Public Class DemoPartial Public Class Demo Private i As IntegerPrivate i As Integer End ClassEnd Class ' Demo.Part3.vb' Demo.Part3.vb ' OK en VB.NET' OK en VB.NET Public Class DemoPublic Class Demo ' Error 2!' Error 2! Private i As IntegerPrivate i As Integer ' OK' OK Private j As IntegerPrivate j As Integer Public Sub Test()Public Sub Test() ' OK en VB.NET' OK en VB.NET Console.Write("P3")Console.Write("P3") End SubEnd Sub End ClassEnd Class
    79. 79. Modificadores de accesoModificadores de acceso El CLR 2.0 permite especificar diferentesEl CLR 2.0 permite especificar diferentes modificadores de acceso para el get y el set demodificadores de acceso para el get y el set de las propiedades e índiceslas propiedades e índices Permite solamente modificar uno de los dosPermite solamente modificar uno de los dos elementos de acceso, mientras que el otro tomaelementos de acceso, mientras que el otro toma el nivel de acceso de la propertyel nivel de acceso de la property Puede especificar más restriccionesPuede especificar más restricciones Mejora el encapsulamiento de atributosMejora el encapsulamiento de atributos
    80. 80. Modificadores de acceso -Modificadores de acceso - EjemplosEjemplos public class Customer{public class Customer{ private string id;private string id; public string CustomerId {public string CustomerId { public get { return id; }public get { return id; } privateprivate set { id = value; }set { id = value; } }} }} Public Class CustomerPublic Class Customer Private id As StringPrivate id As String Public Property CustomerId() As StringPublic Property CustomerId() As String GetGet Return Me.idReturn Me.id End GetEnd Get PrivatePrivate Set(ByVal value As String)Set(ByVal value As String) Me.id = valueMe.id = value End SetEnd Set End PropertyEnd Property End ClassEnd Class
    81. 81. Novedades en ADO.NET 2.0Novedades en ADO.NET 2.0 API independiente del proveedor ADO.NETAPI independiente del proveedor ADO.NET  Modelada bajo el patrón “Abstract Factory”Modelada bajo el patrón “Abstract Factory” Operaciones AsincrónicasOperaciones Asincrónicas  Permite ejecutar comandos contra la base de datos dePermite ejecutar comandos contra la base de datos de manera asincrónica no bloqueantemanera asincrónica no bloqueante Multiple Active Result Sets (MARS)Multiple Active Result Sets (MARS)  Permite tener múltiples DataReaders abiertos sobre laPermite tener múltiples DataReaders abiertos sobre la misma conexiónmisma conexión
    82. 82. Novedades en ADO.NET 2.0Novedades en ADO.NET 2.0 Integración y aprovechamiento de características deIntegración y aprovechamiento de características de SQL Server 2005SQL Server 2005  Notification ServicesNotification Services  Service BrokerService Broker  Tipo de dato XMLTipo de dato XML  Soporte a Servicios WebSoporte a Servicios Web Mejoras en el DataSet y DataTableMejoras en el DataSet y DataTable  PerformancePerformance  SerializaciónSerialización  Soporte a XMLSoporte a XML
    83. 83. ADO.NET 2.0 – API IndependienteADO.NET 2.0 – API Independiente Namespace System.Data.CommonNamespace System.Data.Common DbCommandDbCommand DbCommandBuilderDbCommandBuilder DbConnectionDbConnection DataAdapterDataAdapter DbDataAdapterDbDataAdapter DbDataReaderDbDataReader DbParameterDbParameter DbParameterCollectionDbParameterCollection DbTransactionDbTransaction DbProviderFactoryDbProviderFactory DbProviderFactoriesDbProviderFactories DbExceptionDbException
    84. 84. Interfaces IDb* (ej: IDbConnection)Interfaces IDb* (ej: IDbConnection) clases base abstractas Db* (ej: DbConnection)clases base abstractas Db* (ej: DbConnection) Implementa la clase baseImplementa la clase base Db*Db* SqlSql OleDbOleDb ODBCODBC OracleOracle 33rdrd Party 1Party 1 33rdrd Party 2Party 2 Provider- Independiente del código de la aplicación en esta capa Provider- específico en el código de la aplicación en esta capa ADO.NET 2.0 – API IndependienteADO.NET 2.0 – API Independiente
    85. 85. ADO.NET 2.0 - DataSetADO.NET 2.0 - DataSet Mejoras de performanceMejoras de performance  Mantienen indices internos de los registros de susMantienen indices internos de los registros de sus DataTablesDataTables Serialización binaria del contenidoSerialización binaria del contenido  El DataSet 1.xEl DataSet 1.x es siempre serializado aes siempre serializado a XMLXML  Bueno para integrar datos, malo enBueno para integrar datos, malo en performanceperformance  El DataSet 2.0 soportaEl DataSet 2.0 soporta serialización binariaserialización binaria  Rápido y compactoRápido y compacto  DataSet.RemotingFormat = SerializationFormat.BinaryDataSet.RemotingFormat = SerializationFormat.Binary
    86. 86. ADO.NET 2.0 - DataTableADO.NET 2.0 - DataTable Operaciones comunes delOperaciones comunes del DataSetDataSet tambiéntambién disponibles en eldisponibles en el DataTable:DataTable:  ReadXml, ReadXmlSchema, WriteXml,ReadXml, ReadXmlSchema, WriteXml, WriteXmlSchema, Clear, Clone, Copy, Merge,WriteXmlSchema, Clear, Clone, Copy, Merge, GetChangesGetChanges DataTable esDataTable es auto-serializableauto-serializable::  Buen mecanismo para transmitir datos en unaBuen mecanismo para transmitir datos en una aplicación distribuídaaplicación distribuída
    87. 87. ADO.NET 2.0 - Tipo de dato XMLADO.NET 2.0 - Tipo de dato XML en el DataSeten el DataSet DataTableDataTable acepta columnas de tipoacepta columnas de tipo XMLXML  System.Data.SqlTypes.SqlXmlSystem.Data.SqlTypes.SqlXml Expuestas como una instancia deExpuestas como una instancia de XPathDocumentXPathDocument Pueden accederse víaPueden accederse vía XmlReaderXmlReader Facilidades para trabajar con documentos XMLFacilidades para trabajar con documentos XML como un conjunto de valorescomo un conjunto de valores
    88. 88. ADO.NET 2.0 - ActualizacionesADO.NET 2.0 - Actualizaciones BatchBatch ADO.NET 2.0 permite ejecutar múltiplesADO.NET 2.0 permite ejecutar múltiples instrucciones SQL sobre una base deinstrucciones SQL sobre una base de datos de forma batch, usando eldatos de forma batch, usando el sp_executesqlsp_executesql Reduce tráfico de redReduce tráfico de red DataAdapter.UpdateBatchSize =DataAdapter.UpdateBatchSize = batch_sizebatch_size Trabaja con transaccionesTrabaja con transacciones Trabaja conTrabaja con los proveedores para SQLlos proveedores para SQL Server y OracleServer y Oracle
    89. 89. © 2006 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

    ×