Title: Prximos eventos
1Próximos eventos
Desarrollo web con asp.net
Fecha y hora Miércoles, 7 de octubre de 2009
1900 (GMT 1 Madrid) Duración 60
minutosModalidad Online Ponente Jesús Bosch
(Presidente UOC DotNetClub)
Próximamente
- Silverlight
- Introducción a la programación de videojuegos 3D
con XNA - ASP.NET vs PHP
Más información en http//uoc.dotnetclubs.com
2Ventajas de Unirse al Club
Charlas y eventos
Estar informado de las continuas charlas que se
realizan entorno a las tecnologías de Microsoft.
ACCESO AL MSDNAA
Existe un acuerdo entre la Universidad de la UOC
por el cual los estudiantes podrán descargarse
software de Microsoft de manera gratuita.
Certificaciones MICROSOFT
Si se realizan webcasts online, se premiará al
ponente con acceso a exámenes de certificaciones
de tecnologías Microsoft de forma totalmente
gratuita.
Más información en http//uoc.dotnetclubs.com
3Para quién es el DotNetClub?
Charlas y eventos
Abierto a toda la comunidad de desarrollo, IT y
diseño.
ACCESO AL MSDNAA
Disponible para estudiantes matriculados en al
UOC, además de profesores.
Certificaciones MICROSOFT
Abierto a toda la comunidad de desarrollo, IT y
diseño.
Más información en http//uoc.dotnetclubs.com
4Introducción a C
5UOC DotNetClub
http//uoc.dotnetclubs.com
6Jose Ibáñez Lozano
jibanezloz_at_gmail.com
7Pero antes
- Programación Orientada a Objetos (POO)
- Clases
- Generador de objetos. Especifica la estructura,
propiedades y métodos de los objetos. - Objetos
- Una instancia de una clase.
- Herencia
- Relaciones que se pueden establecer entre las
clases. - Hijos y padres.
8Clases
Clase A
Clase B
Clase C
Clase D
Persona
Feligres
Catequista
Pedro
Javi
Juanma
9Estructura de un programa C
- Un programa en C contiene
- Uno o más ficheros los cuales contienen
- Uno o más espacios de nombres que contienen
- Tipos de datos clases, estructuras, interfaces,
enumeraciones y delegates - Si no se declara un namespace se asume el global
por defecto - Un programa ejecutable ha de contener
obligatoriamente una función Main - static void Main()
- static int Main()
- static void Main(string args)
- static int Main(string args)
- Para acceder a un tipo podemos usar un camino
absoluto System.Console.WriteLine(...) o using
System ... Console.WriteLine(...)
Ejemplo
10Identificadores
- Identificadores
- Se usan para dar nombres a elementos de un
programa como variables, constantes y métodos - Consta de caracteres alfanuméricos y _, es
sensible a mayúsculas y minúsculas, debe comenzar
con letra o _ - Si se quiere usar una palabra clave como
identificador hay que usar como prefijo el
carácter _at_ - Object _at_this // prevenir conflicto con "this"
11Variables
- Una variable (objeto) en C representa la
localización en memoria donde se guarda una
instancia de una clase
12Tipos de variables
- Por valor
- Continen el dato
- No pueden ser nulas
- Por referencia
- Contienen la referencia
- Pueden ser nulas
Ejemplo
int i 123 string s Hola cachocarne"
123
i
s
Hola cachocarne"
13Tipos de variables
- Por Valor
- Primitives int i
- Enums enum State Off, On
- Structs struct Point int x, y
- Por referencia
- Clases class Foo Bar, IFoo ...
- Interfaces interface IFoo IBar ...
- Arrays string a new string10
- Delegates delegate void Empty()
- Predefinidos
- Referencia object, string
- Con signo sbyte, short, int, long
- Sin signo byte, ushort, uint, ulong
- Caracter char
- Flotantes float, double, decimal
- Lógicobool
14Variables
- Las variables por valor pueden declararse e
iniciarse - bool bln true
- byte byt1 22
- char ch1x, ch2\u0066 // Unicode para a
- decimal dec1 1.23M
- double dbl11.23, dbl21.23D
- short sh 22
- int i 22
- long lng1 22, lng2 22L // L long
- sbyte sb 22
- float f1.23F
- ushort us122
- uint ui122, ui222U // U unsigned
- ulong ul1 22, ul222U, ul322L, ul42UL
Ejemplo
15Variables
- Los valores por referencia son creados con la
palabra clave new - object o new System.Object()
- Strings se pueden inicializar directamente
- string s "Hola" // usan caracteres Unicode de
2 bytes - C soporta secuencias de escape como en C
- string s1 "Hola\n" // salto de línea
- string s2 "Hola\tque\ttal" // tabulador
- Como las sentencias de escape comienzan con \,
para escribir este carácter hay que doblarlo, o
usar _at_ - string s3 "c\\WINNT"
- string s4 _at_"C\WINNT"
Ejemplo
Ejemplo
Ejemplo
Ejemplo
16Constantes
- C provee el modificador const que se puede usar
para crear constantes de programas - Const int min 1
- Const int max 100
- Const int range max min
Ejemplo
17Arrays
- Los arrays son tipos por referencia y sus índices
comienzan en 0. - El tipo de datos viene dado por string, el
nombre del array es una referencia al array. - Los arrays se pueden inicializar directamente.
- Puede haber arrays multidimensionales y arrays de
arrays.
18Expresiones y Operadores
- Las expresiones en C son muy similares a las de
C y C - Operadores aritméticos
- , Suma unaria , a
- - , Resta unaria, -a
- , Incremento, a o a
- --, Decremento, --a o a--
- , Suma, ab
- -, Resta, a-b
- , Multiplicación, ab
- /, División, a/b
- , Resto, ab
19Expresiones y Operadores
- Operadores relacionales
- , Igualdad , ab
- ! , Inigualdad, a!b
- lt, Menor que, altb
- lt, Menor o igual, altb
- gt, Mayor que, agtb
- gt, Mayor que o Igual a, agtb
- Los programadores de Visual Basic deben notar que
se usa en vez de para igualdad, !
para desigualdad en vez de ltgt e para
asignación
20Expresiones y Operadores
- Operadores relacionales
- ! , Negación , !a
- , And binario, ab
- , Or binario, ab
- , Or exclusivo, ab
- , Negación binaria, a
- , And lógico, ab
- , Or lógico, ab
- Operadores de manipulación de bits
- int i132
- int i2i1ltlt2 // i2128
- int i3i1gtgt3 // i34
21Expresiones y Operadores
- Operadores de asignación (para a3 y b7)
- , ab , 7
- , ab, 10 (equivalente a a b)
- -, a-b, -4 (equivalente a a - b)
- , ab, 21 (equivalente a a b)
- /, a/b, 0 (equivalente a a / b)
- , ab, 3 (equivalente a a b)
- , ab, 7 (equivalente a a b)
- gtgt, agtgtb, 0 (equivalente a a gtgt b)
- ltlt, altltb, 384 (equivalente a a ltlt b)
- Operadores de manipulación de bits
- int i132
- int i2i1ltlt2 // i2128
- int i3i1gtgt3 // i34
22Expresiones y Operadores
- Otros operadores
- minaltb ? ab // if altb mina else minb
- . para acceso a miembros, e.j. args.Length
- () para conversión de tipos
- como índice de arrays, punteros, propiedades
y atributos - new para crear nuevos objetos
- typeof para obtener el tipo de un objeto
- is para comparar el tipo de un objeto en
runtime - sizeof para obtener el tamaño de un tipo en
bytes
23Sentencias en C
- Las sentencias pueden ocupar más de una línea y
deben terminarse con un string saltoLinea
_at_"bla bla bla bla bla bla bla bla - bla bla bla bla bla bla bla
bla " - Grupos de sentencias se pueden agrupar en
bloques con y - int i, j
- // un sentencia simple
- i1
- // un bloque de sentencias
-
- j2
- iij
Ejemplo
Ejemplo
24Sentencias en C
- if, sirve para saltar en base a una condición
- if (ilt5)
- System.Console.WriteLine("i lt 5")
- if (ilt5)
- System.Console.WriteLine("ilt5")
- else
- System.Console.WriteLine("igt5)
- if (ilt5)
- System.Console.WriteLine("ilt5")
- System.Console.WriteLine("i es más pequeño")
- else
- System.Console.WriteLine("igt5")
- System.Console.WriteLine("i NO es más pequeño")
-
Ejemplo
Ejemplo (If y Else)
Ejemplo (If y Else)
25Sentencias en C
- Do while, sirve para repeticiones de sentencia
que se ejecutan al menos una vez - int i1
- do
- System.Console.WriteLine(i)
- While (ilt1)
- while, para repeticiones de 0 a N veces
- int i1
- While (ilt5)
- System.Console.WriteLine(i)
Ejemplo
Ejemplo
26Sentencias en C
- for, se usa cuando el número de repeticiones se
conoce a priori - for (int i1 ilt5 i)
- System.Console.WriteLine(i) // Visualiza digitos
1 a 5 - La primera expresión es de inicialización,
declara un entero - La segunda la condición del bucle
- La tercera es la expresión del iterador
- Se pueden insertar múltiples expresiones
- for (int i1, j2 ilt5 i, j2)
- System.Console.WriteLine("i" i ", j" j)
-
- Un bucle infinito se podría codificar como
- for ()
- // bucle infinito
- ...
-
Ejemplo
Ejemplo
Ejemplo
27Sentencias en C
- continue, se usa para saltar el resto de la
iteración y comenzar la siguiente - for (int i1 ilt5 i)
- if (i3)
- continue
- System.Console.WriteLine(i)
-
-
- Break, se usa para salir de un bucle
- for (int i1 ilt5 i)
- if (i3)
- break
- System.Console.WriteLine(i)
Ejemplo
Ejemplo
28Sentencias en C
- Switch, Sirve para seleccionar entre múltiples
opciones posibles - uint i2
- switch(i)
- case 0
- goto case 2 // para permitir varios casos usar
goto - case 1
- goto case 2
- case 2
- System.Console.WriteLine("ilt3")
- break // el uso de goto o break es obligatorio
- case 3
- System.Console.WriteLine("i3"),
- break
- default
- System.Console.WriteLine("igt3")
- break
Ejemplo
29Sentencias en C
- Foreach, representa un interesante caso para
iterar sobre un array - int arr 2, 4, 6, 8
- foreach (int i in arr) // Visualizará 2, 4, 6 y 8
- System.Console.WriteLine(i)
- Return, termina la ejecución del método actual y
devuelve control al método invocador - class Add // devuelve resultado de sumar 2
enteros - public static void Main()
- System.Console.WriteLine("23" add(2,3))
-
- private static int add(int i, int j)
- return ij
-
-
Ejemplo
Ejemplo
30Sentencias en C VIII
- Goto, transfiere control a una instrucción que
contiene una etiqueta - using System
- public class EjemploGoto
- public static void Main(string args)
- if (args.Length 0)
- Console.WriteLine("No se han pasado args")
- goto end
-
- Console.WriteLine("El primer argumento es "
args0) - end return
-
-
- Throw, sirve para lanzar una excepción
- if (val gt max) throw new Exception("Valor excede
máximo")
Ejemplo
31Clases
- Definimos una clase usando la palabra clave class
seguida del nombre de la clase y el cuerpo de la
clase entre y . - Los miembros que una clase puede contener son
- Campos
- Métodos
- Propiedades
- El constructor (Persona()) tiene el mismo nombre
que la clase y no devuelve ningún valor - La palabra clave this se usa para referenciar a
la instancia de la clase actual - C soporta punteros cuando funciona en modo
inseguro, se usa la palabra clave unsafe para
preceder a este tipo de datos - Un miembro static puede ser accedido sin crear
una instancia de una clase (se suelen usar para
guardar valores globales)
32Propiedades
- Las propiedades permiten que una clase exponga
una manera pública de obtener y establecer
valores, ocultando el código de implementación o
comprobación. - C provee propiedades para recuperar (get) y
modificar (set) campos de una clase - Dentro de un atributo, set C provee la variable
value - Tanto los campos, como atributos y métodos pueden
ir acompañados de modificadores (public). Si se
omite un modificador entonces los miembros son
privados - La convención es hacer que miembros privados
empiecen por minúscula, mientras que todos los
demás lo hagan por mayúscula
33Propiedades
public class Person private int age public
int Age get return age set age
value Console.WriteLine(age)
Propiedad
C
Person p new Person() p.Age 27 p.Age
En vez de
Otro
Person p new Person() p.setAge(27) p.setAge(p.
getAge() 1)
34Estructuras
- Se pueden crear clases ligeras usando una
estructura (struct) - Las estructuras son tipos por valor y se guardan
en la pila - Más eficientes, no requieren referencias y no hay
garbage collection - Propiedades de las estructuras
- Las estructuras son tipos de valor, mientras que
las clases son tipos de referencia. - A diferencia de las clases, se pueden crear
instancias de las estructuras sin utilizar un
operador new. - Las estructuras pueden declarar constructores,
pero deben utilizar parámetros. No puede declarar
un destructor. - Una estructura no puede heredar de otra
estructura o clase, ni puede ser la base de una
clase. Todas las estructuras heredan directamente
de System.ValueType, que hereda de System.Object. - Una estructura puede implementar interfaces.
35Clases y Estructuras
class CPoint int x, y ... struct SPoint
int x, y ... CPoint cp new CPoint(10,
20) SPoint sp new SPoint(10, 20)
10
sp
20
cp
CPoint
10
20
36Herencia
- C nos permite diseñar una clase que usa herencia
para extender otra ya existente - C como Java sólo soporta herencia simple.
- La herencia representa una relación entre clases
- La palabra clave base se usa para referenciar al
objeto padre - La palabra clave new indica al compilador que
queremos sobre-escribir el método Saludar del
padre (Persona).
37Métodos virtuales
- Una de las ventajas de la herencia que podemos
usar una clase base para referenciar a una
instancia de una clase derivada - Persona p new Hombre("Diego", "Ipiña")
- p.Saludar() // problema, invoca a Saludar de
Persona y no de Hombre - La solución a esto son métodos virtuales a través
de las palabras claves virtual (a usarse en el
método de la clase padre) y override (a usarse en
el método de la clase hijo)
Ejemplo
38Clases abstractas
- Supongamos que estamos interesados en modelar
hombres y mujeres, pero no personas perse - No queremos permitir la creación de objetos
Persona directamente, pero queremos permitir la
creación de objetos Hombre y Mujer directamente. - Usamos abstract delante de Persona para evitar
que esta clase se pueda instanciar - Usamos abstract en el método Saludar de Persona
para indicar que las clases que heredan deben
sobreescribirlo - Para deshabilitar la herencia se puede marcar una
clase como sealed, resultando en un error de
compilación si se intenta derivar de ella - sealed class Person
-
-
Ejemplo
39Más sobre métodos
- Los métodos acceptan parámetros y devuelven un
resultado - int Add(int x, int y)
- return xy
-
- Los parámetros x e y se pasan por valor, se
recibe una copia de ellos - Si queremos modificar dentro de una función un
parámetro y que el cambio se refleje en el código
de invocación de la función, usaremos ref, tanto
en la declaración del método como en su
invocación - void Increment(out int i)
- i 3
-
-
- int i
- Increment(out i) // i 3
Ejemplo
Ejemplo
40Modificadores de acceso
- Los modificadores de acceso controlan la
visibilidad de los miembros de una clase - private, sólo código dentro de la misma clase
contenedora tiene acceso a un miembro privado. Es
el modo de acceso por defecto. - public , visible a todos los usuarios de una
clase - protected, miembros accesibles tanto por dentro
de la clase como en clases derivadas - internal, miembros accesibles sólo dentro de un
assembly - protected internal, permite acceso protected e
internal
41Excepciones
- Modo recomendado para manejar errores
excepcionales en C - Todas las excepciones definidas en la FCL derivan
de System.Exception - System.Exception define una serie de propiedades
comunes a todas las excepciones - Message contiene un mensaje de error indicando
que ha ido mal - StackTrace detalla los detalles de la llamada
que produjo la excepción - Para distinguir entre excepciones lanzadas por la
framework y excepciones generadas por
aplicaciones, estas últimas se recomienda deriven
de System.ApplicationException
42Algunas excepciones comunes
- ArgumentNullException una referencia nula es
pasada como argumento - ArgumentOutOfRangeException nos hemos salido de
rango, e.j. entero demasiado grande - DividedByZeroException
- IndexOutOfRangeException se usa un índice
inválidado del array - InvalidCastException
- NullReferenceException se intenta invocar un
método en un objeto que es null - OutOfMemoryException
43Enumeraciones
- La palabra clave enum puede usarse para definir
un conjunto ordenado de tipos integrales - enum Modalidad
- Treboles1, Rombos, Corazones, Picas
-
- class Enums
- public static void Main()
- Modalidad m Modalidad.Treboles
- System.Console.WriteLine(m) // Visualiza
Treboles -
-
- Las enumeraciones por defecto empiezan de 0 a no
ser que se sobreescriba como en el ejemplo
Ejemplo
44Atributos
- C provee un mecanismo para especificar
información declarativa extra a través de varios
atributos - Esta información se puede recuperar y usar en
tiempo de ejecución - Algunos atributos predefinidos por .NET Framework
son - AssemblyVersion especifica versión de una
assembly - Serializable indica que un tipo es serializable
- WebService y WebMethod para servicios Web
- El siguiente ejemplo muestra como podemos llevar
a cabo el proceso de debugging antes ilustrado
usando atributos. - El método de debug declarado y todas las llamadas
al mismo, sólo serán compiladas en el programa si
DEBUG es definido. - Se pueden definir atributos personalizados
derivando de System.Attribute - Ejemplo csc /defineDEBUG preproc.cs
45Atributos
using System using System.Diagnostics class Go
public static void Main() Console.Write("Hola,
cómo te llamas?") string nombre
Console.ReadLine() debug("usuario introducido "
nombre) if (nombre.Equals("")) nombre
"Amigo" Console.WriteLine("Hola "
nombre) Conditional("DEBUG") private static
void debug(string msg) Console.WriteLine("DEBUG
" msg)
46Colecciones
- La plataforma .NET tiene un espacio de nombres
dedicado a estructuras de datos como pilas,
arrays dinámicos, colas... - System.Collections dispone de una serie de
interfaces que implementan todas estas
colecciones. - Entre otras estructuras podemos encontrar
- ArrayList Array dinámico.
- HashTable Tablas de Hashing.
- Queue Colas.
- SortedList Listas ordenadas.
- Stack Pilas.
- BitArray array de bits (guardan booleanos)
- Todas las colecciones menos BitArray guardan
objetos de tipo System.Object
47Jose Ibáñez Lozano
Muchas GRACIAS por asisitir!
jibanezloz_at_gmail.com
48UOC DotNetClub
http//uoc.dotnetclubs.com