Está en la página 1de 56

Introduccin a C#

Origen y necesidad de un
nuevo lenguaje

C# (ledo en ingls C Sharp y en espaol C Almohadilla) es el


nuevo lenguaje de propsito general diseado por Microsoft para
su plataforma .NET.

Sus principales creadores son Scott Wiltamuth y Anders Hejlsberg.

C# es el nico que ha sido diseado especficamente para escribir


cdigo para la plataforma .NET.

Programar usando C# es mucho ms sencillo e intuitivo

C# es el lenguaje nativo de .NET.

La sintaxis y estructuracin de C# es muy parecida a la de C++ o


Java, esto facilita la migracin de cdigos escritos en estos
lenguajes a C# y facilita su aprendizaje a los desarrolladores
habituados a ellos.

Caractersticas de C#
Alguna de las caractersticas aqu sealadas no son exactamente propias del
lenguaje sino de la plataforma .NET en general

Sencillez : C# elimina elementos innecesarios en .NET

El cdigo escrito en C# es autocontenido, lo que


significa que no necesita de ficheros adicionales al propio
fuente tales como ficheros de cabecera o ficheros IDL.
El tamao de los tipos de datos bsicos es fijo e
independiente del compilador, sistema operativo o
mquina para quienes se compile (no como en C++), lo
que facilita la portabilidad del cdigo.
No se incluyen elementos poco tiles de lenguajes como
C++ tales como macros, herencia mltiple o la
necesidad de un operador diferente del punto (.) acceder
a miembros de espacios de nombres (::).

Caractersticas de C#

Modernidad : Incorpora elementos tiles para el

desarrollo de aplicaciones, por ejem. Tipos bsicos como


decimal, string, bool, y la instruccin foreach.

Orientacin a Objetos : C# es un lenguaje de

programacin orientado a objetos y soporta todas las


caractersticas propias del paradigma de programacin
orientada a objetos: encapsulacin, herencia y
polimorfismo.

Orientacin a componentes: C# incluye

elementos propios del diseo de componentes que otros


lenguajes tienen que simular mediante construcciones ms
o menos complejas. Es decir, la sintaxis de C# permite
definir cmodamente propiedades, eventos o atributos.

Caractersticas de C#

Gestin automtica de memoria: Todo lenguaje

de .NET tiene a su disposicin el recolector de basura del


CLR. Esto tiene el efecto en el lenguaje de que no es
necesario incluir instrucciones de destruccin de objetos.
Sin embargo, dado que la destruccin de los objetos a
travs del recolector de basura es indeterminista y slo se
realiza cuando ste se active ya sea por falta de memoria,
finalizacin de la aplicacin o solicitud explcita en el
fuente-, C# tambin proporciona un mecanismo de
liberacin de recursos determinista a travs de la
instruccin using.

Seguridad de tipos: C# incluye mecanismos que


permiten asegurar que los accesos a tipos de datos
siempre se realicen correctamente.

Instrucciones seguras: Para evitar errores muy

comunes, en C# se han impuesto una serie de


restricciones en el uso de las instrucciones de control ms
comunes, por ejem.: el operador de igualdad (==) y el de

Caractersticas de C#

Sistema de tipos unificado: en C# todos los tipos


de datos que se definan siempre derivarn, aunque sea de
manera implcita, de una clase base comn llamada
System.Object, por lo que dispondrn de todos los
miembros definidos en sta clase (es decir, sern
objetos).

Extensibilidad de tipos bsicos: C# permite

definir, a travs de estructuras, tipos de datos para los


que se apliquen las mismas optimizaciones que para los
tipos de datos bsicos.

Extensibilidad de operadores: Para facilitar la


legibilidad del cdigo y conseguir que los nuevos tipos de
datos bsicos que se definan a travs de las estructuras
estn al mismo nivel que los bsicos predefinidos en el
lenguaje, C# permite redefinir el significado de la mayora
de los operadores cuando se apliquen a diferentes tipos de
objetos.

Caractersticas de C#

Extensibilidad de modificadores: C# ofrece, a

travs del concepto de atributos, la posibilidad de aadir a


los metadatos del mdulo resultante de la compilacin de
cualquier fuente informacin adicional a la generada por el
compilador que luego podr ser consultada en tiempo
ejecucin a travs de la librera de reflexin de .NET . Esto,
que ms bien es una caracterstica propia de la
plataforma .NET y no de C#, puede usarse como un
mecanismo para definir nuevos modificadores.

