2. Agenda
Presentación del curso
Programación Orientada a Objetos
Conceptos Fundamentales
Herencia, Encapsulamiento, Polimorfismo
.NET Framework 2.0
¿Qué es el Framework?
Common Language Runtime
MSIL
3. Agenda
Presentación del curso
Programación Orientada a Objetos
Conceptos Fundamentales
Herencia, Encapsulamiento, Polimorfismo
.NET Framework 2.0
¿Qué es el Framework?
Common Language Runtime
MSIL
4. Presentación
Programa de Pasantias
Programa Desarrollador 5 Estrellas
2005
Como usar el contenido del curso
Programa de Empleos
Presentación
5. Programa de Pasantias
Formación de Desarrolladores en .NET
+Valor
+Posibilidades
+Empleo
Contenido, Programa Desarrollador 5 Estrellas 2005
(hasta la 2da estrella)
Exámenes
Programa DCE2005 , 2da Estrella Aprobada
Asistencia al entrenamiento presencial (80%) de las 16
clases
Presentación
7. Programa Desarrollador 5 Estrellas 2005
Es un conjunto de herramientas que te permiten
aprender y desarrollar tus habilidades en la
tecnología .NET
En que Consiste:
Cursos Gratuitos en Internet
Exámenes de evaluación
Comunidad de Profesionales en desarrollo
Alto reconocimiento del mercado
Presentación
9. Como usar el contenido del curso
Registrese en DCE2005 www.dce2005.com
Leer el contenido y realizar las prácticas
Materiales:
.NET Esencial
Fundamentos de la Programación
Programación Orientados a Objetos
Primera Estrella
.NET Framework 2.0
Introducción a C# 2005
Introducción a VB.NET 2005
Segunda Estrella
Presentación
Programación Web con C# 2005
Programación Web con VB.NET 2005
10. Como usar el contenido del curso
Registrarse con datos reales
Cuenta asociada con .net passport
Esos datos serán luego usados en el programa de empleo
Registrarse con el código de institución
No rendir los exámenes hasta que esten preparados
Usar Foros, chats, y los recursos que encuentren en el sitio
dce2005
Presentación
11. Programa de Empleos
Oportunidades de Empleos
Sitio de empleos .net
Para quienes completen y aprueben el curso
Trabajo en Socios de Negocios
Presentación
12. Temas a desarrollarse en el Curso
Introducción al Programa
Programación Orientado a Objetos y Servicios
Microsoft .Net Framework v2.0
IDE VisualStudio.Net 2005
Sintaxis del Lenguaje (C# y VB.NET)
SQL Server 2005
Sentencias SQL
ADO.NET 2.0
BCL (Base Class Library)
ASP.NET 2.0
Presentación
ASP.NET WebService
Seguridad
13. Agenda
Presentación del curso
Programación Orientada a Objetos
Conceptos Fundamentales
Herencia, Encapsulamiento,
Polimorfismo
.NET Framework 2.0
¿Qué es el Framework?
Common Language Runtime
MSIL
14. ¿Qué es la Programación Orientada a
Objetos?
Es una manera de construir Software
basada en un nuevo paradigma.
Propone resolver problemas de la
realidad a través de identificar objetos y
relaciones de colaboración entre ellos.
El Objeto y el mensaje son sus
elementos fundamentales.
POO
20. ¿Qué es una clase?
Clase Clasificación
Clasificación en base a
comportamiento y atributos comunes
Crea un vocabulario
La forma en que nos comunicamos
La forma en que pensamos
POO
21. ¿Qué es una clase?
Construcción Estática
Describe:
Comportamiento común
Atributos [estado]
Estructura de datos
Incluye:
Datos
Funciones o métodos
POO
22. Constructor y Destructor
Dos métodos de las clases
Existen por defecto
Constructor, inicializa valores
Destructor, libera recursos al finalizar
la vida de una instancia de una clase
creada en memoria
Existen constructores y destructores
por defecto
POO
24. ¿Qué es un objeto?
Instancia de una clase
Un objeto posee:
Identidad: Relación única entre el objeto
del modelo y el ente de la realidad que
representa. Se implementa a través de un
id único en el modelo.
Comportamiento: Resuelve un conjunto
particular de problemas a través de su
protocolo.
Estado: Almacena información
Fija
Variable
POO
26. Pilares de POO
Herencia Polimorfismo Encapsulamiento
Abstracción
POO
27. Abstracción
Ignorancia selectiva
Decide que es importante y que no lo es
Se enfoca [depende] en lo que es importante
Ignora [no depende] de lo que no es
importante
Utiliza la encapsulación para reforzar la
abstracción
POO
28. Encapsulamiento
Acelera() 125
km
/h
300 km/h
velocidad
Frena() 40 km
/h
POO
29. ¿Por qué utilizar encapsulamiento?
Dos grandes razones
Control
Cambio
POO
30. Encapsulamiento
Los métodos
Acelera() son públicos:
son accesibles
desde fuera
velocidad Los datos son
privados:
Frena() accesibles
desde dentro
Controlador del Motor
POO
31. Datos del Objeto
Describe los objetos de forma individual
Color: Azul
Color 2: Gris
Instrumental Digital
Ventanas eléctricas
4 asientos
Color: Verde
Color 2: Negro
Instrumental digital
2 asientos
POO
32. Datos Estáticos
Describen información para todos los objetos
Número de llantas: 4
Capacidad del tanque: 40
litros
Tipo de Transmisión:
Automática
POO
33. Métodos Estáticos
Solo pueden acceder a datos
compartidos por todas las instancias
de la clase.
Encapsula los datos estáticos
Son invocados en la clase, no en el
objeto
No es necesaria la creación de una
instancia para invocarlos
POO
35. Herencia
Es “un tipo de” relación
Relación “es un”
Entre Clases Transporte
Va de la generalización a la Acelera
especialización Frena
Clase base Automóvil
Clase derivada
Hereda la implementación
POO
36. Jerarquías de Clase
Transporte
Marítimo Aire Nieve Tierra
DentroAtmosfera FueraAtmosfera 1-Persona N-Personas
POO
37. Jerarquías de Clase – Otro ejemplo
Cuentas
Cuenta Corriente Caja Ahorro
Común Sueldo
POO
38. Herencia Múltiple
Singular: La clase hija deriva de una única clase
padre
Múltiple: La clase hija deriva de varias clases padre
No es soportada por todos los lenguajes
Puede ser confusa
Nieve 1-Persona Terrestre
POO
40. Polimorfismo y sobrecarga
Polimorfismo: desconocimiento del cliente sobre la
clase concreta del objeto que brinda el servicio.
Esto me da libertad de intercambiar libremente el
objeto servidor.
Sobrecarga: Definir más de un método por cada
mensaje, los tipos de los argumentos ayudan a
decidir a qué mensaje se invoca.
Tareas similares son realizadas por métodos con
mismo nombre
Suma
Enteros
Decimales
Fracciones
Simplifican la tarea del desarrollador, al no tener
que recordar distintos nombres para
POO
comportamientos iguales.
41. Polimorfismo
La definición del método reside en la clase base
La implementación del método reside en la clase derivada
La invocación es resuelta al momento de ejecución
Early binding
Late binding
Auto
Acelera
Frena
Cohete
Acelera
Frena
Transporte
Acelera
Frena
Caballo
Acelera
POO
Frena
42. Clases Base Abstractas
Existen solamente para que se
deriven de ellas
No tiene sentido crear una instancia de
este tipo de clases
Métodos abstractos
Clases abstractas – Concrete classes
Automóvil
Color
Asientos
Transporte
Acelera
frena ?
POO
43. Resumen
¿Qué es la Programación Orientada
a Objetos?
Clases y Objetos
Métodos y Atributos
Encapsulamiento
Herencia
Polimorfismo
POO
44. Agenda
Presentación del curso
Programación Orientada a Objetos
Conceptos Fundamentales
Herencia, Encapsulamiento, Polimorfismo
.NET Framework 2.0
¿Qué es el Framework?
Common Language Runtime
MSIL
45. ¿Qué es un Framework?
Marco de trabajo
Puede estar compuesto por
Librerías de clases
Documentación
Ayuda
Ejemplos
Tutoriales
.NET Framework
Etc.
46. ¿Qué es Framework 2.0?
Herramientas Clientes
de Desarrollo
Aplicaciones
Bases de Datos Web ASP.NET
.NET Framework
Servicios Aplicaciones
.NET Web XML de Usuario
Framework
47. VB C++ C# J# …
Common Language Specification
Visual Studio .NET
ASP .NET Windows
Web Forms Web Services
ASP.NET Mobile Controls
Forms
ADO .NET and XML
Base Class Library
Common Language Runtime
.NET Framework
Operating System
48. ¿Qué problemas resuelve .NET?
Desde Internet, muchas aplicaciones y
dispositivos están fuertemente
comunicados entre sí
Los programadores escribían
arquitectura en lugar de aplicaciones
Los programadores tenían
conocimientos limitados o debían
.NET Framework
aprender nuevos lenguajes
49. .NET Framework
El .NET Framework constituye las bases
sobre las que, tanto aplicaciones como
servicios, son ejecutadas y construidas.
La naturaleza unificada del .NET Framework
permite que cualquier tipo de aplicación sea
desarrollada mediante herramientas
comunes haciendo la integración mucho
mas simple.
El .NET Framework esta compuesto de:
.NET Framework
El CLR (Common Language Runtime)
La BCL (Base Class Library)
50. CLR – Common Language Runtime
El CLR es el motor de ejecución (runtime)
del .NET Framework.
Ofrece servicios automáticos tales como:
Administración de la memoria
Seguridad del código, asegurando:
Conversión de tipos
Inicialización de variables
Indexación de arreglos fuera de sus
.NET Framework
límites
Versionamiento
51. Componentes de CLR
.NET Framework Class Library Support
Thread Support COM Marshaler
Type Checker Exception Manager
Security Engine Debug Engine
MSIL to Native Code Garbage
Compilers Manager Collector
.NET Framework
Class Loader
52. CTS (Common Type System)
Define un conjunto común de “tipos”
orientado a objetos
Todo lenguaje de programación debe
implementar los tipos definidos por el CTS
Todo tipo hereda
directa o
indirectamente del
tipo OBJECT
.NET Framework
Tipos de VALOR y
de REFERENCIA
53. Microsoft Intermediate Language (MSIL)
El compilador convierte al código soportado por
.NET en lenguaje intermedio.
Es un conjunto de instrucciones independientes de
la CPU, que se convierten en código nativo al
ejecutarse.
Para convertir MSIL a código nativo, se utilizan
compiladores llamados “Just In Time” JIT
Los archivos ejecutables estan conformados por
MSIL
.NET Framework
Datos Adicionales (Metadata)
El MSIL es independiente del lenguaje en el que se
desarrolla
54. Resumen
¿Qué es el .NET Framework?
Common Language Runtime
Common Type System
Microsoft Intermediate Language
.NET Framework
Notas del editor
Microsoft y las Universidades partícipes del programa pretenden a través del otorgamiento de becas de estudio ayudar a impulsar la carrera de los desarrolladores. El conocimiento de la tecnología .net abre nuevas oportunidades laborales, debido a la gran demanda existente en el mercado. Se otorgarán un total de 1000 becas de estudio entre las Universidades partícipes. Todos aquellos que se inscriban y cumplan los requisitos previos de selección indicados en los Términos y Condiciones podrán acceder sin costo a las mismas. El inicio de cada curso estará sujeto a la cobertura del cupo mínimo de inicio. Para la aprobación del curso, se establece un requisito de asistencia obligatoria al 80% de las actividades presenciales, así como la aprobación de un examen intermedio y uno final correspondientes a la primera y segunda estrella del programa Desarrollador Cinco Estrellas http://www.microsoft.com/spanish/msdn/comunidad/dce/default.asp, y la presentación y aprobación de un trabajo práctico. El examen de la primera estrella se rendirá on line en el site de Desarrollador Cinco Estrellas y el examen final se rendirá presencialmente por los alumnos y será el correspondiente al nivel Segunda Estrella, ambos del Programa Desarrollador 5 Estrellas de Microsoft. Mediante estos exámenes los alumnos obtienen su certificado de aprobación del curso para cada instancia, que certifica su nivel de conocimiento. Para solicitar un cupo de acceso a la beca de estudio, en esta primera etapa hay que inscribirse on line, haciendo click acá y completar todos los datos requeridos. En el mes de Noviembre se les enviará al mail consignado en la registración, las indicaciones para completar el test y algunos datos adicionales.
Empleos Esta última instancia habilita a los participantes a acceder a una web donde pondrán a disposición sus datos para ser contactados por los Socios de Negocios que requieran cubrir alguna posición en sus empresas. Participarán así de un proceso de selección y aquellos cuyo perfil se adapte mas a las necesidades de la posición, recibirán una propuesta para incorporarse a la empresa. Asimismo dichos Socios de Negocios publicarán sus búsquedas y podrán recibir los CVs de los desarrolladores interesados.
La programación orientada a objetos entiende a la actividad de desarrollar software basados en el paradigma de orientación a objetos. Dentro de este paradigma, la programación es adquisición de conocimiento de la realidad que queremos modelar, en pos de construir un modelo computacional de la misma. Asociamos entonces a entes de la realidad, objetos del mundo computacional con el objetivo de construir un modelo de simulación de la misma. La programación orientada a objetos implica entre otros beneficios, gran capacidad de reuso. Dado que en la realidad resolvemos problemas a través de que los diferentes entes de la misma colaboren, una vez que hemos encontrado un mecanismo para resolver un problema, utilizamos éste para alcanzar el mismo resultado existoso una y otra vez. Dado que nuestro modelo computacional es una simulación de esta realidad, el reuso se presenta en ambos sentidos. El concepto de programación orientada a objetos (OOP) no es nuevo, lenguajes clásicos como SmallTalk se basan en ella. Dado que la OOP. se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolución del problema se realiza en términos de objetos, un lenguaje se dice que es orientado a objetos, si los elementos esenciales de construcción del software son objetos y mensajes. Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización. Esta definición especifica varias propiedades importantes de los objetos. En primer lugar, un objeto no es un dato simple, sino que contiene en su interior cierto número de componentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de una organización jerárquica o de otro tipo.
Pensar en términos de objetos es muy parecido a cómo se hace en la vida real. Por ejemplo, pensar en un coche para tratar de construir un modelo orientado a objetos. Se diría que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o estacionar. En un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.
Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. La clasificación se basa en un comportamiento y atributos comunes. Permite crear un vocabulario estandarizado para comunicarse y pensar dentro del equipo de trabajo.
Una clase es una construcción estática que describe un comportamiento común y atributos (que toman distintos estados). Su formalización es a través de una estructura de datos que incluye datos y funciones, llamadas métodos. Los métodos son los que definen el comportamiento.
Toda clase tiene, de manera implícita o explicita, dos métodos. El constructor y el destructor. El constructor es llamado cuado la clase comienza a ocupar un lugar en memoria, es decir, cuando comienza a ser utilizada, al ser instanciada. Se encarga de inicializar valores, e incluso muchas veces de llamar a otros constructores de otras clases. El destructor es un método que se llama al finalizar la vida de la instancia de la clase, para liberar recursos. Cualquiera de los dos métodos tienen que formar parte de las clases, existen constructores y destructores por defecto, para las clases mas simples. En clases mas complejas, el desarrollador deberá implementar estos métodos. Muchas veces, los constructores reciben parámetros con los valores con los que la clase debe inicializarse. Las llamadas a constructores y destructores pueden ser implícitas o explicitas, dependiendo de la clase, la aplicación, etc.
Los objetos son instancias de una clase. Cuando creamos una instancia tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto. Identidad: El principio de identidad se refiere a la relación única entre cada objeto del modelo computacional y el dominio de problema de la realidad que representa. En el modelo computacional esto se representa a través de un identificador único en el modelo. Comportamiento que le permite realizar tareas específicas, como a todos los objetos de su misma clase. Estado que se determina a través de cierta información almacenada, que puede ser fija o variable.
Proponer a los asistentes del curso la creación descripción, en atributos y métodos, de distintos objetos del mundo real. Por ejemplo: Auto, Casa, Multa por infracción de transito, Tarjeta de débito. ¿Qué otras cosas se pueden modelizar mediante POO?
La abstracción de datos permite no preocuparse de los detalles no esenciales. Existe en casi todos los lenguajes de programación. Las estructuras de datos y los tipos de datos son un ejemplo de abstracción. Los procedimientos y funciones son otro ejemplo. Es la capacidad de un objeto de cumplir sus funciones independientemente del contexto en el que se lo utilice; o sea, un objeto “cliente” siempre expondrá sus mismas propiedades y dará los mismos resultados a través de sus eventos, sin importar el ámbito en el cual se lo haya creado. Es poder generalizar un objeto como tipo de dato, con sus características y comportamientos comunes.
Esta característica es la que denota la capacidad del objeto de responder a peticiones a través de sus métodos sin la necesidad de exponer los medios utilizados para llegar a brindar estos resultados. O sea, el método Acelerar() del objeto “auto”, siempre aumentará la velocidad, sin necesidad de tener conocimiento de cuáles son los recursos que ejecuta para llegar a brindar este resultado.
Los objetos deben comunicarse solo a través de su protocolo de modo que la responsabilidad en administrar tanto el comportamiento como el respetar los invariantes de clase sea solo del objeto que implementa dicho comportamiento. Esto además es una condición necesaria para permitir el polimorfismo. La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que las Clases se ven como cajas negras donde sólo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque solo interesará conocer qué hace la Clase pero no será necesario saber cómo lo hace.
El encapsulamiento también es llamado “ocultamiento de la información”, esto asegura que los objetos no pueden cambiar el estado interno de otros objetos de maneras inesperadas; solamente los propios métodos internos del objeto pueden acceder a su estado. Cada tipo de objeto expone una interfaz a otros objetos que especifica cómo otros objetos pueden interactuar con él. Algunos lenguajes permiten un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción.
La clase auto define una serie de atributos: Color, Color2, Instrumental, Asientos, etc. Cada una de las instancias de esa clase, toma valores diferentes.
Hay ciertos atributos que pueden ser comunes a todas las instancias de una clase, son definidos como estáticos.
Los métodos estáticos definidos en una clase, pueden ser invocados sin necesidad de instanciar la clase. Solo accederán a datos estáticos. El llamar a métodos estáticos generalmente resulta cómodo, sobre todo en tareas de inicialización de las clases, por ejemplo.
La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia. Relación “es un” significa que la clase hija (o heredera), es, además, lo mismo que su padre. Es decir, un auto “es un” transporte, un caballo “es un” animal, etc. Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento. Esto suele hacerse habitualmente agrupando los objetos en clases y las clases en árboles o enrejados que reflejan un comportamiento común.
Vimos que cada vez que un objeto debe resolver un problema lo hace a través de colaborar con objetos que cumplen el rol de servidores. Estos servicios son brindados a través del protocolo que el objeto exporta. El protocolo está definido en términos de mensajes compuestos de la “signatura” y el conjunto de objetos argumento que el mismo recibe. El objeto que recibe un mensaje resuelve el problema a partir de ejecutar un método . Cuando los lenguajes orientados a objetos son fuertemente tipados, esto es que se especifica el tipo de argumento de entrada y salida de los objetos en forma implicita o explicita, podemos decidir para cada conjunto de tipos de argumento (o cantidad de argumentos) de entrada un método diferente que resuelve dicho mensaje, el compilador decide cual mpetodo aplica en funcion de esta información de tipos sobre los argumentos. A esto se lo conoce como sobrecarga. Cuando el objeto cliente desconoce la clase concreta asociada al objeto servidor, permitiendonos intercambiar diferentes servidores que aplican diferentes métodos para resolver un problema, estamos en presencia de polimorfismo. Como ejemplos de sobrecarga estamos habituados a que el operador <<suma>> esté presente en todos los lenguajes de programación. Sin embargo, los operadores <<suma de fracciones>> y <<suma de números complejos>> no existen en casi ningún lenguaje de programación. Los lenguajes OOP permiten definir un operador <<suma>> tal que reconozca que tipo de objeto se le está aplicando, a través de operaciones de objetos. Previamente deberá definir la fracción y el número complejo como una clase y la operación suma como una operación de una clase. Definiendo adecuadamente las operaciones suma de fracciones y suma de números imaginarios , el operador suma devolverá, en el caso que los operandos sean fracciones, una fracción y , en el caso de los números imaginarios, otros número imaginario.
El término de polimorfismo también define la capacidad de que más de un objeto puedan crearse usando la misma clase de base para lograr dos conceptos de objetos diferentes, en este caso podemos citar el típico ejemplo de los teléfonos, los cuales se basan en un teléfono base, con la capacidad de hacer ring y tener un auricular, para luego obtener un teléfono digital, inalámbrico, con botonera de marcado y también, tomando la misma base, construir un teléfono analógico y con disco de marcado. Si en el momento de la compilación de un programa se conoce la clase concreta del objeto que se usará, las llamadas a sus métodos quedarán fijadas mediante lo que se conoce como "enlace estático o temprano" ( early binding ), si no, habrá de determinarse la llamada adecuada en tiempo de ejecución, efectuándose entonces un "enlace dinámico o tardío" ( late binding ).
Los métodos abstractos son declarados pero no implementados. Si existe un método abstracto entonces debemos declarar la clase como abstracta, y al declararla como tal no se pueden crear instancias de ella. Sirven para definir conceptos incompletos, que deben ser completados en las subclases de la clase abstracta. En el ejemplo, la clase transporte no puede ser instanciada, salvo desde alguna clase heredera, que implemente los métodos acelerar y frenar.
Un framework, según su traducción literal es un marco de trabajo. Este marco de trabajo, ofrece a quien lo utiliza, una serie de herramientas para facilitarle la realización de determinada tarea. Un framework puede estar compuesto por librerías de clases, documentación y ayuda, ejemplos, tutoriales e incluso foros de discusión. Es posible que se utilicen varios frameworks a la vez, o incluso que algunos sean soporte de otros.
.NET Framework es un componente Windows que soporta el desarrollo y ejecucion de aplicaciones Windows y Web Services. El propósito de este componente es proveer al usuario con un entorno de programación orientada a objetos consistente, donde el código pueda estar almacenado localmente o de manera remota. Intenta minimizar los conflictos con el deploy y versionado de software y promueve la ejecución de código segura. El esfuerzo es hacer que la experiencia del desarrollador sea consistente entre una gran variedad de aplicaciones y plataformas y crear una comunicación estándar que ayude a las aplicaciones .NET Framework a integrarse con otras aplicaciones web-based. El .NET Framework tiene dos componentes principales. La Common Runtime (CLR) y la Class Library E The CLR is the foundation upon which the .NET Framework has been built. The runtime manages code at execution time and provides all the core services such as memory management, thread management and remoting. It also enforces strict type safety and ensures code accuracy in order to provide security and robustness to the applications. This capability to manage code at runtime is the distinguishing feature of the CLR. All code that is managed by the CLR is known as managed code while other codes are known as unmanaged code.
El .NET Framework 2.0 El .NET Framework provee las herramientas necesarias en run-time y compile-time para construir y ejecutar aplicaciones basadas en .NET Plataforma .NET Framework debe ejecutarse sobre un Sistema Operativo. Application Services El .NET Framework expone servicios de aplicaciones a través de clases de la .NET Framework Classs Library. Common Language Runtime 2.0 La Common Language Runtime simplifica el desarrollo de aplicaciones, provee un entorno de ejecución robusto y seguro, soporta varios lenguajes y simplifica el despliegue y la administración. La CLR es un entorno administrado (managed), en el cual los servicios comunes, como garbage collection y seguridad, son provistos automáticamente. .NET Framework Class Library 2.0 La librería de clases de .NET Framework expone características en tiempo de ejecución y provee otros servicios útiles para todos los desarrolladores. Las clases simplifican el desarrollo basado en .NET. Los desarrolladores pueden extenderlas creando sus propias librerías de clases. Las librerías de clases base implementan el .NET Framework. Todas las aplicaciones (web, windows, web services) acceden a las mismas clases base. Estas están almacenadas en namespaces. Los diferentes lenguajes acceden a las mismas librerías. ADO.NET 2.0 ADO.NET provee soporte para modelos de programación desconectada. Además proveen soporte para XML enriquecido. ASP.NET 2.0 Microsoft ASP.NET es un framework de programación que está montado sobre la CLR. ASP.NET puede ser utilizado sobre un servidor para construir poderosas aplicaciones web. ASP.NET Web Forms provee un poderoso y sencillo método para construir Interfaces de usuario (UI) dinámicas. XML Web Services Componentes Web programables que pueden ser compartidos entre aplicaciones, sobre Internet o una intranet. El .NET Framework provee herramientas y clases para desarrollo, testeo y distribución de XML Web Services. User Interfaces El .NET Framework soporta tres tipos de Interfaces de usuario: Web Forms, Windows Forms, Aplicaciones de Consola. Lenguajes Cualquier lenguaje que sea acorde a la Common Language Specification (CLS) puede ejecutarse sobre la CLR. En .NET Framework, Microsoft provee Visual Basic, Visual C++, Visual C#, Visual J#. Terceros pueden proveer nuevos lenguajes.
El .NET Framework resuelve la comunicación entre distintas aplicaciones, permite la reusabilidad de módulos, brinda la posibilidad a los desarrolladores de utilizar el lenguaje en el que mas cómodos se sienten.
La Common Language Runtime es el corazón del .NET Framework. Los compiladores y herramientas exponen funcionalidad en tiempo de ejecución y permiten escribir código con el beneficio de un entorno de ejecución administrado. El código que se desarrolla con un compilador de lenguaje que trabaja con el runtime se llama código administrado (managed code). Esto permite beneficios como integración y manejo de excepciones entre distintos lenguajes, seguridad mejorada, versionamiento y soporte para despliegue. Además de un modelo simplificado para interacción de componentes y servicios de debugging y profiling. Para permitir al runtime proveer servicios al código administrado, los compiladores deben emitir metadata (información adicional) que describe tipos, miembros y referencias en el código. La metadata se almacena con el código. Cada archivo que la CLR puede cargar contiene metadata. El runtime la utiliza para localizar y cargar las clases, mantener las instancias en memoria, resolver el llamado de métodos, generar código nativo, mejorar la seguridad y definir las fronteras del contexto de ejecución. CLR administra la memoria utilizada por las aplicaciones, evitando perdidas de memoria que podrían estar originadas por errores en el código escrito. El entorno de ejecución brinda además un entorno de ejecución que permitirá y administrará la conversión de tipos de los valores con los que operan las aplicaciones, la inicialización de las variables, el control de overflows, etc. Permite además que convivan diferentes versiones de una misma dll, sin que se generen conflictos.
La common language runtime simplifica el desarrollo de aplicaciones, brindando un entorno de ejecución seguro y robusto, con soporte para múltiples lenguajes, tal como se detalló en diapositivas anteriores. Este entorno se conoce generalmente como entorno administrado o managed environment, en el cual son provistos automáticamente los servicios comunes, como garbage collection y securuty. A continuación se realiza una breve reseña de cada uno de los componentes que serán analizados mas en detalle a continuación. Class loader Administra metadata (información provista con los archivos, analizada mas adelante), carga y disponibilidad de las clases. Microsoft intermediate language (MSIL) to native compiler Convierte MSIL a código nativo (JIT) Code manager Administra la ejecución de código. Garbage collector (GC) Provee la administración automática del ciclo de vida de todos los objetos. Security engine Provee la seguridad basada en el origen de código y en el usuario que lo ejecuta. Debug engine Permite realizar el debug de la aplicación a partir de un trazado del código que esta siendo ejecutado. Type checker Evita que se realicen casteos inseguros o se utilicen variables no inicializadas. Exception manager Provee una estructura de manejo de excepciones, la cual se integra con Windows Structured Exception Handling. Thread support Provee clases e interfaces para trabajar con programación multihilos. COM marshaler Provee interoperabilidad entre .NET y COM Base Class Library (BCL) support Integra el código con el runtime que soporta BCL
CTS define como la forma en la que los tipos deben ser declarados, utilizados y administrados en el runtime. Además es una parte del runtime para el soporte en la integración de varios lenguajes. El sistema de tipos comunes realiza las siguientes funciones: -Establecer un framework para soporte de integración de múltiples lenguajes, seguridad de tipos y alta performance en la ejecución de código. -Provee un modelo orientado a objetos que soporta la implementación de varios lenguajes de programación. -Define las reglas que debe seguir un lenguaje, lo que asegura que distintos lenguajes puedan interactuar sin problemas. Clasificación de tipos CTS soporta dos categorías generales de tipos, cada una de las cuales se divide en subcategorías: Value types: Directamente contienen sus datos. Las instancias de los value types son alocadas en la stack o de manera inline en una estructura. Pueden ser incorporados (implementados por el runtime), definidos por el usuario o enumeraciones. Reference types: almacenan una referencia a una dirección de memoria con un valor, y son alocados en la heap. Los Reference types pueden tipos auto-descriptivos, punteros, o interfaces. Todos los tipos derivan de System.Object, que es el tipo base.
Cuando se compila código soportado en .NET Framework, el compilador convierte el código fuente en Lengua intermedio de Microsoft (MSIL), que es un conjunto de instrucciones independiente de la CPU que se pueden convertir de forma eficaz en código nativo. MSIL incluye instrucciones para cargar, almacenar, inicializar y llamar a métodos en los objetos, así como instrucciones para operaciones lógicas y aritméticas, flujo de control, acceso directo a la memoria, control de excepciones y otras operaciones. Antes de poder ejecutar código, se debe convertir MSIL al código específico de la CPU, normalmente mediante un compilador JIT. Common Language Runtime proporciona uno o varios compiladores JIT para cada arquitectura de equipo compatible, por lo que se puede compilar y ejecutar el mismo conjunto de MSIL en cualquier arquitectura compatible. Cuando el compilador produce MSIL, también genera información adicional sobre el código. Esta información describe los tipos que aparecen en el código, incluidas las definiciones de los tipos, las firmas de los miembros de tipos, los miembros a los que se hace referencia en el código y otros datos que el motor de tiempo de ejecución utiliza en tiempo de ejecución. El lenguaje intermedio de Microsoft (MSIL) y los datos adicionales, conocidos como MetaData, se incluyen en un archivo ejecutable portable (PE), que se basa y extiende el PE de Microsoft publicado y el formato Common Object File Format (COFF) utilizado tradicionalmente para contenido ejecutable. Este formato de archivo, que contiene código MSIL o código nativo así como metadata, permite al sistema operativo reconocer imágenes de Common Language Runtime. La presencia de metadatos junto con el Lenguaje intermedio de Microsoft (MSIL) permite crear códigos autodescriptivos, con lo cual las bibliotecas de tipos y el Lenguaje de definición de interfaces (IDL) son innecesarios. El motor de tiempo de ejecución localiza y extrae los metadatos del archivo cuando son necesarios durante la ejecución.