Taller de Sistemas de
Información 1
Contenidos
• Introducción
• .NET Framework
• CLR, CLI, CTS
Introducción
¿Como era el mundo sin .NET?
• Corria el año 2000…
• XML se estaba popularizando
• La W3C trabajaba en las especificaciones de Web Services SOAP • Java era percibido como el lenguaje de “avanzada”, ya que
incorporaba una cantidad de conceptos (Garbage Collection, incorporaba una cantidad de conceptos (Garbage Collection, Exception Handling, VM, etc)
• Microsoft Visual Basic 6 era el rey en aplicaciones de escritorio, con arquitectura cliente-servidor
• La propuesta tecnológica de Microsoft para el desarrollo de sistemas distribuidos se llamaba COM+
Lecciones aprendidas del
pasado
Good artists copy, great artists steal…
Strong data typing
Garbage collected memory management
Exception based error handling
.NET Framework
Es una plataforma de software desarrollada
por Microsoft, disponible “principalmente” en
sistemas operativos Windows
Comprende
Comprende
o Una serie de especificaciones de infraestructura, lenguaje, y tipos que la
rigen
o Una biblioteca de clases base orientada a hacerle la vida más fácil a un
programador, brindando herramientas para enfrentar las problemáticas más comunes en programación
o Un conjunto de compiladores para una serie de lenguajes soportados o Una maquina virtual que administra la ejecución de programas escritos
.NET Framework
Microsoft presenta en Nov 2000 la primer
beta pública (Enero 2002 RTM)
Es una plataforma que incorpora los
principales aspectos de Java (VM, GC, EH) e
principales aspectos de Java (VM, GC, EH) e
introduce algunas novedades:
Es una plataforma que hacía énfasis en el multilenguaje (buena estrategia de captación de developers)
Era totalmente orientado a objetos, todo los tipos en los
lenguajes .NET son un objeto, desde el principio, incluyendo los tipos básicos
Versiones y estado actual
El desarrollo inicial del .NET framework tuvo
Common Language
Specification
Common Language Specification
Cualquier lenguaje que cumple esta
especificación, es un lenguaje .NET
Cuando se cumple con la especificación
Cuando se cumple con la especificación
Podemos aprovechar completamente la Base Class Library
Utilizamos un sistema de tipos unificado, el Common Type System (CTS)
CLS
.NET soporta múltiples lenguajes C#, VB.NET, C++, Cobol, Haskell
Cada lenguaje de estos es transformado en un código estándar, intermedio denominado
estándar, intermedio denominado
Microsoft Intermediate Language (IL)
A este código intermedio, debe sumársele un cierto conjunto de datos extra, denominados “metadata” Como este código intermedio es estándar, las
Common Type System (CTS)
Todos los lenguajes de la plataforma tienen los mismos tipos de datos primitivos
“int” en C# es lo mismo que “Integer” en VB.NET, o en Cobol, o en Haskell, etc.
Esto garantiza compatibilidad de tipos a nivel binario
Especialmente útil a la hora de comunicar elementos en diferentes lenguajes
Los tipos pueden ser
Value types: Pasados por valor, almacenados en el stack
CTS
No define sintaxis o palabras clave
Solo un conjunto de estructuras que puede ser
reutilizada por múltiples lenguajes
Cada lenguaje puede definir su sintaxis.
Cada lenguaje puede definir su sintaxis.
Pero si trabaja sobre el CLR, debe usar tipos
definidos en el CTS
CLR
Es el ambiente en que ejecuta el código
administrado (managed) .NET
Provee los siguientes servicios básicos
Administración de memoria Administración de memoria Compilación “Just in Time” Tipado seguro
CLR
Administración de memoria
La administración de memoria esta basada en el concepto de “garbage collection”
Los objetos dereferenciados no son inmediatamente eliminados
eliminados
Los objetos que usan recursos “non-managed” deben ser liberados manualmente
obj 1 obj 2 obj 3
Los nuevos objetos son agregados en los
CLR
Administración de memoria
La administración de memoria esta basada en el concepto de “garbage collection”
Los objetos dereferenciados no son inmediatamente eliminados
eliminados
Los objetos que usan recursos “non-managed” deben ser liberados manualmente
obj 1 obj 2 obj 3
Los nuevos objetos son agregados en los
espacios libres
CLR
Administración de memoria
Cuando la memoria se llena, el GC recorre la misma buscando objetos inalcanzables
Una vez encontrados, estos son “finalizados”, se
compacta la memoria y se actualizan los punteros compacta la memoria y se actualizan los punteros correspondientes
obj 1 obj 2 obj 3
Los nuevos objetos son agregados en los
espacios libres
Los objetos sin referencias, no son eliminados obj 1 obj 2 obj 3 obj 4 obj 5 obj 6 HEAP HEAP
CLR
Compilación Just in Time
Los lenguajes de la plataforma .NET compilan en assemblies, que contienen
Código intermedio (IL)
Metadata
CLR
Compilación Just in Time
Los lenguajes de la plataforma .NET compilan en assemblies, que contienen
Código intermedio (MSIL)
Metadata
CLR
Compilación Just in Time
Los lenguajes de la plataforma .NET compilan en assemblies, que contienen
Código intermedio (MSIL)
Metadata
El CLR usa el IL y la metadata para lograr una ejecución administrada Compilador Código fuente IL + metadata EXE/ DLL Tiempo de compilación Tiempo de ejecución Managed Native Code Compilador JIT Execution
Metodo no compilado es invocado
Intermediate Language
#using <mscorlib.dll>
using namespace System;
void main( ) void main( ) {
Console::WriteLine(L"C++ Hello, World!"); }
Intermediate Language
using System;
public class MainApp {
public static void Main( ) public static void Main( ) {
Console.WriteLine("C# Hello, World!"); }
}
Intermediate Language
Imports System
Public Module MainApp Public Sub Main( )
Console.WriteLine ("VB Hello, World!") Console.WriteLine ("VB Hello, World!") End Sub
End Module
.method private hidebysig static void Main() cil managed
{
.entrypoint
// Code size 11 (0xb)
Intermediate Language
// Code size 11 (0xb) .maxstack 8
IL_0000: ldstr "Hello, world!" IL_0005: call void
[mscorlib]System.Console::WriteLine(string) IL_000a: ret
Modelo de ejecución de .NET
VB
VB
C
Cóódigodigo fuente fuente Compiler Compiler C++ C++ C# C# Compiler Compiler Compiler Compiler C
Cóódigodigo Managed
Managed AssemblyAssemblyAssemblyAssemblyIL CodeIL CodeIL CodeIL Code AssemblyAssemblyAssemblyAssemblyIL CodeIL CodeIL CodeIL Code AssemblyAssemblyAssemblyAssemblyIL CodeIL CodeIL CodeIL Code
Operating System Services
Operating System Services
Common Language Runtime
Common Language Runtime
JIT Compiler
JIT Compiler
Native Code
Características de diseño
Portabilidad
o El diseño del framework permite que
teóricamente sea agnóstico a la plataforma
o Las implementaciones comerciales del framework o Las implementaciones comerciales del framework
incluyen a las plataformas Windows, Windows CE y Xbox 360
o A su vez, Microsoft sometió al ECMA las
especificaciones del CLI (CTS, CIL, Base library), C# y C++/CLI, haciéndolas potencialmente
Common Language
Infrastructure
Es una especificación abierta (ECMA-335,
ISO/IEC 23271) desarrollada por Microsoft
que describe el código ejecutable y el
ambiente de ejecución de una serie de
ambiente de ejecución de una serie de
runtimes, como ser:
o Microsoft .NET Framework o Mono
Common Language
Infrastructure
La especificación permite que multiples
lenguajes usados en diferentes plataformas,
sin necesidad de ser reescritos
Describe los siguientes aspectos
Describe los siguientes aspectos
o Common Type System o Metadata
Metadata
Junto con el CTS, forman el corazón del CLI
Los compiladores compatibles con el CLI,
generan metadata, la cual es almacenada en
el archivo ejecutable construido
el archivo ejecutable construido
La información almacenada permite:
o Administrar la ejecución del código
o Instalar el código, resolver problemas de
versiones
.NET Framework
La biblioteca de clases provee una gran
variedad de funcionalidades, entre las que se
incluyen
o Interfaz de usuario o Interfaz de usuario o Acceso a datos
o Conectividad
Base Class Library
COM+ Services
Soporte para interoperar con aplicaciones
COM+
Es posible invocar lógica COM+ desde .NET
TLBIMP MyCOMlib.tlb /out:MyCOMlib.dll
TLBIMP MyCOMlib.tlb /out:MyCOMlib.dll
Es posible exponer lógica .NET en el catálogo
de servicios COM
TLBEXP MyCOMlib.dll /out:MyCOMlib.tlb
COM+
Interoperabilidad
o La interacción entre aplicaciones nuevas y viejas
es en general necesaria
o El framework provee la capacidad de ejecutar o El framework provee la capacidad de ejecutar
aplicaciones que ejecutan fuera del mismo
o System.Runtime.InteropServices,
System.EnterpriseServices, PInvoke son
Elementos de .NET
Algunos elementos básicos de .NET
Namespaces
Assemblies y deployment Clases
Elementos de .NET
Namespaces
Mecanismo para organizar funciones y objetos
de la plataforma y del usuario
El concepto de namespace no es nuevo
Es una subdivisión lógica de la funcionalidad, en la Es una subdivisión lógica de la funcionalidad, en la
cual todos los nombres deben ser únicos Packages en Java
Elementos de .NET
Namespaces
// Declaracion de uso de un namespace using System;
// Namespace donde declaramos la clase NamespaceTest
namespace namespace_tsi1
{
// Clase que nos interesa // Clase que nos interesa class NamespaceTest {
public static void Main() {
Console.WriteLine("Ejemplo de un namespace en un programa C#."); }
Elementos de .NET
Namespaces
Para utilizar un elemento en un namespace,
existen dos opciones
Incluimos el namespace en nuestro código
A través de la sentencia Using Using System;
Using System;
Using System.Collections;
Referenciado un objeto a través de su nombre completo
El nombre completo es la concatenación de la jerarquía de namespaces, seguida del nombre de la clase
Elementos de .NET
Assemblies
Todo código ejecutado por .NET, se encuentra
dentro de un assembly
Todas las funcionalidades de seguridad,
resolución de namespaces y versionado, se
resolución de namespaces y versionado, se
definen por assembly
Es la unidad de deployment de la plataforma
Contiene metadata (manifest) que describe el
Elementos de .NET
Assemblies
Los assemblies usados por una única aplicación,
se denominan “privados”
Por ejemplo, una DLL que contenga la lógica de negocio de una aplicación especifica
negocio de una aplicación especifica
Los assemblies de propósito general, usados por
múltiples aplicaciones, se denominan
“públicos”
Elementos de .NET
Assemblies
El GAC es un directorio especial en la maquina
\winnt\assembly \windows\assembly
Los assemblies pueden colocarse en el GAC, removerse, visualizar propiedades, etc.
propiedades, etc.
Utilizamos un utilitario, de nombre GACUTIL.exe
Viene con el SDK de Microsoft Algunos comandos interesantes
gacutil /l
gacutil /i math.dll
gacutil /u math,ver=1.0.0.0
Elementos de .NET
Assemblies
Los assemblies evitan el problema conocido
como “DLL Hell”
Cada aplicación referencia assemblies en su propio directorio de instalación
Cuando el assembly es global, se hace referencia Cuando el assembly es global, se hace referencia
al mismo en el GAC
En el caso de que el assembly sea global,
interesan varios elementos
Elementos de .NET
Assemblies
Un “Strong Name” usa criptografía de clave
publica para crear un nombre que sea único
entre los assemblies de un sistema
El manifiesto de un assembly, contiene la clave
El manifiesto de un assembly, contiene la clave
publica de un par publico/privado
La combinación de
Nombre de archivo Versión
Elementos de .NET
Assemblies
Firmar el componente (assembly) es el proceso por el cual se le genera y asigna un strong name
Este proceso puede ser realizado automáticamente por VS.NET, si se proporcionan algunos datos por VS.NET, si se proporcionan algunos datos
Un archivo que contenga la clave publica y privada
Generado con la utilidad “sn.exe”, distribuida con el SDK
El nombre del archivo se especifica en el código, dentro del archivo AssemblyInfo.vb
<Assembly: AssemblyKeyFileAttribute(“keys.snk”)>
Anatomía de un assembly
Manifest Assembly
Module Metadata
Tipos Module
Application Domain
El application domain determina un contexto de
memoria donde se carga una assembly
En general se trabaja con un único application
domain por proceso
domain por proceso
El estándar define el concepto de application
domain
o Un proceso puede tener mas de un application domain
Runtime assembly resolution
Prevenga dolores de cabeza… para regalar y regalarse
1. Determina version buscada del assembly
2. Comprueba que la assembly no haya sido linkeada antes, si lo fue reusa la ya cargada
3. Busca la assembly en la Global Assembly Cache 3. Busca la assembly en la
(strong named assemblies only)
4. Chequea la existencia de elementos <codeBase>, en la configuracion, y si no los encuentra (por defecto no hay) busca la assembly según el criterio,
[application base] / [assembly name].dll
[application base] / [assembly name] / [assembly name].dll [application base] / [culture] / [assembly name].dll
Elementos de .NET
Classes
Se proveen los conceptos tradicionales de los lenguajes OO
Encapsulamiento, Herencia, Polimorfismo, Sobrecarga, etc.
Sobrecarga, etc.
Toda clase extiende System.Object
Elementos de .NET
Classes
//C#
MessageBox.Show(42.ToString());
MessageBox.Show("HelloWorld".GetType().ToString());
'VB
MessageBox.Show(42.ToString())
Elementos de .NET
Classes
Toda clase .NET esta almacenada en
Un Assembly
Es el archivo binario donde esta almacenada la clase EXE o DLL
Un Namespace
Una agrupación lógica
La Capa de Presentación
Tecnologías .NET de UI
Windows Form (Desktop)
ASP.NET (Web)
ASP.NET MVC (Web)
Interfaz de Servicios
Tecnologias .NET Servicios
Web Services
MSMQ
Remoting
In Proc
Flujos de trabajo
empresariales
Lógica Ad Hoc .NET
Orquestaciones BizTalk
La Capa de Acceso a Datos
Entity Framework
ADO.NET
LINQ To SQL
Seguridad
ASP.NET 2.0 Membership
Modelo de providers
SQL Server
Active Directory Active Directory
Autenticación, y autorización
Enterprise Library
Security Application Block
Configuración
Namespace System.Configuration
Archivos xml de configuracion, aka App.config
Modelo extensible para la definicion de formatos
personalizados de configuración
personalizados de configuración
Maneja una seccion de propósito general de
nombre appsettings
Transaccionalidad
Base de datos
ADO.NET
Transacciones distribuidas
COM+ Services (aka Enterprise Services) COM+ Services (aka Enterprise Services)
Nuevo soporte
IDE .NET Visual Studio
Es un entorno WYSIWYG para el desarrollo de
formularios Windows, y Web
Maneja la noción de Proyectos
Los mismos se pueden agrupar en carpetas
Los mismos se pueden agrupar en carpetas
Viene en mas de un sabor:
Express
Standard Edition Professional Edition Tools for Office