Sei sulla pagina 1di 22

Departamento de Lenguajes y Sistemas Informáticos

1. ¿Para qué C#?


2. Mi primer programa con C#
3. Aspectos Básicos del Lenguaje

Diseño y Programación Avanzada de


Aplicaciones

Escuela Politécnica Superior


Universidad de Alicante

1. Conocer los orígenes de C#


2. Crear una aplicación de consola
3. Conocer la estructura básica de un programa C#
¿Para qué C#?
4. Conocer las bases de la E/S de consola
1
 Año 2000. El mercado utiliza C++, Java, Visual  Ventajas
Basic,  Es un lenguaje fácil de comprender.
◦ ¿Tiene sentido un lenguaje de programación nuevo?  Facilita muchas tareas de programación (oculta
 JAVA empieza a extenderse frente a C++ detalles del API de Windows).
 Microsoft fundamentalmente tenía como  Desventajas
propuestas de lenguajes de programación  Nunca ha sido 100% orientado a objetos
◦ Visual Basic  Tiene sintaxis heredada de versiones anteriores
◦ Microsoft C++ de BASIC (Ojo BASIC inicialmente fue un
◦ J++ lenguaje de iniciación a la programación, no un
lenguaje para desarrollar grandes aplicaciones).

 Ventajas  Ventajas
 Es un lenguaje potente y eficaz  Es la versión JAVA de Microsoft
 Desventajas  Desventajas
 Microsoft C++ no es compatible 100% con ANSI
 Su primer compilador se realizó antes de que fuese  Se le considera un lenguaje antiguo
fijado el estándar ANSI  Va a ser sustituido por el J# (Java para .NET)
 ANSI C++ no contempla conceptos modernos como  Objetivo
Unicode o XML.
 Microsoft tenía como objetivo que su C++ fuese un  Convencer a los programadores JAVA que se
lenguaje de alto rendimiento en windows, con lo que pasen a .NET
ha añadido muchas palabras reservadas.
 Resultado . Microsoft C++ es algo “liosillo”.
 C#  Ventajas
◦ Lenguaje diseñado específicamente para .NET ◦ Integrado con modernas herramientas de desarrollo
◦ Diseñado desde cero sin ningún condicionamiento ◦ Fácil de integrar con Visual Basic
◦ Microsoft lo describe como ◦ Tiene el alto rendimiento (casi) y permite el acceso a
 Sencillo memoria de bajo nivel de C++
 Moderno
 Orientado a objetos
 Seguro en cuanto a tipos
 Derivado de C y C++ (y a JAVA aunque Microsoft no lo
diga)

 Escribir un programa en C# que muestre un


Mi primer
2 programa
mensaje en pantalla.

con C#
Fijar
aplicación de ¿using?
Fijar consola
lenguaje del
proyecto

¿namespace?

Fijar nombre
de proyecto ¿Main dentro de una clase?

¿Main o main?

 Al escribir Main hay que:


◦ Utilizar una “M” mayúscula, como en “Main”
◦ Designar un Main como el punto de entrada al
programa
◦ Declarar Main como static void Main
 Un Main puede pertenecer a múltiple clases
◦ En ese caso se debe especificar cual es el primer
punto de entrada
 La aplicación termina cuando Main acaba o
ejecuta un return
 .NET Framework ofrece muchas clases de utilidad
 Una aplicación C# es una colección de clases,
estructuras y tipos ◦ Organizadas en espacios de nombres (namespace)
 Una clase es un conjunto de datos y métodos  System es el espacio de nombres más utilizado
 Una aplicación C# puede incluir muchas  Se hace referencia a clases por su espacio de
clases nombres
 Sintaxis :

class nombre  La sentencia using


{ System.Console.WriteLine("Hola, mundo");
...
} using System;

Console.WriteLine("Hola, mundo");

 La palabra using referencia los espacios de  Los comentarios son importantes


nombres utilizados. ◦ Una aplicación con los comentarios adecuados permite
 En caso de no referenciar un espacio de a un desarrollador comprender perfectamente la
estructura de la aplicación
nombres, al utilizar sus métodos se debe
especificar el path completo.  Comentarios de una sola línea
 La sentencia using // Obtener el nombre del usuario
