08/03/2013 UNIVERSIDAD DE MANAGUA UDEM SUMARIO El software. Los lenguajes de programación .Net Framework Introducción a C# Estructura básica de un programa en C# Hola Mundo! Palabras reservadas, operadores, prioridad y orden de evaluación. Tipos de datos. Conversión entre tipos de datos. Operaciones matemáticas. Generación de números aleatorios. EL SOFTWARE Las operaciones que debe realizar el hardware son especificadas por una lista de instrucciones, llamadas programas o software. PROGRAMA -S.O. - Software de Sistema Dos grandes grupos Indispensables para que la máquina funcione. - Software de Aplicación Facilitan el uso de la computadora. -Compiladores e intérpretes. -Depuradores. ENTRADA COMPUTADORA SALIDA -Drivers, etc. -Paquetes de oficina. - CAD/CAM. - Bases de datos, etc. 1 08/03/2013 LOS LENGUAJES DE PROGRAMACIÓN Programas de Aplicación Programas del sistema Sirve para escribir programas que permitan la comunicación usuario/máquina. Programas especiales llamados traductores (compiladores o intérpretes) convierten las instrucciones escritas en lenguajes de programación en instrucciones escritas en lenguaje de máquina (0 y 1, bits) que ésta pueda entender. PC Instrucciones a la computadora. Los diferentes pasos (acciones) de un algoritmo se - Lenguaje de máquina Principales tipos de lenguajes - Lenguaje de bajo nivel (ensamblador) expresan en los programas como instrucciones, sentencias o proposiciones. El término instrucción se suele referir a los lenguajes máquina y bajo nivel. El término sentencia o proposición a los lenguajes de alto nivel. Instrucciones básicas - Lenguaje de alto nivel Entrada/Salida Aritmético/Lógicas Selectivas Repetitivas 2 08/03/2013 Tipo de Definición Lenguaje Características Ventajas Desventajas Máquina Aquellos que están escritos en lenguajes directamente inteligibles por la máquina. -Instrucciones en cadenas binarias. - Dependiente del hardware -Cargar del programa sin traducción. -Velocidad de ejecución. -Dificultad y lentitud de codificación. -Poca fiabilidad. -Dificultad de verificación. -Sólo ejecutables en mismo procesador Bajo nivel El lenguaje de bajo nivel por excelencia es el ensamblador cuyas instrucciones son conocidas como nomotécnicos. -Lenguaje símbólico. -Posee una estructura y gramática definidas. -Mayor facilidad de codificación. -Velocidad de cálculo. -Dependencia de la máquina. -No transportable. -Formación de programadores más compleja. Tipo de Definición Lenguaje Alto nivel Características Ventajas Son los más -Mucho más utilizados por los fáciles de programadores. entender. Diseñados para que personas escriban y entiendan los programas de un modo mucho más fácil que los lenguajes máquina y ensambladores. -Formación de programadores relativamente corto. -Se basan en reglas sintácticas similares a los lenguajes humanos. -Modificaciones fáciles. -Reducción de costo. -Transportables Desventajas -Incremento del tiempo de puesta a punto. -No aprovechan los recursos internos de la máquina. -Aumento de la ocupación de memoria. -Tiempo de ejecución de los programas es mucho mayor Lenguajes de alto nivel de uso mayoritario: C C++ COBOL FORTRAN PASCAL VISUAL BASIC ADA95 MODULA-2 PROLOG LISP SMALLTALL BORLAND DELPHI SQL POWER BUILDER JAVA C# EIFFEL .NET FRAMEWORK El .Net Framework es una infraestructura sobre la que se reúne todo un conjunto de lenguajes y servicios que simplifican enormemente el desarrollo de aplicaciones. Ofrece un entorno de ejecución altamente distribuido, que permite crear aplicaciones robustas y escalables. Componentes principales: El Motor de Generación de GUI. Biblioteca de la Jerarquía de Clases Básicas de la Plataforma. Entorno de Ejecución Común o Common Language Runtime (CLR). Infraestructura de .Net Framework 3 08/03/2013 El CLR, Common Language Runtime Esquema de componentes: El CLR constituye el núcleo de .Net Framework, encargándose de Es el alma de .Net Framework y es el encargado de la ejecución de código de las aplicaciones. la gestión de código en cuanto a su carga, ejecución, manipulación de memoria, seguridad, etc. En el nivel intermedio, la jerarquía de clases básicas, que constituyen un sólido API de servicios a disposición del programador, para multitud de tareas como, gestión del sistemas de ficheros, manipulación multihebra, acceso a datos, etc. Finalmente, las clases que permiten el diseño de GUI. El CTS, Common Type System Es el mecanismo del CLR que permite definir el modo en que los tipos serán creados y manipulados por el entorno de ejecución de .Net Framework. Funcionalidades: Integración de código escrito en diferentes lenguajes. Optimización de código en ejecución. Modelo de tipos OO con soporte a múltiples lenguajes. Normas que aseguran la intercomunicación entre objetos. Diseñar el modo en como el código de la aplicación será ejecutado, pero no se encarga directamente de su ejecución. 4 08/03/2013 Metadata (Metadatos) En la propia aplicación de incluye información complementaria que pueda ser utilizada por el entorno de ejecución para funcionalidades diversas. A esta información se le denomina metadatos. Con esta técnica se obtienen aplicaciones o componentes auto-descritos. Son creados por el compilador del lenguaje utilizado en cada caso y grabados dentro del fichero (EXE o DLL) en formato binario, siendo el CLR el encargado de recuperarlos en el momento que los necesite. Soporte Multi-Lenguaje El CLR soporta múltiples lenguajes, permitiendo así elevados niveles de integración entre los mismos. .Net Framework proporciona los siguientes lenguajes: VB .Net C# C++ con Extensiones Administradas. JScript .Net El código compilado en cada lenguaje no pasa directamente a código ejecutable puro, sino a código intermedio. El CLS, Common Language Specification ¿Cómo es posible conseguir que lenguajes de distinta naturaleza y sintaxis se entiendan? Respuesta: el CLS o Especificación Común de Lenguajes, el cual consiste en un conjunto de características comunes, que deben cumplir todos los lenguajes de la plataforma, para poder integrarse entre sí. Finalidades: Independencia del lenguaje. Integración del lenguaje. Apertura a nuevos lenguajes 5 08/03/2013 Ejecución Administrada Trata de un conjunto de elementos existentes en .Net Framework que supervisan el código del programa durante su ejecución dentro del CLR, asegurándose que el código cumple con todos los requisitos para poder hacer uso de los servicios proporcionados por el CLR, y beneficiarse de sus ventajas. Código Administrado. Código que utiliza todas las cualidades del CLR. Por defecto el código de VB .Net, C# y JScript .Net es administrado. Datos Administrados. Datos de la aplicación gestionados en memoria por el CLR a través La Ejecución dentro del CLR Durante el proceso de compilación, el código fuente es tomado por el compilador del lenguaje utilizado para su escritura, y convertido, no directamente a código binario, sino a lenguaje intermedio, que recibe el nombre de Microsoft Intermediate Language (MSIL o IL). MSIL consiste en un conjunto de instrucciones independientes del SO o procesador en el que vaya a ejecutarse el programa, y que se ocupa de la manipulación de objetos, accesos a memoria, manejo de excepciones, etc. de un mecanismo denominado recolector de basura. Compilación instantánea del IL y Ejecución Antes de realizar la ejecución del código, el código IL debe ser convertido a código máquina, utilizando lo que se denomina un compilador instantáneo o compilador Just-In-Time (JIT Compiler), que es el encargado de generar el código binario específico para el procesador en el que el programa será ejecutado. 6 08/03/2013 Compilación bajo demanda Para optimizar la ejecución y mejorar su velocidad, el compilador JIT se basa en el hecho de que es posible que ciertas partes del código que compone la aplicación nunca sean ejecutadas. Por este motivo, sólo se compila el código según se va necesitando y se almacena el código máquina resultante de modo que esté accesible en las siguientes llamadas. Independencia de la Plataforma Ya que el código máquina ejecutable, es obtenido a través de un compilador JIT, .Net Framework proporciona varios compiladores JIT para cada una de las plataformas que soporta, consiguiendo así que una aplicación pueda funcionar distintos SO, haciendo que el código de la aplicación sea independiente de la plataforma, en donde .Net Framework actúa como una capa intermedia que aísla el código del SO. INTRODUCCION A C# ¿Qué es C#? Es un paquete de desarrollo diseñado por Microsoft para simplificar el desarrollo de aplicaciones para internet. C# es leído en ingles “C Sharp” y en español “C Almohadilla”. Creado por Scott Wiltamuth y Anders Hejlsberg, este último también conocido por haber sido el diseñador de Turbo Pascal y la herramienta RAD Delphi. C# es el único lenguaje diseñado específicamente para ser utilizado en la plataforma .NET, por eso se suele decir que C# es el lenguaje nativo de .NET. 7 08/03/2013 Origen de C#. Problemas de Java: Dificultad para la interoperabilidad de lenguajes cruzados o programación de lenguajes mezclados. No integración completa de la plataforma Java, aunque los programas Java se puedan ejecutar en un entorno Windows. Para responder a estas necesidades Microsoft creo C# dentro de su estrategia global .NET. C# está relacionado con C, C++ y Java: De C ha heredado su sintaxis, muchas de las palabras reservadas y sus operadores. De C++ ha heredado su modelo de objetos. La relación con Java es mas bien de «amor/odio». Son similares en cuanto a programación distribuida y utilización de código intermedio para conseguir portabilidad, pero difieren en los detalles. C# incluye delegados, propiedades, indexadores y eventos como elementos del lenguaje. Según sus creadores C# supone una mejora por dos razones básicas: Porque es el último, y por lo tanto, el más adaptado a las necesidades actuales del programador y el que más a aprendido de los demás, heredando lo mejor de cada entorno, y añadiendo aquello elementos que los programadores solicitaban. En segundo término, por que su creador principal el danés Anders Hejlsberg, ha podido hacer un excelente trabajo basado en su experiencia personal. Características de C#. Sencillez. Eliminación de muchos elementos que otros lenguajes incluyen y que son innecesarios en .NET. Modernidad. Incorporación de elementos que a los largo de los años ha ido demostrándose son muy útiles para el desarrollo de aplicaciones. Por eje.: tipo de dato decimal (muy útil el mundo financiero), foreach para recorrer colecciones, el string para representar cadenas o la distinción del tipo bool para valores lógicos. Orientación a objetos. Orientación a componentes. Incluye elementos propios del diseño de componentes, por ejemplo: definir propiedades, eventos, o atributos. Gestión automática de memoria. Tiene a su disposición el recolector de basura del CLR. Seguridad de tipos. Acceso a los tipos de datos se realice correctamente. Instrucciones seguras. Se ha impuesto una serie de restricciones en el uso de las instrucciones de control más comunes. Características de C#. Sistemas de tipos unificado. Derivación de la clase System.Object. Extensibilidad de tipos básicos. Permite definir, estructuras. Extensibilidad de operadores. Facilita la legibilidad de código, además permite redefinir el significado de la mayoría de los operadores. Extensibilidad de modificadores. A través de los atributos posibilita añadir metadatos. Versionable. Creación de versiones de tipos sin temor a que la introducción de nuevos miembros provoquen errores difíciles de detectar. 8 08/03/2013 Estructura básica de un programa en C# //Esqueleto de un programa en C#. using System; using System.Collections.Generic; using System.Text; Algunas bondades: namespace MyNamespace { Sintaxis simplificada: operadores de referencia y namespaces: ., ->, :: sustituidos por -> class program { public static void Main(string[] args) { //aqui va el codigo } } XML ¿Comentarios? ¡Documentación! Integración con otros lenguajes .NET. Apuntadores. ¿Seguridad o no seguridad? ¡Dinero! $$: VB .NET vs C# } Hola Mundo! desde C# Palabras Reservadas abstract class event if new readonly struct unsafe using System; using System.Collections.Generic; using System.Text; as const explicit implicit null ref switch ushort base continue extern in object return this using namespace HolaMundo { class Program { static void Main(string[] args) { Console.WriteLine("Hola Mundo! desde C#."); Console.ReadKey(); //Pausa } } } bool decimal false int operator sbyte throw virtual break default finally interface out sealed true volatile byte delegate fixed internal override short try void case do float is params sizeof typeof while catch double for lock private stackalloc uint char else foreach long protected static ulong checked enum goto namespace public string unchecked 9 08/03/2013 Operadores Categoría Prioridades y Orden de Evaluación Operadores Aritméticos + - * / % Lógicos & | ^ ! ~ && Concatenación + Incremento/Decremento ++ -- Corrimiento << >> Relacionales == < > <= Asignación = Acceso a miembros . Índices [] Cast () Condicional ?: Concatenación y remoción + Creación de objetos new Información de tipos is sizeof typeof Desreferencia y dirección * -> & != += -= *= /= || true false >= %= &= |= ^= <<= >>= - [] Tipos de Datos Tipo de C# Tipo en la plataforma .NET ¿Signo? Bytes empleados Conversión entre Tipos de Datos Posibles valores sbyte System.Sbyte Si 1 -128 a 127 short System.Int16 Si 2 -32768 a 32767 int System.Int32 Si 4 -2147483648 a 2147483647 long System.Int64 Si 8 -9223372036854775808 a 9223372036854775807 byte System.Byte No 1 0 a 255 ushort System.Uint16 No 2 0 a 65535 uint System.UInt32 No 4 0 a 4294967295 ulong System.Uint64 No 8 0 a 18446744073709551615 float System.Single Si 4 Aproximadamente ±1.5 x 10-45 a ±3.4 x 1038 con 7 dígitos significativos double System.Double Si 8 Aproximadamente ±5.0 x 10-324 a ±1.7 x 10308 con 15 o 16 dígitos significativos decimal System.Decimal Si 12 Aproximadamente ±1.0 x 10-28 a ±7.9 x 1028 con 28 o 29 dígitos significativos char System.Char - 2 Cualquier carácter de Unicode (16 bit) bool System.Boolean - 1/2 - Implícita Tipos de Conversión Cuando se trate de una asignación, convierte el valor de la derecha al tipo de la variable de la izquierda siempre que no haya pérdida de información. - Explícita Si existe pérdida de datos C# exige que la conversión se realice explícitamente true o false 10 08/03/2013 Conversión Implícitas Permitidas Conversión Explícita Las flechas indican las conversiones implícitas permitidas. - Conversión Cast. Conversión Explícita -<tipoDato>.Parse -La clase System.Convert Conversión Explícita Cast Tiene la forma: (tipo)expresión Conversión Explícita <tipoDato>.Parse Tiene la forma: <tipoDato>.Parse short sDato = 0; int iDato = 0; long lDato = 0; float fDato = 0; double dDato = 2; decimal mDato = 0; fDato = float.Parse(dDato.ToString()); lDato = long.Parse(fDato.ToString()); iDato = int.Parse(lDato.ToString()); sDato = short.Parse(iDato.ToString()); mDato = decimal.Parse(dDato.ToString()); 11 08/03/2013 Conversión Explícita System.Convert El Tipo de Dato DateTime Representa un instante del tiempo, típicamente expresado como una fecha y hora del día. short sDato = 0; int iDato = 0; long lDato = 0; float fDato = 0; double dDato = 2; decimal mDato = 0; fDato = System.Convert.ToSingle(dDato); lDato = System.Convert.ToInt64(fDato); iDato = System.Convert.ToInt32(lDato); sDato = System.Convert.ToInt16(iDato); mDato = System.Convert.ToDecimal(dDato); /* * Declaracion de la variable tipo Fecha/Hora. */ DateTime FechaActual = DateTime.Today.Date; /* * Manipulación de información contenida en una * variable tipo Fecha/Hora. */ Console.WriteLine("Fecha actual {0}", FechaActual); Console.WriteLine("Fecha actual {0}", FechaActual.Date); Console.WriteLine("Fecha actual {0}", FechaActual.ToLongTimeString ()); Console.WriteLine("Fecha actual {0}", FechaActual.ToLongDateString ()); Console.WriteLine("Fecha actual {0}", FechaActual.ToShortDateString ()); Console.WriteLine("Fecha actual {0}", FechaActual.ToShortTimeString ()); /* * Solicitud de la fecha de nacimiento al usuario. */ Console.Write ("Dame tu fecha de nacimiento (dd-mm-yyyy):"); DateTime FechaNacimiento = System.Convert.ToDateTime (Console.ReadLine ()); /* * Cálculo e impresión del valor de la edad. */ Console.Write("Tu edad es: {0}",FechaActual.Year - FechaNacimiento.Year); Console.Read(); Definición: DateTime <nombreVariable>; DateTime FechaActual = DateTime.Today.Date; Conversión: FechaActual = DateTime.Parse(“28-06-2009”); FechaActual = System.Convert.ToDateTime(“28/06/2009”); Operaciones Matemáticas La biblioteca de clases .NET que incluye una clase llamada Math en sus espacio de nombres System, la cual define un conjunto de operaciones matemáticas de uso común que pueden ser utilizadas por cualquier programa. La clase Math contiene métodos para ejecutar operaciones numéricas elementales como raíz cuadrada, exponencial, logaritmo y funciones trigonométricas. Por ejemplo: Console.WriteLine(Math.Sqrt(36)); Console.WriteLine(Math.Pow(2, 4)); Console.WriteLine(Math.Round(4.5)); Console.WriteLine(Math.E); Console.WriteLine(Math.PI); . . . 12