C# y la plataforma .NET

37
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 Dra. Ana Lilia Laureano Cruces Lenguajes de Programación

description

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 - PowerPoint PPT Presentation

Transcript of C# y la plataforma .NET

Page 1: C#  y la plataforma  .NET

C# y la plataforma .NET

Instituto de Investigaciones en Matemáticas Aplicadas y SistemasUniversidad Nacional Autónoma de México

21 de octubre de 2004

Javier Jiménez Juárez

Dra. Ana Lilia Laureano CrucesLenguajes de Programación

Page 2: C#  y la plataforma  .NET

2

¿Qué es C#?

Lenguaje de programación de Microsoft¿Evolución? de C++Totalmente orientado a objetos

Seguridad en tiposPolimorfismoSobrecarga de operadores y métodosHerencia

Page 3: C#  y la plataforma  .NET

3

Lenguaje sencillo pero robustoSencillez de Visual BasicPoder de C++

¿Por qué y para qué?

Velocidad de desarrollo comparable con IDEs de Borland (Delphi, Builder)

Page 4: C#  y la plataforma  .NET

4

Independencia de plataforma.NETLiberación de la especificaciónMONO: Emulación en ambientes Linux

¿Por qué y para qué?

Page 5: C#  y la plataforma  .NET

5

BondadesSeguridad de tiposOO

Objetos <- Tipos básicos de datosint Counter = 14;

Console.WriteLine( Counter.ToString() );

Administración automática de memoria

¿Por qué y para qué?

Page 6: C#  y la plataforma  .NET

6

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é?

Page 7: C#  y la plataforma  .NET

7

Bondades...Apuntadores: ¿Seguridad o no seguridad?¡Dinero! $$: VB .NET vs C#

Conclusión: Sistemas Windows y arquitecturas soportadas bajo .NET

¿Por qué y para qué?

Page 8: C#  y la plataforma  .NET

8

Visión futura de Microsoft: ‘Cómputo distribuido’Razones

Código reutilizable“Funciona donde sea”Proveedores de servicios

Plataforma .NET

Page 9: C#  y la plataforma  .NET

9

ComponentesDefinición de clasesCLR (Common Language Runtime) o máquina virtual de MSIL*

LenguajesVisual Basic .NETC#, puramente .NETC++ administrado o Managed C++

Plataforma .NET

*Microsoft Intermediate Language

Page 10: C#  y la plataforma  .NET

10

Compilación a lenguaje intermedioJAVA bytecodeMicrosoft Intermediate Language (MSIL)

Más tipos primitivos en C#Tipos enumerados: enumerationEstructuras: struct

No existe herencia múltipleHerencia a través de interfaces

C# vs. JAVA

Page 11: C#  y la plataforma  .NET

11

Arreglos n-dimensionalesJAVA: Arreglos que son miembros de otros arreglosC#: Verdaderos arreglos

Polimorfismo implementado en manera mas complicada que en JAVA

C# vs. JAVA

Page 12: C#  y la plataforma  .NET

12

Ausencia de encabezadosAdministración automática de memoriaApuntadores: unsafeLímites en arreglosint != boolswitch

C# vs. C++

Page 13: C#  y la plataforma  .NET

13

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

Page 14: C#  y la plataforma  .NET

14

“Hola Mundo”// "Hola Mundo!" en C#

using System;class Hola{ static void Main() { Console.WriteLine("Hola Mundo!"); }}

Servicios .NET

El lenguaje

Page 15: C#  y la plataforma  .NET

15

Palabras reservadas

El lenguaje

abstract class event if new readonly struct unsafe

as const explicit implicit null ref switch ushort

base continue extern in object return this using

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

Page 16: C#  y la plataforma  .NET

16

Operadores

El lenguaje

Categoría Operadores

Aritméticos +   -      /   %

Lógicos &   |   ^   !   ~   &&   ||   true   false

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    ->   []   &

Page 17: C#  y la plataforma  .NET

17

Tipos

El lenguaje

Tipo de C# Tipo en la plataforma .NET ¿Signo? Bytes empleados

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 4Aproximadamente ±1.5 x 10-45 a ±3.4 x 1038 con 7 dígitos significativos

double System.Double Si 8Aproximadamente ±5.0 x 10-324 a ±1.7 x 10308 con 15 o 16 dígitos significativos