Console.WriteLine(“¿Cómo se llama? ");
name = Console.ReadLine( );
System.Console.WriteLine("Hola, mundo");

using System;
 Comentarios de varias líneas
… /* Encontrar la mayor raíz
Console.WriteLine("Hola, mundo"); de la ecuación cuadrática */
x = (…);
 /// Comentarios que permiten generar
documentación automática del proyecto.
namespace ConsoleApplication11

Aspectos
3
{
/// <summary>
/// La clase 1 permite mostrar mensajes
/// </summary>
básicos del
class Class1 lenguaje
{
/// <summary>
/// Punto de entrada principal de la
aplicación.
/// </summary>

 Cada variable tiene un tipo de datos que


determina los valores que se pueden
almacenar en ella.
 C# es un lenguaje de especificaciones
Sistema de
3.1
seguras (type-safe), lo que significa que el
compilador de C# garantiza que los valores
Tipos almacenados en variables son siempre del
tipo adecuado.
Comunes  El runtime de lenguaje común incluye un
sistema de tipos comunes (Common Type
(CTS) System, CTS) que define un conjunto de tipos
de datos predefinidos que se pueden utilizar
para definir variables.
 Al definir una variable es necesario elegir el tipo de Tipo
datos correcto para ella. El tipo de datos determina los
valores permitidos para esa variable, los cuales a su vez
 El CTS admite tanto tipos de valor
determinan las operaciones que se pueden efectuar como de referencia
sobre ella.
 El CTS es una parte integral del runtime de lenguaje Tipo de valor Tipo de referencia
común y es compartido por los compiladores, las
◦ Almacenan referencias a
herramientas y el propio runtime. ◦ Contienen sus datos
sus datos (conocidos como
 Es el modelo que define las reglas que sigue el runtime directamente
objetos)
a la hora de declarar, usar y gestionar tipos. ◦ Cada una tiene su propia
◦ Dos variables de referencia
 El CTS establece un marco que permite la integración copia de datos
pueden apuntar al mismo
entre lenguajes, la seguridad de tipos y la ejecución de ◦ Las operaciones sobre objeto
código con altas prestaciones. una no afectan a otra
◦ Las operaciones sobre una
pueden afectar a otra

Tipo sbyte SByte 8 bits con signo


 El CTS admite tanto tipos de valor short Int16 16 bits con signo
como de referencia int Int32 32 bits con signo
long Int64 64 bits con signo
Tipo de valor Tipo de referencia
byte Byte 8 bits sin signo
ushort UInt16 16 bits sin signo
uint UInt32 32 bits sin signo
Predefinido Del usuario ulong Uint64 64 bits sin signo
• Entero
• Decimal
• Lógico El tipo byte no es equivalente al char.
• Carácter
float Single 32 bits. Precisión simple (7
dígitos significativos)
bool Bool true o false
double Double 64 bits. Precisión doble (15
dígitos significativos
decimal Decimal Alta precisión (28 dígitos
significativos

No se pueden convertir tipos bool


Por defecto un número no entero es double a entero o viceversa.

Explícitamente
34.5F (float)
34.5M (decimal)

Tipo
 El CTS admite tanto tipos de valor
char Char Carácter Unicode como de referencia
de 16 bits
Tipo de valor Tipo de referencia

Valores Unicode ‘\u0041’ Predefinido Del usuario


Valores hexadecimales ‘\x0041’
 Ejemplos  Ejemplos
 int  enum
 float  struct
Tipo
 El CTS admite tanto tipos de valor
enum Colores {amarillo, azul, rojo}; Definición como de referencia
static void Main(string[] args) Tipo de valor Tipo de referencia
{
Colores colorPantalon = Colores.amarillo; Uso

Console.WriteLine(colorPantalon); Visualización

}
Predefinido string objeto
amarillo

Del usuario

 Object static void Main(string[] args){


◦ Es un tipo del que derivan el resto de tipos string cadena= "Mi primera cadena";
Console.WriteLine(cadena);
 String }
◦ Facilita la gestión de cadenas
◦ Permite operaciones del tipo
 Asignación directa string cadena = “Mi primera cadena";
 Concatenación (+) Mi primera cadena
string cadena = “Mi primera\ncadena";
Mi primera
cadena

string cadena = @“Mi primera\ncadena";

Mi primera\ncadena
static void Main(string[] args){
string cadena= "Mi primera cadena";
Console.WriteLine(cadena);
}

Expresiones y
string cadena = "\"Hola\"";

“Hola”
3.2 Operadores
string cadena = “Hola “ + 2;
Hola 2

string cadena = 2 + “Hola“;


2Hola

 Símbolos utilizados en las expresiones

Operadores
• Incremento / decremento ++ --  Escribir un programa en C# que lea dos
• Aritméticos * / % + - números por teclado.
• Relacionales < > <= >=
• Igualdad == !=
• Lógicos && || !
• Asignación = *= /= %= += -=
Variables y
Definición de variables 3.3 Constantes
Salida por pantalla

Entrada por teclado y conversión de datos

 Se suelen declarar por tipo de dato y


Pregunta. ¿Qué ocurre si se intenta acceder a una variable no inicializada?
nombre de variable:
static void Main(string[] args)
int objetoCuenta; {
int a,b;
a = b + 2;
 Es posible declarar múltiples variables en }

una declaración:
int objetoCuenta, empleadoNúmero;
◦ --o--

int objetoCuenta, !!!! El compilador C# exige que cualquier variable esté inicializada
empleadoNúmero; antes de ser usada
 C# es mucho más seguro que  Reglas
◦ Usa letras, el signo de subrayado y dígitos
◦ C++ Deja al programador la tarea de garantizar que
 Recomendaciones
usa variables inicializadas. (Los compiladores ◦ Evita poner todas las letras en mayúsculas
modernos emiten mensajes de aviso pero permiten ◦ Evita empezar con un signo de subrayado
generar el ejecutable. ◦ Evita el uso de abreviaturas
◦ VB inicializa a 0 por defecto las variables. ◦ Use PascalCasing para nombres con varias palabras

 PascalCasing  Asignar valores a variables ya declaradas:


 Consiste en marcar con mayúsculas las fronteras
de las palabras int empleadoNumero;
 EstaEsUnaVariable empleadoNumero = 23;
 La primera letra es mayúscula
 Inicializar una variable cuando se declara:
 CamelCasing es lo mismo pero iniciando la
palabra en minúscula int empleadoNumero = 23;
 estaEsUnaVariable
 Hay autores que recomiendan utilizar  También es posible inicializar valores de
PascalCasing variables públicas y caracteres:
camelCasing para privadas.
char inicialNombre = 'J';
 El compilador C# exige que cualquier variable
 El ámbito de una variable coincide con su clase esté inicializada antes de ser usada
contenedora
 El ámbito de una variable finaliza con la llave
que cierra el bloque o método en el que la
variable ha sido declarada.
 Las variables pueden ser declaradas dentro de
un bucle, siendo solo visibles en el mismo.
◦ Esto cumple el estándar ANSI de C++
◦ Las versiones anteriores de Microsoft C++ no lo
cumplían

 Un constante es una variable que no  Las constantes en C#


puede cambiar su valor
◦ El valor de la constante debe ser calculado en tiempo
 Se definen como las variables (con la de compilación
palabra const)  (No se puede asignar a partir de una variable)
 Se deben inicializar obligatoriamente  Esto se gestiona con variables del tipo readonly
en la inicialización

const int valor = 6378;


 Permite acceder a las secuencias estándar de
entrada, salida y error
 Sólo tiene sentido para aplicaciones de
Entrada/Salida
3.4
consola
◦ Entrada estándar: teclado
Por Consola ◦ Salida estándar: Pantalla
◦ Error estándar: Pantalla

Ojo: La clase Console solo se debe utilizar para aplicaciones en línea de


comandos. Para aplicaciones windows se debe utilizar el espacio de nombre
System.Windows.Forms

 Se basan en el uso de la clase Console static void Main(string[] args)


 Console.Read() {
int a, b;
◦ Lee un flujo de entrada y lo devuelve como un int string cadena;
 Console.ReadLine() Console.Write ("Introduce el primer número: ");
cadena = Console.ReadLine();
◦ Lee una cadena de texto entera
a = int.Parse(cadena);
 Console.Write() Console.Write("Introduce el segundo número: ");
◦ Permite escribir en la pantalla cadena = Console.ReadLine();
b = int.Parse(cadena);
 Console.WriteLine }
◦ Escribe en pantalla añadiendo carácter retorno de
carro o fin de línea
 Cadena que contiene entre llaves los  La salida se puede formatear utilizando el
parámetros que se indican a continuación formato {n.m} donde n es el índice del
separados por comas parámetro y w el ancho de la salida

static void Main(string[] args) static void Main(string[] args)


{ {
int a, b; int a, b;
a = 3; a = 356;
b = 4; b = 4;
Console.WriteLine("La suma de {0} y {1} es {2} ",a,b, a+b); Console.WriteLine(" {0,4}\n+{1,4}\n {2,4}\n",a,b, a+b);
Console.WriteLine("La suma de " + a + " y " + b + " es " + (a+b)); }
}

 Se pueden indicar los decimales utilizando F y


un número

static void Main(string[] args)  Escribir un programa en C# que lea dos


{
double a, b;
números por teclado. Luego deberá mostrar el
a = 356.459; resultado de la suma de ambos y el cuadrado
b = 4.67;
Console.WriteLine(" {0,8:F2}\n+{1,8:F2}\n {2,8:F2}\n",a,b, a+b);
de dicha suma.
}
Conversión de
3.5 Tipos
Conversión de datos sin pérdida de información

Conversión de datos con pérdida de información

 Implicita  Explicita. Se debe indicar que se desea realizar una


◦ Automática, cuando no hay posible pérdida de conversión en la que puede haber pérdida de
información. información.

int x = 2;
long l = 234;
int x = 2;
double dob = 45.67;
long l = 234;
double dob = 45.67;
x = l;
l = dob;
dob = x;
l = x;
 Explicita. Correcta utilizando casting  ¿Es correcto el siguiente programa?

static void Main(string[] args)


{
int x = 2; float numero;
long l = 234; numero = 28.67;
double dob = 45.67; }
x = (int) l;
l = (long) dob;

static void Main(string[] args)


{
float numero;
numero = 28.67F;
}

Estructuras de
3.6 control

Conversión de datos
 if
 Condicional
◦ if/else if (saldo > reintegro)  if else
Console.WriteLine("OK"); if (saldo > reintegro)
◦ switch/case
Console.WriteLine("OK");
 Repetición else
◦ while  if else if Console.WriteLine("No OK");

◦ do/while
◦ for if (saldo > reintegro)
Console.WriteLine("OK");
◦ foreach else if (saldo < reintegro)
 Cambio de secuencia Console.WriteLine("No OK");
else
◦ return
Console.WriteLine("a 0");
◦ break
◦ continue

¿Cómo funcionará?.
switch (saldo)
if (saldo = reintegro) {
Console.WriteLine(“a 0"); case 1 : saldo *= 2;
else if (saldo < reintegro) break;
Console.WriteLine("No OK"); case 2 : saldo *= 3;
else break;
Console.WriteLine(“OK"); default : saldo = 0;
break;

}
SOLUCIÓN
if (saldo == reintegro)
Console.WriteLine(“a 0");
else if (saldo < reintegro)
Console.WriteLine("No OK"); BREAK. Casi obligatorio.
else
Console.WriteLine(“OK")
switch (saldo) { switch (saldo) {
case 1 : saldo *= 2; case 1 :
Error Correcto
case 2 : saldo *= 3; case 2 : saldo *= 3;
break; break;
SOLUCIÓN
default : saldo = 0; default : saldo = 0;
switch (saldo) {
break; break;
case 1 : saldo *= 2;
} goto case 2; }
case 2 : saldo *= 3;
break;
default : saldo = 0;
break;

 for
Permite utilizar etiquetas tipo string
for (i = 0; i <= 10 ; i++)  while
suma+= i; while ( i <= 10)
{
string nombre= "Pedro";
suma+= i;
switch (nombre)
i++;
{  do }
case "Pedro" : Console.WriteLine("Hola Pedro");
break; i = 0;
case "Juan" : Console.WriteLine("Hola Juan"); do
break; {
} suma += i;
i++;
}
while (i < 10);
 foreach  Return devuelve el control a la rutina llamante
a la actual
int [ ] mivector = {1,2,3}; int valor, suma;
foreach(int algo in mivector) Console.Write("Introduce un número : ");
Console.Write (algo); valor = int.Parse(Console.ReadLine());
suma = 0;
while (valor <= 10)
{
if (valor == 3)
Permite recorrer todos los elementos de un contenedor return;
suma += valor;
Es necesario definir una variable del tipo de los elementos del valor++;
contendor }

Console.WriteLine("El valor es " + suma);

¿¿¿ Qué hace el programa ???

 Break sale de la actual estructura de bucle  Continue: Obliga a ejecutar la siguiente


iteración del bucle
int valor, suma; int valor, suma;
Console.Write("Introduce un número : "); Console.Write("Introduce un número : ");
valor = int.Parse(Console.ReadLine()); valor = int.Parse(Console.ReadLine());
suma = 0; suma = 0;
while (valor <= 10) while (valor <= 10)
{ {
if (valor == 3) valor++;
break; if (valor == 3)
suma += valor; continue;
valor++;
} suma += valor;

Console.WriteLine("El valor es " + suma); }

Console.WriteLine("El valor es " + suma);


¿¿¿ Qué hace el programa ???

¿¿¿ Qué hace el programa ???


 Escribir un programa en C# que lea dos
Ejercicios números y solicite un número de operación. Si
se introduce el 1 se debe visualizar suma,
propuestos resta, producto y división de ambos números.
Si se introduce un 2 se debe visualizar resta,
producto y división de ambos números. Si se
introduce un 3 se debe visualizar producto y
división de ambos números. Si se introduce un
4 se debe visualizar solo la división de ambos
números.

 Escribir un programa en C# que solicite el  Modificar el ejercicio 2 de tal forma que el


nombre de usuario y password. SI el usuario es usuario disponga 3 oportunidades para indicar
“Lucas” y el password “Grihander” debe mostrar el usuario/password de forma correcta
un mensaje de bienvenida, en caso contrario
debe mostrar un error.
 Modificar el ejercicio 3 de tal forma que si se
introduce la cadena “SALir” bien en el usuario o
en el password finalice el programa.

 Nota: Utilizar estructuras de cambio de


secuencia

Potrebbero piacerti anche