Versionable: C# incluye una poltica de versionado

que permite crear nuevas versiones de tipos sin temor a


que la introduccin de nuevos miembros provoquen errores
difciles de detectar en tipos hijos previamente
desarrollados y ya extendidos con miembros de igual
nombre a los recin introducidos. Para esto se toman dos
medidas : Se obliga a que toda redefinicin deba incluir el
modificador override, si no se considera redefinicin,
entonces se considera que lo que se desea es ocultar el
mtodo de la clase padre, de modo que para la clase hija

Caractersticas de C#

Eficiente: En principio, en C# todo el cdigo incluye

numerosas restricciones para asegurar su seguridad a


menos que se marquen regiones de cdigo como inseguras
(modificador unsafe).

Compatible: Para facilitar la migracin de

programadores, C# no slo mantiene una sintaxis muy


similar a C, C++ o Java que permite incluir directamente
en cdigo escrito en C# fragmentos de cdigo escrito en
estos lenguajes, sino que el CLR tambin ofrece, a travs
de los llamados Platform Invocation Services
(PInvoke), la posibilidad de acceder a cdigo nativo escrito
como funciones sueltas no orientadas a objetos.

Escritura de aplicaciones

Es importante resaltar que C# es sensible a las


maysculas, lo que significa que no da igual la
capitalizacin con la que se escriban los
identificadores. Es decir, no es lo mismo escribir
Console que COnsole o CONSOLE, y si se hace de
alguna de las dos ltimas formas el compilador
producir un error debido a que en el espacio de
nombres System no existe ninguna clase con dichos
nombres. En este sentido, cabe sealar que un error
comn entre programadores acostumbrados a Java es
llamar al punto de entrada main en vez de Main, lo
que provoca un error al compilar ejecutables en tanto
que el compilador no detectar ninguna definicin de
punto de entrada.

Estructura general de un
programa en C#
// Esqueleto de un programa
C#
using System;
namespace MyNamespace1
{
class MyClass1
{
}
struct MyStruct
{
}
interface MyInterface
{
}

delegate int MyDelegate();


enum MyEnum
{
}
namespace MyNamespace2
{
Class MyClass2
{
public static void Main()
{
}
}
}
}

Escritura de aplicaciones
using System;
namespace MyNamespace1
{
class HolaMundo
{
public static void Main()
{
System.Console.WriteLine(Hola Mundo!);
}
}
}

El mtodo Main

Al escribir Main hay que:

Utilizar una M mayscula, como en


Main
Designar un Main como el punto de
entrada al programa
Declarar Main como public static void
Main

Un Main puede pertenecer a mltiple


clases
La aplicacin termina cuando Main
acaba o ejecuta un return