decimal System.Decimal Si 12Aproximadamente ±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 true o false

Page 18: C#  y la plataforma  .NET

18

El lenguaje

Sobrecarga de operadoresoperatorpublic static bool operator == (Value a, Value b){return a.Int == b.Int}

Referencia y valorCopia por referenciaobject x = new object();x.myValue = 10;object y = x;y.myValue = 20;

Page 19: C#  y la plataforma  .NET

19

Arreglos de una dimensiónint[] i = new int[100]; // Arreglo de 100 enterosint[] i = new int[2]; //Llenado del arregloi[0] = 1;i[1] = 2;int[] i = new int[] {1,2}; // Declaración y asignaciónint[] i = {1,2};

Arreglos rectangulares// Declaración de una matriz de 2x3int[,] squareArray = new int[2,3];//Declaración y asignación de una matriz 2x3int[,] squareArray = {{1, 2, 3}, {4, 5, 6}};//Algunos métodos inherentes de la clase: System.ArraysquareArray.GetLowerBound(1); // Nivel inferiorsquareArray.GetUpperBound(1); // Nivel superiorsquareArray.GetLength(0);// Tamaño del arreglo

El lenguaje

Page 20: C#  y la plataforma  .NET

20

Arreglos no rectangulares// Declaración del arregloint[][] jag = new int[2][];jag[0] = new int [4]; //Dimensión de la primer filajag[1] = new int [6]; //Dimensión de la segunda fila

// Una manera de declarar e inicializarint[][] jag = new int[][] {new int[] {1, 2, 3, 4},new int[] {5, 6, 7, 8, 9, 10}};

El lenguaje

Page 21: C#  y la plataforma  .NET

21

Tipo enumeradopublic enum DAYS{

Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}

Nombre o valorusing 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

Page 22: C#  y la plataforma  .NET

22

Control de flujo: cicloswhiledo-whileforfor 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

Page 23: C#  y la plataforma  .NET

23

Control de flujo: saltobreakcontinuegoto

No recomendado para realizar iteracionesÚtil en situaciones de decisión en transiciones (autómatas)

El lenguaje

Page 24: C#  y la plataforma  .NET

24

Control de flujo: selecciónif-elseswitch

Evalúa solo un caso a la vezDiferente en sintaxis respecto de C++Opciones de fin por cada caso:

• break• goto etiqueta

El lenguaje

Page 25: C#  y la plataforma  .NET

25

Estructurasstruct Coordinate{

public int x;public int y;public Coordinate(int x, int y){

this.x = x;this.y = y;

} }

Inicialización en la creaciónCoordinate c = new Coordinate(10, 2);

El lenguaje

Page 26: C#  y la plataforma  .NET

26

Espacios de nombres: NamespacesColecciones de clases ordenadas jerárquicamenteBien diferenciadasOperador ‘.’ para especificar que clase es la que se usa

El lenguaje

Page 27: C#  y la plataforma  .NET

27

ClasesDeclaració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

Page 28: C#  y la plataforma  .NET

28

Clases: Modificadorespublicinternalprotectedprotected internalprivatenewabstractsealed

El lenguaje

Page 29: C#  y la plataforma  .NET

29

MétodosOperaciones asociadas con la claseModificadores

staticvirtual, overrideextern

ParámetrosReferencia o valor

• Ref/out

El lenguaje

Page 30: C#  y la plataforma  .NET

30

Métodos: sobrecargaIdentificador de nula duplicidad

Nombre del métodoPará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

Page 31: C#  y la plataforma  .NET

31

Métodos: PolimorfismoSobre 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

Page 32: C#  y la plataforma  .NET

32

Métodos: PolimorfismoOcultamiento

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

El lenguaje

Page 33: C#  y la plataforma  .NET

33

////////////////////////////////////////////////////////////////////////// Extraído de http://www.csharphelp.com/archives/archive14.html//////////////////////////////////////////////////////////////////////////Inicio de códigonamespace 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

Page 34: C#  y la plataforma  .NET

34

/// Regresa el número de elementos en la colapublic 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

Page 35: C#  y la plataforma  .NET

35

/// /// 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

Page 36: C#  y la plataforma  .NET

36

/// /// 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

Ejemplo: TDA Cola

Page 37: C#  y la plataforma  .NET

37