Download - C# - Fundamentos del Lenguaje (I)
Ignacio García, Ismael Caballero
{Ignacio.GRodriguez, Ismael.Caballero}@uclm.es
Universidad de Castilla La Mancha
Sesión 1.3.
C# - Fundamentos del Lenguaje (I) Versión 1.0
Curso de Enseñanzas Propias “Lenguaje de Programación C#”
Curso 2008/09
2CEP "Lenguaje de Programación C#"- Curso 08/09
1. Características de C#2. Anatomía de un Programa3. Tipos de Datos y Variables 4. Métodos y paso de argumentos5. Algunos ejercicios para practica
Sesión 1.3.
Contenidos
3CEP "Lenguaje de Programación C#"- Curso 08/09
• Principales Características de C#� Implementa Seguridad de Tipos� Orientado a Objetos� Sintaxis parecida a C, C++ y Java
• Facilita la curva de aprendizaje• Simplifica el uso de C++• Proporciona características que no estaban en Java cuando salió C# (algunas
ya están en Java a partir de 1.5)– tipos de valores que aceptan valores NULL, enumeraciones, delegados, métodos
anónimos y acceso directo a memoria– http://www.javacamp.org/javavscsharp/
� C# facilita el desarrollo de componentes de software a través de:• Firmas de métodos encapsulados denominadas delegados, que permiten
notificaciones de eventos con seguridad de tipos.• Propiedades, que actúan como descriptores de acceso para variables miembro
privadas. • Atributos, que proporcionan metadatos declarativos sobre tipos en tiempo de
ejecución. • Comentarios en línea de documentación XML
� Interoperabilidad• Para comunicarse con Windows como hacía C++
1. Características de C#
Objetivos del Curso
4CEP "Lenguaje de Programación C#"- Curso 08/09
1. Características de C#2. Anatomía de un Programa3. Tipos de Datos y Variables 4. Métodos y paso de argumentos5. Estructuras de Control de Flujo6. Algunos ejercicios para practicar
Sesión 1.3.
Contenidos
5CEP "Lenguaje de Programación C#"- Curso 08/09
2. Anatomía de un programa
Elementos
Comentarios
Comentarios
Mecanismos para usar “paquetes” (espacios
de nombres)
Mecanismos para crear espacios de nombres
Mecanismos para crear
clases
Definición de la función
principal (“M ”)
Para escribir en Línea de Comandos
Definición de Variables
Mecanismos para especificar opciones de
ejecución
Para leer de Línea de
Comandos
Mecanismos para pasar argumentos en línea de
comandos
6CEP "Lenguaje de Programación C#"- Curso 08/09
1. Características de C#2. Anatomía de un Programa3. Tipos de Datos y Variables 4. Métodos y paso de argumentos5. Algunos ejercicios para practicar
Sesión 1.3.
Contenidos
7CEP "Lenguaje de Programación C#"- Curso 08/09
• Tipos de Datos en C#� Integrados (CTS)
• Numéricos (int, float, …), Texto (char, string), Fecha(Date), Boolean
� Definidos por el Usuario• enum, struct, class
3. Tipos de Datos y Variables
Tipos de Datos: Sistemas de Tipos
public class PersonaPersonaPersonaPersona {private string nombre;private string apellido1;public Persona (string sNombre, string sApellido1){…}
}public struct PersonaPersonaPersonaPersona {public string Nombre;public String Apellido1;…
}
TiposTiposTiposTipos PorPorPorPor ValorValorValorValor: Simple, Enum y Struct
8CEP "Lenguaje de Programación C#"- Curso 08/09
•Tipos de Datos Integrados
FechasDateTime
Caracteres unicodechar
Reales de 96 bitsdecimal
Reales de 64 bitsdouble
Reales de 32 bitsfloat
Enteros de 32 bitsint
Enteros sin signo de 16 bitsushort
Enteros de 16 bitsshort
Naturales de 8 bitsByte
Enteros de 8 bitssbyte
BooleanosBool
DescripciDescripciDescripciDescripcióóóónnnnTipoTipoTipoTipo
3. Tipos de Datos y Variables
Tipos de Datos Integrados
9CEP "Lenguaje de Programación C#"- Curso 08/09
• Definición de Variables Locales
3. Tipos de Datos y Variables
Definición de Variables
int objetoCuenta;
int objetoCuenta, empleadoNúmero;
int empleadoNumero = 23;
string sCadena = “ismael”
int objetoCuenta;
int objetoCuenta, empleadoNúmero;
int empleadoNumero = 23;
string sCadena = “ismael”
TipoDatoTipoDatoTipoDatoTipoDato NombreVariableNombreVariableNombreVariableNombreVariable;;;;TipoDatoTipoDatoTipoDatoTipoDato NombreVariableNombreVariableNombreVariableNombreVariable;;;;
10CEP "Lenguaje de Programación C#"- Curso 08/09
Palabras claveabstract event new struct as explicit null switch base extern object this bool false operator throw break finally out true byte fixed override try case float params typeof catch for private uint char foreach protected ulong checked goto public unchecked class if readonly unsafe const implicit ref ushort continue in return using decimal int sbytevirtual default interface sealed volatile delegate internal short void do is sizeof while double lock stackalloc else long static enum namespace string
Palabras clave contextualesget partial set value where yield
3. Tipos de Datos y Variables
Definición de Variables (II)
11CEP "Lenguaje de Programación C#"- Curso 08/09
• Operaciones entre variables del mismo tipo� Si son de distinto tipo habría cambios de tipo
• Precedencia y asociatividad de operadores � Todos los operadores binarios, salvo los de asignación, son
asociativos por la izquierda� Los operadores de asignación y el operador condicional son
asociativos por la derecha
3. Tipos de Datos y Variables
Operadores
OperadoresOperadoresOperadoresOperadores comunescomunescomunescomunesOperadoresOperadoresOperadoresOperadores comunescomunescomunescomunes
Operadores de igualdad
Operadores relacionales
Operadores condicionales
Operador de incremento
Operador de decremento
Operadores aritméticos
Operadores de asignación
EjemploEjemploEjemploEjemplo
== !=
< > <= >= is
&& || ?:
++
- -
+ - * / %
= *= /= %= += -= <<= >>= &= ^= |=
12CEP "Lenguaje de Programación C#"- Curso 08/09
•Conversiones de tipo implícitas vs explícitas
3. Tipos de Datos y Variables
Conversiones de Tipo
using System;class Test{
static void Main( ) {
int intValor = 123;long longValor = intValor;Console.WriteLine("(long) {0} = {1}", intValor,
�longValor);}
}
using System;class Test{
static void Main( ) {
int intValor = 123;long longValor = intValor;Console.WriteLine("(long) {0} = {1}", intValor,
�longValor);}
}
using System;class Test{
static void Main( ) {
long longValor = Int64.MaxValor;int intValor = (int) longValor;Console.WriteLine("(int) {0} = {1}", longValor,
�intValor);}
}
using System;class Test{
static void Main( ) {
long longValor = Int64.MaxValor;int intValor = (int) longValor;Console.WriteLine("(int) {0} = {1}", longValor,
�intValor);}
}
13CEP "Lenguaje de Programación C#"- Curso 08/09
• Entornos Comprobados (checked vs unchecked )� checked Especifica un contexto comprobado.
• El desbordamiento aritmético produce una excepción
� unchecked Especifica un contexto no comprobado.– Se hace caso omiso del desbordamiento y el resultado se trunca
� Dónde puede producirse?• Operadores ++ — - (unario) + - * /
• Conversiones numéricas explícitas entre tipos integrales
static int CheckedMethod(short x, short y){int z = 0; try { z = checked((short)(xchecked((short)(xchecked((short)(xchecked((short)(x + y));+ y));+ y));+ y));
}catch (System.OverflowExceptionSystem.OverflowExceptionSystem.OverflowExceptionSystem.OverflowException e){
Console.WriteLine(e.ToString()); } return z; }
static int CheckedMethod(short x, short y){int z = 0; try { z = checked((short)(xchecked((short)(xchecked((short)(xchecked((short)(x + y));+ y));+ y));+ y));
}catch (System.OverflowExceptionSystem.OverflowExceptionSystem.OverflowExceptionSystem.OverflowException e){
Console.WriteLine(e.ToString()); } return z; }
3. Tipos de Datos y Variables
Conversiones de Tipo (II)
14CEP "Lenguaje de Programación C#"- Curso 08/09
•Introducción� Las matrices son estructuras de datos
homogéneas a las que se puede acceder medianteun índice entero
3. Tipos de Datos y Variables
Matrices
Índice entero 0Índice entero n-1
Especifica el rango de la tabla
Especifica el nombre de la variable de tabla
Especifica el tipo de elementos de la tabla (siempre el mismo para todos los elementos: puede ser CTS o definido por usr)
tipo[ ] nombre;tipo[ ] nombre;
Rango o Dimensión (n)
[a,b]: 2 Dimensiones[a]: 1 Dimensión
[a,b,..,m]: m Dimensiones
15CEP "Lenguaje de Programación C#"- Curso 08/09
• Consideraciones� Una tabla no puede cambiar su tamaño cuando está llena
• Una clase de colección (se verá en 1.4), como ArrayList, puede cambiar su tamaño
� Una tabla contiene elementos de un solo tipo• Una colección está diseñada para contener elementos de
distintos tipos
• Los elementos de una tabla no pueden ser de sólo lectura
� Una colección puede tener acceso de sólo lectura• En general, las tablas son más rápidas pero menos flexibles
• Las colecciones son algo más lentas pero más flexibles
� Tablas en Métodos• Los métodos pueden devolver tablas
• Un parámetro tabla siempre se pasa por referencia
3. Tipos de Datos y Variables
Matrices (II)
16CEP "Lenguaje de Programación C#"- Curso 08/09
• Declaración y Uso
long[ ] fila = long[ ] fila = long[ ] fila = long[ ] fila = newnewnewnew long[4];long[4];long[4];long[4];long[ ] fila = long[ ] fila = long[ ] fila = long[ ] fila = newnewnewnew long[4];long[4];long[4];long[4];
int[,] cuad = newnewnewnew int[2,3];int[,] cuad = newnewnewnew int[2,3];
3. Tipos de Datos y Variables
Matrices (III)
for(int i=0;i<fila.GetLength(0);i++){fila[i]++;
}
for(int i=0;i<fila.GetLength(0);i++){fila[i]++;
}
try{for(int nFila=0; i<cuad.GetLength(0); i++){
for(int nCol=0; i<cuad.GetLength(1); i++){Console.WriteLine(“Introduce elto {0},{1}”, nFila, nCol);cuad[nFila,nColcuad[nFila,nColcuad[nFila,nColcuad[nFila,nCol]=]=]=]=Console.ReadLine();
}catch (IndexOutOfRangeExceptionIndexOutOfRangeExceptionIndexOutOfRangeExceptionIndexOutOfRangeException IE){
Console.WriteLine (“Excepcion {0}”, IE.ToString());}
try{for(int nFila=0; i<cuad.GetLength(0); i++){
for(int nCol=0; i<cuad.GetLength(1); i++){Console.WriteLine(“Introduce elto {0},{1}”, nFila, nCol);cuad[nFila,nColcuad[nFila,nColcuad[nFila,nColcuad[nFila,nCol]=]=]=]=Console.ReadLine();
}catch (IndexOutOfRangeExceptionIndexOutOfRangeExceptionIndexOutOfRangeExceptionIndexOutOfRangeException IE){
Console.WriteLine (“Excepcion {0}”, IE.ToString());}
int[,] cuadr = {{5, 4, 3},{2, 1, 4}};int[,] cuadr = {{5, 4, 3},{2, 1, 4}};
•Para usar la tabla hay que definir la variable y crearla con new. •Todos los elementos se inicializan a cero
long[ ] fila2 = long[ ] fila2 = long[ ] fila2 = long[ ] fila2 = newnewnewnew long[3]{ 1,2,3};long[3]{ 1,2,3};long[3]{ 1,2,3};long[3]{ 1,2,3};long[ ] fila2 = long[ ] fila2 = long[ ] fila2 = long[ ] fila2 = newnewnewnew long[3]{ 1,2,3};long[3]{ 1,2,3};long[3]{ 1,2,3};long[3]{ 1,2,3};
void Metodo(string[ ] args) {foreach (string arg in args) Console.WriteLine(arg);
}
void Metodo(string[ ] args) {foreach (string arg in args) Console.WriteLine(arg);
}
17CEP "Lenguaje de Programación C#"- Curso 08/09
• Atributos
• Métodos Matrices� Sort:
• Ordena los elementos en una tabla de rango 1
� Clear: • Asigna el valor cero o null a un rango de elementos
� Clone: • Crea una copia de la tabla
� GetLength: • Devuelve la longitud de una dimensión dada
� IndexOf: • Devuelve el índice de la primera vez que aparece un valor
3. Tipos de Datos y Variables
Matrices (IV)
cuad5 4 3
2 1 4
cuad.Rank==2cuad.Rank==2
cuad.Length==6cuad.Length==6
int[,] cuad = new int[2,3];int[,] cuad = new int[2,3];
18CEP "Lenguaje de Programación C#"- Curso 08/09
• Definición, Creación y uso de tipos enumerados
3. Tipos de Datos y Variables
Tipos enumerados
enum Cargo [:int]{ Director[=1], Analista, Programador }
enum Cargo [:int]{ Director[=1], Analista, Programador }
Cargo cargoActual = Cargo.Analista; Cargo cargoActual = Cargo.Analista;
Console.WriteLine(“{0}”, cargoActual); // Mostraría “Analista”
Console.WriteLine(“{0}”, cargoActual); // Mostraría “Analista”
http://www.devjoker.com/asp/ver_contenidos.aspx?co_contenido=164
Investiga la Clase System.EnumInvestiga la Clase System.Enum
19CEP "Lenguaje de Programación C#"- Curso 08/09
• Definición, Creación y uso de tipos estructuras� Agrupación de Varias Variables pertenecientes a la misma
entidad, sin necesidad de gestionar el comportamiento
3. Tipos de Datos y Variables
Tipos estructuras
Empleado UnEmpleado; UnEmpleado.NombrePila = "Juan";UnEmpleado.edad = 23;UnEmpleado.Cargo = Cargo.Analista;
Empleado UnEmpleado; UnEmpleado.NombrePila = "Juan";UnEmpleado.edad = 23;UnEmpleado.Cargo = Cargo.Analista;
public struct Empleado{
public string NombrePila;public int edad;public Cargo cargoActual;
}
public struct Empleado{
public string NombrePila;public int edad;public Cargo cargoActual;
}
20CEP "Lenguaje de Programación C#"- Curso 08/09
1. Características de C#2. Anatomía de un Programa3. Tipos de Datos y Variables 4. Tipos de instrucciones5. Algunos ejercicios para practicar
Sesión 1.3.
Contenidos
21CEP "Lenguaje de Programación C#"- Curso 08/09
•Bloques de Instrucciones
4. Tipos de Instrucciones
Bloques de Instrucciones
Se usan llaves paradelimitar bloques
{
// código
}
{
// código
} {
int i;
...
{
int i;
...
}
}
{
int i;
...
{
int i;
...
}
}
{
int i;
...
}
...
{
int i;
...
}
{
int i;
...
}
...
{
int i;
...
}
Bloques Anidados:Un bloque y subloque padre o pueden tener unavariable con el mismo nombre
Bloques hermanospueden tenervariables con el mismo nombre
22CEP "Lenguaje de Programación C#"- Curso 08/09
•Tipos de Instrucciones
4. Tipos de Instrucciones
Tipos de Instrucciones para control del flujo
InstruccionesInstruccionesInstruccionesInstrucciones CondicionalesCondicionalesCondicionalesCondicionalesLas Las Las Las instruccionesinstruccionesinstruccionesinstrucciones if y switchif y switchif y switchif y switch
InstruccionesInstruccionesInstruccionesInstrucciones CondicionalesCondicionalesCondicionalesCondicionalesLas Las Las Las instruccionesinstruccionesinstruccionesinstrucciones if y switchif y switchif y switchif y switch
InstruccionesInstruccionesInstruccionesInstrucciones de de de de iteraciiteraciiteraciiteracióóóónnnnLas Las Las Las instruccionesinstruccionesinstruccionesinstrucciones while, do, for, y while, do, for, y while, do, for, y while, do, for, y foreachforeachforeachforeach
InstruccionesInstruccionesInstruccionesInstrucciones de de de de iteraciiteraciiteraciiteracióóóónnnnLas Las Las Las instruccionesinstruccionesinstruccionesinstrucciones while, do, for, y while, do, for, y while, do, for, y while, do, for, y foreachforeachforeachforeach
InstruccionesInstruccionesInstruccionesInstrucciones de de de de saltosaltosaltosaltoLas Las Las Las instruccionesinstruccionesinstruccionesinstrucciones gotogotogotogoto, break, y continue , break, y continue , break, y continue , break, y continue
InstruccionesInstruccionesInstruccionesInstrucciones de de de de saltosaltosaltosaltoLas Las Las Las instruccionesinstruccionesinstruccionesinstrucciones gotogotogotogoto, break, y continue , break, y continue , break, y continue , break, y continue
Ojo con los breaks en los
case
Usada en lascolecciones
23CEP "Lenguaje de Programación C#"- Curso 08/09
•Métodos “instrucciones personalizadas”
4. Métodos y Paso de Argumentos
Definición y Uso de Métodos
Accesibilidad Modificador TipoDatoDevuelto NombreNombreNombreNombre((((listaParametroslistaParametroslistaParametroslistaParametros) ) ) ) throws de excepciones {{{{
////////SecuenciaSecuenciaSecuenciaSecuencia de de de de InstruccionesInstruccionesInstruccionesInstruccionesreturn return return return TipoDatoDevueltoTipoDatoDevueltoTipoDatoDevueltoTipoDatoDevuelto;;;;
}}}}
Accesibilidad Modificador TipoDatoDevuelto NombreNombreNombreNombre((((listaParametroslistaParametroslistaParametroslistaParametros) ) ) ) throws de excepciones {{{{
////////SecuenciaSecuenciaSecuenciaSecuencia de de de de InstruccionesInstruccionesInstruccionesInstruccionesreturn return return return TipoDatoDevueltoTipoDatoDevueltoTipoDatoDevueltoTipoDatoDevuelto;;;;
}}}}
static string EjemploMethod( ){
int numBeans;//...
Console.WriteLine("Hola"); if (numBeans < 10)
return “Hola”Console.WriteLine(“Adiós");
return “Adiós”;}
static string EjemploMethod( ){
int numBeans;//...
Console.WriteLine("Hola"); if (numBeans < 10)
return “Hola”Console.WriteLine(“Adiós");
return “Adiós”;}
24CEP "Lenguaje de Programación C#"- Curso 08/09
4. Métodos y Paso de Argumentos
• Definición y uso
Parámetros en los métodos
static void UnMetodo (int n, string y){ ... }
static void OtroMetodo () {UnMetodo(2, "Hola, mundo");
}
static void UnMetodo (int n, string y){ ... }
static void OtroMetodo () {UnMetodo(2, "Hola, mundo");
}
Llamada desdeotro método
25CEP "Lenguaje de Programación C#"- Curso 08/09
�Como ref , pero no se pasan valores al método
�Se usa la palabra clave out en la declaración y las llamadas al método
Salida
�Se usa la palabra clave ref en la declaración y las llamadas al método
�Los tipos y valores de variables deben coincidir
�Los cambios hechos en el método afectan al llamador
�Hay que asignar un valor al parámetro antes de la llamada al método
Entrada/Salida(por referencia)
�Se copia el valor del parámetro�Se puede cambiar la variable dentro del método
�No afecta al valor fuera del método�El parámetro debe ser de un tipo igual o compatible
Entrada(por valor)
4. Métodos y Paso de Argumentos
Tipos de Paso de Parámetros en los métodos
•Mecanismos de Paso de Parámetros
static void SumaUno(int x) {
x++; // Incrementar x}
static void SumaUno(int x) {
x++; // Incrementar x}
static void SumaUno(ref int x) {
x++; // Incrementar x}
static void SumaUno(ref int x) {
x++; // Incrementar x}
static void OutDemo(out int p) { // ... }int n;OutDemo(out n);
static void OutDemo(out int p) { // ... }int n;OutDemo(out n);
26CEP "Lenguaje de Programación C#"- Curso 08/09
static long AddList(params long[ ] v)
{
long total, i;
for (i = 0, total = 0; i < v.Length; i++)
total += v[i];
return total;
}
static void Main( )
{
long x = AddList(63,21,84);
}
static long AddList(params long[ ] v)
{
long total, i;
for (i = 0, total = 0; i < v.Length; i++)
total += v[i];
return total;
}
static void Main( )
{
long x = AddList(63,21,84);
}
4. Métodos y Paso de Argumentos
Tipos de Paso de Parámetros en los métodos (II)
•Lista de Parámetros de Longitud Variable
27CEP "Lenguaje de Programación C#"- Curso 08/09
• Resumen Uso Tipos de Parámetros� Mecanismos
• El paso por valor es el más habitual
• El valor de retorno del método es útil para un solo valor
• ref y/o out son útiles para más de un valor de retorno• ref sólo se usa si los datos se pasan en ambos sentidos
� Eficiencia • El paso por valor suele ser el más eficaz
4. Métodos y Paso de Argumentos
Tipos de Paso de Parámetros en los métodos (III)
28CEP "Lenguaje de Programación C#"- Curso 08/09
Métodos que comparten una signatura� Se distinguen examinando la lista de parámetros� No hay que abusar, ya que:
• Son difíciles de depurar
• Son difíciles de mantener
class OverloadingExample{
static static static static intintintint SumaSumaSumaSuma(int(int(int(int a, a, a, a, intintintint b)b)b)b){
return a + b;}static static static static intintintint SumaSumaSumaSuma(int(int(int(int a, a, a, a, intintintint b, b, b, b, intintintint c) c) c) c) {
return Suma(a,Suma(b,c));}static void Main( ) {
Console.WriteLine(Suma(1,2) + Suma(1,2,3));}
}
class OverloadingExample{
static static static static intintintint SumaSumaSumaSuma(int(int(int(int a, a, a, a, intintintint b)b)b)b){
return a + b;}static static static static intintintint SumaSumaSumaSuma(int(int(int(int a, a, a, a, intintintint b, b, b, b, intintintint c) c) c) c) {
return Suma(a,Suma(b,c));}static void Main( ) {
Console.WriteLine(Suma(1,2) + Suma(1,2,3));}
}
4. Métodos y Paso de Argumentos
Sobrecarga de Métodos
29CEP "Lenguaje de Programación C#"- Curso 08/09
1. Características de C#2. Anatomía de un Programa3. Tipos de Datos y Variables 4. Métodos y paso de argumentos5. Algunos ejercicios para practicar
Sesión 1.3.
Contenidos
30CEP "Lenguaje de Programación C#"- Curso 08/09
• Ejercicios1. Haz un programa que lea de teclado dos números e
imprima el mayor.2. Escribe un método que genere un menú, donde las
opciones sean los elementos de un tipo enumerado.3. Escribe un método que genere una variable de tipo
enumerado con el resultado de la opción del menú.4. Haz un programa que implemente una sumadora n-aria
donde los sumandos se pasarán como argumentos.5. Haz un método que admita un número indeterminado de
cadenas y muestre la de mayor tamaño.6. Haz un método que admita una matriz de estructuras
con datos de alumnos (nombre, apellido1 y nota en letras) y muestre el número de apariciones de cada nota
5. Ejercicios para practicar
Ejercicios para implementar lo visto hasta ahora.