1 / 37

C# y la plataforma .NET

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

Download Presentation

C# y la plataforma .NET

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. ¿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

  3. ¿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)

  4. ¿Por qué y para qué? • Independencia de plataforma • .NET • Liberación de la especificación • MONO: Emulación en ambientes Linux

  5. ¿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

  6. ¿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

  7. ¿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

  8. Plataforma .NET • Visión futura de Microsoft: ‘Cómputo distribuido’ • Razones • Código reutilizable • “Funciona donde sea” • Proveedores de servicios

  9. 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

  10. 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

  11. 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

  12. C#vs.C++ • Ausencia de encabezados • Administración automática de memoria • Apuntadores: unsafe • Límites en arreglos • int != bool • switch

  13. 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) { … } } }

  14. El lenguaje • “Hola Mundo” // "Hola Mundo!" en C# using System; class Hola { static void Main() { Console.WriteLine("Hola Mundo!"); } } • Servicios .NET

  15. El lenguaje • Palabras reservadas

  16. El lenguaje • Operadores

  17. El lenguaje • Tipos

  18. 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;

  19. 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

  20. 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}};

  21. 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()); } }

  22. 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);

  23. El lenguaje • Control de flujo: salto • break • continue • goto • No recomendado para realizar iteraciones • Útil en situaciones de decisión en transiciones (autómatas)

  24. 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

  25. 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);

  26. El lenguaje • Espacios de nombres: Namespaces • Colecciones de clases ordenadas jerárquicamente • Bien diferenciadas • Operador ‘.’ para especificar que clase es la que se usa

  27. 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

  28. El lenguaje • Clases: Modificadores • public • internal • protected • protected internal • private • new • abstract • sealed

  29. El lenguaje • Métodos • Operaciones asociadas con la clase • Modificadores • static • virtual, override • extern • Parámetros • Referencia o valor • Ref/out

  30. 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);

  31. 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

  32. 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

  33. 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); } }

  34. 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; }

  35. 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; } }

  36. 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

More Related