C# y la plataforma.NET Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas Universidad...
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/1.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/2.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/3.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/4.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/5.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/6.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/7.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/8.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/9.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/10.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/11.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/12.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/13.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/14.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/15.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/16.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/17.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/18.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/19.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/20.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/21.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/22.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/23.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/24.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/25.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/26.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/27.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/28.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/29.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/30.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/31.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/32.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/33.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/34.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/35.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/36.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022062809/5665b4421a28abb57c907c7e/html5/thumbnails/37.jpg)
37