La sentencia using y el
espacio de nombres System
.NET Framework ofrece muchas clases de
utilidad
Organizadas en espacios de nombres
System es el espacio de nombres ms
utilizado
Se hace referencia a clases por su espacio
System.Console.WriteLine("Hola,
mundo");
System.Console.WriteLine("Hola,
mundo");
de nombres

using
System;
using
System;
La sentencia
using

Console.WriteLine("Hola,
Console.WriteLine("Hola, mundo");
mundo");

Operaciones bsicas de
entrada/salida

La clase Console
Los mtodos Write y WriteLine
Los mtodos Read y ReadLine

La clase Console

Permite acceder a las secuencias


estndar de entrada, salida y error
Slo tiene sentido para aplicaciones de
consola

Entrada estndar: teclado


Salida estndar: Pantalla
Error estndar: Pantalla

Es posible redireccionar todas las


secuencias

Los mtodos Write y WriteLine

Console.Write y Console.WriteLine
muestran informacin en la pantalla de
la consola

WriteLine enva un fin de lnea/retorno de


carro

Ambos mtodos son sobrecargados


Es posible emplear una cadena de
formato y parmetros

Formatos de texto
Formatos numricos

Los mtodos Read y ReadLine

Console.Read y Console.ReadLine leen


informacin introducida por el usuario

Read lee el siguiente carcter


ReadLine lee toda la lnea introducida

Introduccin a la Programacin
Orientada a Objetos

El Paradigma de Programacin Orientado a Objetos


Es una tcnica de programacin que usa objetos y sus
interacciones para disear aplicaciones y buenos programas
de computadora. Este paradigma proporciona una forma
particular de programar, ms cercana a la manera de como
expresamos las cosas en la vida real.
En la programacin orientada a objetos tenemos que
disear nuestros programas en trminos de objetos,
propiedades y mtodos. Estos conforman los elementos
principales de este paradigma. La programacin orientada a
objetos expresa un programa como un conjunto de estos
objetos, que colaboran entre ellos para realizar tareas. Esto
permite hacer los programas y mdulos ms fciles de
escribir, mantener y reutilizar.

Elementos del Modelo


Orientado a Objetos

Abstraccin

Encapsulamiento

Modularidad

Jerarqua

Abstraccin

La Abstraccin denota las caractersticas esenciales de un objeto


que lo distingue de otras clases de objetos proveyndolo de
fronteras conceptuales de definicin muy claras y dentro de una
perspectiva funcional.

En el desarrollo de sistemas esto significa centrarse en lo que es


y lo que hace un objeto antes de decidir cmo debera ser
implementado.

La abstraccin es el paso de un objeto del mundo real a un objeto


abstracto o a la informacin constructiva de una clase u objeto
que sirva como componente de la solucin.

La Abstraccin es una descripcin especial simplificada de un


sistema que hace nfasis en ciertos rasgos y suprime otros.

Abstraccin

Encapsulamiento

El Encapsulamiento es el proceso mediante el cual se ocultan todos


los detalles de un objeto que no contribuyen a sus caractersticas
esenciales de uso, es decir, este principio nos indica que debemos
ocultar la complejidad constructiva del mdulo innecesaria para que
otros objetos lo usen o se comuniquen con l sobre todo por motivos
de seguridad y de la integridad del mdulo.

Este principio nos propone fragmentar las abstracciones en dos


partes principales, una parte constitutiva y otra parte de interfaz o
servicio visible a comunicaciones o servicios.

De esta manera la complejidad con la que se elabora cierta


abstraccin queda a salvo y no preocupa a capas superiores de
abstraccin.

Encapsulamiento

Modularidad

La Modularidad es una particin funcional de todo el


sistema. Cada mdulo o parte del sistema debe contar
tanto con una funcionalidad clara y relativamente sencilla
como con una facilidad de combinarse con otros
mdulos.

A los mdulos se le ha llamado tambin paquetes unidades.

Un mdulo es una unidad de programa donde se encuentran


implementadas una coleccin de recursos que pueden ser
utilizados por uno o ms programas

Los mdulos se compilan por separados y se caracterizan


fundamentalmente por su interfaz y su implementacin
permitiendo la ocultacin de la informacin

Modularidad

Jerarqua

La jerarqua es el orden por niveles de todas las abstracciones.

El enfoque orientado a objetos tiene una sola jerarqua,


jerarqua de clases.

Las dos partes ms importantes de la jerarqua son la


estructura de clases y la estructura de objetos. La primera
establece todas las relaciones de herencia en sus modalidades
permitidas, la segunda, la dinmica de mensajes.

La organizacin de todas las abstracciones logradas en un


sistema est en un orden riguroso que categoriza objetos de
un mismo o semejante tipo dentro de una misma categora.

Jerarqua

Herencia
La herencia es el mecanismo que le permite a un objeto
heredar propiedades de otra clase de objetos. La herencia
permite a un objeto contener sus propios procedimientos o
funciones y heredar los mismos de otros objetos.
Es compartir atributos y operaciones entre clases tomando como
base una relacin jerrquica. En trminos generales se puede
definir una clase que despus se ir refinando sucesivamente para
producir subclases. Todas las subclases poseen o heredan todas y
cada una de las propiedades de su superclase y aaden, adems,
sus propiedades exclusivas. No es necesario repetir las
propiedades de las superclases en cada subclase.

Polimorfismo
Significa que una operacin puede comportarse de modos
distintos en distintas clases teniendo el mismo nombre de mtodo.
Sin embargo, en un lenguaje orientado a objetos es este el que
selecciona automticamente el mtodo correcto para implementar
una operacin basndose en el nombre de la operacin y en la
clase del objeto que est siendo afectado. El usuario de una
operacin no necesita ser consciente del nmero de mtodos que
existen para implementar una cierta operacin polimrfica.
El polimorfismo, entonces, se refiere a que una misma
operacin puede tener diferente comportamiento en
diferentes objetos.

Clase y Objeto
Clase:
Una clase contienen el molde (estructura, esquema) a partir del cual se crean los
objetos que pertenecen a ella y el cdigo que debe ejecutarse cada vez que un
objeto de la clase recibe un mensaje. Una clase contiene la descripcin de las
caractersticas comunes de todos los objetos que pertenecen a ella: la
especificacin del comportamiento, la definicin de la estructura interna y la
implementacin de los mtodos.
Instancia:

Se dice que cada objeto es una instancia de su clase. Toda instancia de la clase
posee su propio valor para cada uno de los atributos pero comparte los nombres de
los atributos y las operaciones con las dems instancias de la clase. Los objetos de
un sistema se comunican entre s mediante mensajes. Todo objeto contiene una
referencia implcita a su propia clase.

Lenguaje de Modelado Unificado


UML

Diagrama de clases.

UML

Es un lenguaje que permite modelar, construir y


documentar los elementos que forman un
producto de software que responde a un enfoque
orientado a objetos.
Cuenta con una notacin estndar y semnticas
esenciales para el modelado de un sistema
orientado a objetos.
Fusin de las tcnicas Booch, OMT y OOSE de
Grady Booch, Jim Rumbaugh e Ivar Jacobson
respectivamente en 1995.

Tipos de Diagramas UML

Diagramas de estructura: mostrar la


estructura esttica del sistema que se
est modelando

Incluye: diagramas de clase, componentes y/o


objetos.

Diagramas de comportamiento: muestra


el comportamiento dinmico entre los
objetos y el sistema.

Incluye: diagramas de actividades, casos de


uso y de secuencia

Diagramas de Clase
Describe grficamente las especificaciones de las
clases de software y de las interfaces en una
aplicacin.
Contiene la siguiente informacin:
Clases, asociaciones y atributos.
Interfaces, con sus operaciones y constantes.
Mtodos.
Informacin sobre los tipos de los atributos.
Navegabilidad.
Dependencias.

Atributos
Cada atributo tiene un nombre o identificador y un tipo. El nombre
del atributo es un sustantivo y empieza en minsculas.
Seguidamente aparecer el tipo de atributo ( float, char, int,...).
Opcionalmente puede aparecer el valor inicial del atributo y otras
propiedades colocadas entre los signos de parntesis.
Un atributo se define de la siguiente forma:
Visibilidad nombre_atributo : tipo_atributo = valor inicial {`otras propiedades }

La visibilidad hace referencia a si el atributo es pblico, protegido o


privado.
UML emplea los smbolos +, # y para indicar si es pblico, protegido o
privado respectivamente.

Operaciones
Las especificacin de las operaciones en UML tienen la siguiente
sintaxis:
Visibilidad nombre_servicio (lista de parmetros):tipo de retorno {`otras propiedades}`

El nombre del servicio emplear un verbo con un sustantivo.


La primera letra se escribir en minscula. Entre parntesis, (),
aparecern los parmetros del servicio, siguiendo para cada
uno de ellos, la regla sobre los atributos. Despus aparecer el
tipo de retorno y opcionalmente otras propiedades entre llaves.
El usuario puede crear otros compartimentos para dar
informacin adicional como excepciones, requisitos, etc.

Representacin de una clase en UML

CFichaRevista
- NroDeRevista : int
- Ao : int
+ CFichaRevista()
+
AsignarNroDeRevista()
+ObtenerNroDeRevista
()
+ AsignarAo()
+ ObtenerAo()
+ PedirRevista()
+ Imprimir()

Clase
Atributos

Operaciones

Asociaciones
Los Objetos a menudo son asociados o relacionados con
otros objetos.
Cuando modelas asociaciones en diagramas de clases
UML, debe mostrarse como una delgada lnea conectando
dos clases. Las Asociaciones pueden llegar a ser bastante
complejas; por consiguiente, pueden representar algunas
cosas acerca de ellos en los diagramas.

Notacin para las asociaciones

La etiqueta, que es opcional, aunque muy recomendable, es normalmente

una o dos palabras que describen la asociacin

Indicadores de la multiplicidad
La multiplicidad de la asociacin est etiquetada en los
extremos de la lnea, una multiplicidad de indicador para cada
direccin
Indicadores de la multiplicidad.
Indicador Significado
0..1 Cero o uno
1 Uno slo
0..* Cero o ms
1..* Uno o ms
N Slo n (donde n > 1)
0..n Cero a n (donde n > 1)
lenStr2 Uno a n (donde n > 1)

Asociaciones

Para indicar la direccin en la que debe leerse la etiqueta. Esto se


representa mediante un tringulo relleno, llamado un indicador de
direccin.

Las puntas de flecha en el extremo de la lnea indican la


direccionalidad de la asociacin. Una lnea con una punta de
flecha es unidireccional, mientras que una lnea con cero o dos
puntas de flecha es bidireccional. Oficialmente debe incluir ambas
puntas de flecha para asociaciones bidireccional.

En cada extremo de la asociacin, el rol, el contexto que toma un


objeto dentro de la asociacin, tambin puede estar indicado.
Modelar el rol slo cuando la informacin agrega valor.

Asociacin bsica entre Clases

Define una determinada vinculacin entre dos tipos. El conector


puede indicar el rol de la asociacin fuente y destino, la
cardinalidad y el tipo de navegabilidad (bidireccional o
unidireccional).

si un objeto de la clase P tiene que saber algo de un objeto


de la clase Q aparece la asociacin, esto es, se establece la
relacin necesito-conocer.

ClassP

+es habilitado
por 1
0..*
+habilita

ClassQ

Generalizacin

El elemento destino es una especializacin del elemento


fuente.

La generalizacin se representa por una lnea continua con


una flecha hueca que apunta a la superclase.

Generalizacin

A)

B)

Es una forma de construir clasificaciones


taxonmicas entre los conceptos que son
representados en una jerarqua de clases. Para la
realizacin de estas generalizaciones deben de
cumplir dos reglas:
Regla del 100%: La definicin de la superclase
se debe poder aplicar a la subclase. La subclase
debe ajustarse al 100% de los atributos y
asociaciones de la superclase.
Regla Es-Un: En el lenguaje natural debe
comprobarse que la subclase Es Un tipo de la
superclase (p.ej: PagoACrdito es un tipo de
Pago).

Agregacin

El elemento destino forma parte del elemento


fuente. Dicha relacin puede romperse sin
restricciones.
Es un tipo de asociacin del todo con las partes.
Se representa con una lnea continua, con un
diamante en la clase que representa el todo y una
flecha en la parte.

Composicin

El elemento destino forma parte del elemento fuente. Dicha relacin slo
puede romperse cumpliendo unas restricciones determinadas.

En una composicin, los objetos componentes no tienen vida propia, esto


es, que cuando se destruye el objeto compuesto tambin se destruyen las
partes. Esta particularidad no se cumple necesariamente en la agregacin.
Adems, un objeto componente slo puede formar parte de un objeto
compuesto y no puede pasar de un objeto compuesto a otro.

En UML, una agregacin por valor o composicin las partes son atributos
del todo quedndose representado con el diamante relleno.

Dependencia

La clase A depende de la clase B y puede verse afectada si se producen


cambios en la clase B.

Una relacin de dependencia muestra, por ejemplo, que una clase hace referencia
a otra clase. Cuando hay dependencia entre dos clases, no se aaden atributos de
instancia a la otra clase; lo cual es una diferencia respecto a la asociacin. Cuando
no hay una relacin de asociacin o de generalizacin se utiliza normalmente la
dependencia para el resto de relaciones.

Las dependencias se suelen emplear con los paquetes.

En UML se representan mediante una lnea a trazos acabada en flecha abierta.

Una dependencia es una relacin de uso en la que un cambio en uno de los


trminos -por ejemplo, una clase puede afectar a otro (otra clase)

Realizacin

La relacin de realizacin conecta un elemento del modelo,


tal como una clase, con otro elemento, como un interfaz,
especificando su comportamiento pero no su estructura o
implementacin.
La realizacin se indica con una flecha de lnea discontinua
con una punta de flecha hueca cerrada. Es similar al smbolo
de generalizacin con una lnea discontinua, para indicar
que es similar a un tipo de herencia con relacin de
dependencia.

Comentario

Un comentario es una anotacin asociada a un


elemento, carece de significado directo, pero
muestra una informacin significativa para el que
ha realizado el modelado. En UML, el comentario
se pone dentro de un rectngulo con un vrtice
doblado, enlazado con una lnea discontinua al
cual se refiere.

Estereotipo

En el apartado del nombre de la clase,


en la parte superior, se puede indicar un
estereotipo, tales como <<anlisis>>,
<<diseo. >>, <<interface>>, etc.

Pasos para el diagrama de


clases

Identificar las clases.


Mostrar los atributos y operaciones
Dibujar asociaciones
Etiquetar asociaciones y en caso
necesario los roles
Indicar multiplicidad
Dibujar fechas de direccin

Ejemplo Agenda Telefonica

Ejemplo de Sistema de Laboratorio


Clnico

Ejemplo de Sistema de Bienes


Raices

Ejemplo. Persona