Upload
desi-vida
View
214
Download
0
Embed Size (px)
Citation preview
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
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
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)
4
Independencia de plataforma.NETLiberación de la especificaciónMONO: Emulación en ambientes Linux
¿Por qué y para qué?
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é?
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é?
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é?
8
Visión futura de Microsoft: ‘Cómputo distribuido’Razones
Código reutilizable“Funciona donde sea”Proveedores de servicios
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
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
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
12
Ausencia de encabezadosAdministración automática de memoriaApuntadores: unsafeLímites en arreglosint != boolswitch
C# vs. C++
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
14
“Hola Mundo”// "Hola Mundo!" en C#
using System;class Hola{ static void Main() { Console.WriteLine("Hola Mundo!"); }}
Servicios .NET
El lenguaje
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
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 -> [] &
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
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;
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
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
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
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
23
Control de flujo: saltobreakcontinuegoto
No recomendado para realizar iteracionesÚtil en situaciones de decisión en transiciones (autómatas)
El lenguaje
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
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
26
Espacios de nombres: NamespacesColecciones de clases ordenadas jerárquicamenteBien diferenciadasOperador ‘.’ para especificar que clase es la que se usa
El lenguaje
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
28
Clases: Modificadorespublicinternalprotectedprotected internalprivatenewabstractsealed
El lenguaje
29
MétodosOperaciones asociadas con la claseModificadores
staticvirtual, overrideextern
ParámetrosReferencia o valor
• Ref/out
El lenguaje
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
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
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
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
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
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
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
37