370 likes | 494 Views
C# y la plataforma .NET. Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004. Javier Jiménez Juárez. Lenguajes de Programación. Dra. Ana Lilia Laureano Cruces. ¿Qué es C# ?. Lenguaje de programación de Microsoft
E N D
C# y la plataforma .NET Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier Jiménez Juárez Lenguajes de Programación Dra. Ana Lilia Laureano Cruces
¿Qué es C#? • Lenguaje de programación de Microsoft • ¿Evolución? de C++ • Totalmente orientado a objetos • Seguridad en tipos • Polimorfismo • Sobrecarga de operadores y métodos • Herencia
¿Por qué y para qué? • Lenguaje sencillo pero robusto • Sencillez de Visual Basic • Poder de C++ • Velocidad de desarrollo comparable con IDEs de Borland (Delphi, Builder)
¿Por qué y para qué? • Independencia de plataforma • .NET • Liberación de la especificación • MONO: Emulación en ambientes Linux
¿Por qué y para qué? • Bondades • Seguridad de tipos • OO • Objetos <- Tipos básicos de datos int Counter = 14; Console.WriteLine( Counter.ToString() ); • Administración automática de memoria
¿Por qué y para qué? • Bondades... • Sintaxis simplificada: operadores de referencia y namespaces: ., ->, :: sustituidos por -> • XML: ¿Comentarios? ¡Documentación! • COMponentes y componentes .NET • Integración con otros lenguajes .NET
¿Por qué y para qué? • Bondades... • Apuntadores: ¿Seguridad o no seguridad? • ¡Dinero! $$: VB .NET vs C# • Conclusión: Sistemas Windows y arquitecturas soportadas bajo .NET
Plataforma .NET • Visión futura de Microsoft: ‘Cómputo distribuido’ • Razones • Código reutilizable • “Funciona donde sea” • Proveedores de servicios
Plataforma .NET • Componentes • Definición de clases • CLR (Common Language Runtime) o máquina virtual de MSIL* • Lenguajes • Visual Basic.NET • C#, puramente .NET • C++ administrado o Managed C++ *Microsoft Intermediate Language
C#vs.JAVA • Compilación a lenguaje intermedio • JAVA bytecode • Microsoft Intermediate Language (MSIL) • Más tipos primitivos en C# • Tipos enumerados: enumeration • Estructuras: struct • No existe herencia múltiple • Herencia a través de interfaces
C#vs.JAVA • Arreglos n-dimensionales • JAVA: Arreglos que son miembros de otros arreglos • C#: Verdaderos arreglos • Polimorfismo implementado en manera mas complicada que en JAVA
C#vs.C++ • Ausencia de encabezados • Administración automática de memoria • Apuntadores: unsafe • Límites en arreglos • int != bool • switch
El lenguaje • Estructura básica de un programa // A skeleton of a C# program using System; namespace MyNamespace1 { class MyClass1 { … } struct MyStruct { … } interface IMyInterface { … } namespace MyNamespace2 { … } class MyClass2 { public static void Main(string[] args) { … } } }
El lenguaje • “Hola Mundo” // "Hola Mundo!" en C# using System; class Hola { static void Main() { Console.WriteLine("Hola Mundo!"); } } • Servicios .NET
El lenguaje • Palabras reservadas
El lenguaje • Operadores
El lenguaje • Tipos
El lenguaje • Sobrecarga de operadores • operator public static bool operator == (Value a, Value b) {return a.Int == b.Int} • Referencia y valor • Copia por referencia object x = new object(); x.myValue = 10; object y = x; y.myValue = 20;
El lenguaje • Arreglos de una dimensión int[] i = new int[100]; // Arreglo de 100 enteros int[] i = new int[2]; //Llenado del arreglo i[0] = 1; i[1] = 2; int[] i = new int[] {1,2}; // Declaración y asignación int[] i = {1,2}; • Arreglos rectangulares // Declaración de una matriz de 2x3 int[,] squareArray = new int[2,3]; //Declaración y asignación de una matriz 2x3 int[,] squareArray = {{1, 2, 3}, {4, 5, 6}}; //Algunos métodos inherentes de la clase: System.Array squareArray.GetLowerBound(1); // Nivel inferior squareArray.GetUpperBound(1); // Nivel superior squareArray.GetLength(0); // Tamaño del arreglo
El lenguaje • Arreglos no rectangulares // Declaración del arreglo int[][] jag = new int[2][]; jag[0] = new int [4]; //Dimensión de la primer fila jag[1] = new int [6]; //Dimensión de la segunda fila // Una manera de declarar e inicializar int[][] jag = new int[][] {new int[] {1, 2, 3, 4}, new int[] {5, 6, 7, 8, 9, 10}};
El lenguaje • Tipo enumerado public enum DAYS { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } • Nombre o valor using System; public class EnumTest { public enum DAYS: byte { Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo } public static void Main() { Array dayArray = Enum.GetValues(typeof(EnumTest.DAYS)); foreach (DAYS day in dayArray) Console.WriteLine( "El número {0} de EnumTest.DAYS " + " es {1}", day, day.ToString()); } }
El lenguaje • Control de flujo: ciclos • while • do-while • for • for each • Itera sobre cada miembro que derive de la interfaz IEnumerable int[] a = new int[]{1,2,3}; foreach (int b in a) System.Console.WriteLine(b);
El lenguaje • Control de flujo: salto • break • continue • goto • No recomendado para realizar iteraciones • Útil en situaciones de decisión en transiciones (autómatas)
El lenguaje • Control de flujo: selección • if-else • switch • Evalúa solo un caso a la vez • Diferente en sintaxis respecto de C++ • Opciones de fin por cada caso: • break • goto etiqueta
El lenguaje • Estructuras struct Coordinate { public int x; public int y; public Coordinate(int x, int y) { this.x = x; this.y = y; } } • Inicialización en la creación Coordinate c = new Coordinate(10, 2);
El lenguaje • Espacios de nombres: Namespaces • Colecciones de clases ordenadas jerárquicamente • Bien diferenciadas • Operador ‘.’ para especificar que clase es la que se usa
El lenguaje • Clases • Declaración formada por 4 partes • Atributos • Información extra para el compilador • Modificadores • Tipo de acceso a los tipos definidos dentro de la clase • Clase base • Nombre de la clase y herencia • Cuerpo de la clase
El lenguaje • Clases: Modificadores • public • internal • protected • protected internal • private • new • abstract • sealed
El lenguaje • Métodos • Operaciones asociadas con la clase • Modificadores • static • virtual, override • extern • Parámetros • Referencia o valor • Ref/out
El lenguaje • Métodos: sobrecarga • Identificador de nula duplicidad • Nombre del método • Parámetros (tipo de ellos) public static int myMethod(int a,ref double b); public static void myMethod(int e,ref double f,out bool g,char h);
El lenguaje • Métodos: Polimorfismo • Sobre escritura o redefinición de un método heredado public virtual double getArea() // En Rectangulo { return length * width; } public override double getArea() // En Cuadrado:Rectangulo { return length * length; } Square sq = new Square(5); double area = sq.getArea(); Rectangle r = sq; double area = r.getArea(); • En ambos casos se usa el método Cuadrado::Rectangulo
El lenguaje • Métodos: Polimorfismo • Ocultamiento public double getArea() // En Rectangulo { return length * width; } public new double getArea() // En Cuadrado:Rectangulo { return length * length; } Square sq = new Square(5); double area = sq.getArea(); Rectangle r = sq; double area = r.getArea(); • El método no es sobre escrito realmente, sino solo escondido a la clase de donde heredo
Ejemplo: TDA Cola ////////////////////////////////////////////////////////////////////// // // Extraído de http://www.csharphelp.com/archives/archive14.html // ////////////////////////////////////////////////////////////////////// //Inicio de código namespace Queue { using System; /// /// implementación de una cola FIFO /// public class Queue { private uint count = 0; private Node front = null; private Node end = null; private Node temp = null; /// /// Verifica si la cola está vacia /// public bool empty { get { return(count==0); } }
Ejemplo: TDA Cola /// Regresa el número de elementos en la cola public uint Count { get { return count; } } /// Agrega un elemento a la cola public void append(object obj) { if(count==0){ front = end = new Node(obj, front); } else { end.Next = new Node(obj, end.Next); end = end.Next; } count++; } /// Despacha al primer elemento de la cola. Es importante notar que no se libera /// memoria pues esto es dejado a la máquina virtual (recolector de basura) public object serve() { temp = front; if(count == 0) throw new Exception("Cola vacia!"); front = front.Next; count--; return temp.Value; }
Ejemplo: TDA Cola /// /// Imprime el contenido de la cola /// public void printQueue() { temp = front; while(temp != null){ Console.WriteLine("{0}", temp.Value.ToString()); temp = temp.Next; } } } /// /// La clase nodo se encarga de apunar al séte elemento y /// guarder al objeto /// class Node { public Node Next; public object Value; public Node(object value, Node next) { Next = next; Value = value; } }
Ejemplo: TDA Cola /// /// Prueba la cola para 3 elementos /// class QueueTest { static void Main() { Queue Q = new Queue(); object obj; uint i,j; UInt16[] numbers = new UInt16[]{10,20,30}; for(i = 0;i < numbers.Length;i++) Q.append(numbers[i]); Q.printQueue(); Console.WriteLine("Elementos en la cola = {0}", Q.Count); j = Q.Count; for(i = 0;i < j;i++){ obj = Q.serve(); Console.WriteLine("Despacha cola = {0}", obj.ToString()); } Console.WriteLine("Elementos en la cola = {0}", Q.Count); } } } //Fin del código