Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NET
Lenguajes de Programación
Dra. Ana Lilia Laureano Cruces
3
¿Por qué y para qué?
Independencia de plataforma
.NET
Liberación de la especificación
MONO: Emulación en ambientes
Linux
4
¿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
5
¿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
6
¿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
7
Plataforma .NET
Visión futura de Microsoft:
‘Cómputo distribuido’
Razones
Código reutilizable
“Funciona donde sea”
Proveedores de servicios
8
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++
10
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
11
C# vs. C++
Ausencia de encabezados
Administración automática de
memoria
Apuntadores: unsafe
Límites en arreglos
int != bool
switch
12
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)
{…}
}
}
13
El lenguaje
“Hola Mundo”
// "Hola Mundo!" en C#
using System;
class Hola
{
static void Main()
{
Console.WriteLine("Hola Mundo!");
}
}
Servicios .NET
14
El lenguaje
Palabras reservadas
abstract class event if new readonly struct unsafe
15
El lenguaje
Operadores
Categoría Operadores
Aritméticos + - * / %
Concatenación +
Incremento/Decremento ++ --
Acceso a miembros .
Índices []
Cast ()
Condicional ?:
Concatenación y remoción + -
Referencia y valor
Copia por referencia
object x = new object();
x.myValue = 10;
object y = x;
y.myValue = 20;
18
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
19
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
20
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());
}
}
21
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);
22
El lenguaje
Control de flujo: salto
break
continue
goto
No recomendado para realizar iteraciones
Útil en situaciones de decisión en
transiciones (autómatas)
23
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
24
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);
25
El lenguaje
Espacios de nombres: Namespaces
Colecciones de clases ordenadas
jerárquicamente
Bien diferenciadas
Operador ‘.’ para especificar que clase
es la que se usa
26
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
27
El lenguaje
Clases: Modificadores
public
internal
protected
protected internal
private
new
abstract
sealed
28
El lenguaje
Métodos
Operaciones asociadas con la clase
Modificadores
static
virtual, override
extern
Parámetros
Referencia o valor
• Ref/out
29
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);
30
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
31
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();
32
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);
}
}
33
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;
}
34
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;
35
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
36
37