C# y la plataforma.NET Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad...

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

Transcript of C# y la plataforma.NET Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad...

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

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

12

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

C# vs. C++

Page 13: 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.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

28

Clases: Modificadorespublicinternalprotectedprotected internalprivatenewabstractsealed

El lenguaje

Page 29: 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.

29

MétodosOperaciones asociadas con la claseModificadores

staticvirtual, overrideextern

ParámetrosReferencia o valor

• Ref/out

El lenguaje

Page 30: 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.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

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 Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad Nacional Autónoma de México 21 de octubre de 2004 Javier.

37