Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Elemento de Competencia 3 - Manejo - Del - Lenguaje - Programacion - C#
Elemento de Competencia 3 - Manejo - Del - Lenguaje - Programacion - C#
Tutor:
JOSE OMAR MAYORGA
IBAGUE
2016
INTRODUCCION
El segundo elemento de competencia hace referencia al desarrollo de interfaces con
XAML, Este lenguaje declarativo es aplicado en el modelo de programacin.NET
Framework tambin es utilizado por diversas tecnologas como la vista en el elemento
de competencia 1, es decir, Windows Presentation Fundation (Fundacin de
presentacin de Windows) (WPF).
Se puede afirmar que los avances diarios que sufre la tecnologa son mayores y visto
desde la perspectiva el lenguaje XAML para lograr interfaces de usuario demanda
independencia en los dispositivos, y la utilizacin en su entorno
Los lenguajes dinmicos proporcionan interfaces amigables con el usuario que
facilitan su utilizacin y entre estos lenguajes est el XAM (Extensible Aplicacin
Markup Language) Lenguaje marcado o de marcacin de aplicaciones extensibles.
OBJETIVOS
OBJETIVO GENERAL
Conocer el lenguaje declarativo aplicado al modelo de programacin.NET llamado
XAML y aplicarlo para el desarrollo de aplicaciones con la tecnologa (WPF).
.
OBJETIVOS ESPECIFICOS
crear
Usar una amplia variedad de controles que se pueden utilizar en las interfaces de
usuario de una aplicacin, que permiten de manera fcil su manejo y aumentan su
versatilidad.
Brindar de manera precisa y clara tanto para pc como para telfono los controles,
Namespaces,
eventos,
Code
Behind
el
diccionario
de
recursos
Las
Adaptar correctamente Code Behind que permiten asociar los archivos de cdigo
con los archivos de marcado, desde el lado archivo de marcado.
Sabemos tambin que una clase encapsula los atributos de los objetos que
describen y los mtodos para manipularlos. Pues bien cada mtodo consta de:
Sentencias a ejecutar.
Definiciones y declaraciones.
using System:
La directiva using System permite usar miembros de este espacio de nombres sin
poner la palabra System delante.
Si no se escribe esto sera necesario escribir la instruccin:
System.Console.WriteLine("PRIMER PROGRAMA!");
Sintaxis:
Como declarar una variable con tipo de dato String:
SINTAXIS: String <variable>;
Ejemplos:
String nombre;
String apellido;
String sexo;
String estado_civil;
Declaracin de datos enteros:
int <variable>;
Veamos el ejemplo anterior le aadiremos un atributo ms el cual ser la edad,
entonces
nos quedara as:
int edad;
Objetc Persona;
Persona representa un conjunto de atributos.
Generalmente las variables se inicializan a travs de un constructor, con valor
inicial en 0;
int suma;
suma=int.parse(n1)+int.parse(n2);
Ingresamos los mismos valores entonces el resultado nos dara asi: 2+3=5 por lo
que suma captura el valor de 5 de la misma manera seria para convertir los otros
tipos siempre partiendo de una cadena de texto o String.
Nota: cuando se captura datos por medio de ReadLine, los datos son de tipo
String, por lo Que tenemos que convertir esos datos a nmeros, para ello se hace
uso de parse.
CLASES
Clases en C#
Una clase es un tipo de dato por referencia que est compuesta bsicamente por
campos y mtodos (aunque ms adelante veremos otros elementos integrales de
esta construccin). Adems, si de tipos de datos por referencia se trata, la clase
es la construccin ms usada de todas (esto se ve en el volumen de definiciones
que componen la biblioteca de .NET), y los mismos tipos personalizados que
puede crear el propio programador a partir de un modelo generado a partir del
mundo del problema.
Por otro lado, a una clase la podemos ver como un plan de diseo o molde del
cual se pueden instanciar o crear objetos particulares para interactuar a travs de
mensajes con otros objetos de otras clases, adems compartir informacin
mutuamente o en un sentido en particular. En la Figura 1 se puede apreciar el
ejemplo de la clase car, y que a partir de este molde o plantilla se puede crear
objetos con caractersticas particulares: color, modelo, etc.: polo, mini, y beetle,
por ejemplo.
Mtodos
Propiedades
ndices
Campos
Constructores
Operadores sobrecargados
Tipos anidados (por ejemplo una clase anidada)
Un finalizador.
Cuando tengamos tipos de datos por referencia definidos, en este casos una o
ms clases, lo que podemos hacer enseguida es crear objetos para aprovechar
las capacidades que provee el tipo de dato.
La instanciacin o creacin de objetos se logra a travs del asignador de memoria
new (operador de instanciacin) As:
Cliente objetoCliente1 = new Cliente();
O en otro caso, donde sea necesario, slo se realiza la definicin del tipo de dato
del identificador:
Cliente objetoCliente2;
A razn de que las variables slo son referencias hacia los espacios de memoria
que contienen los datos, podemos hacer que varias variables apunten a la misma
direccin. Por ejemplo:
Cliente objetoCliente3 = new Cliente();
Cliente objetoCliente2 = objetoCliente3;
objetoCliente2 y objetoCliente3 son referencias al
consecuencia, apuntan a la misma direccin de memoria.
mismo
objeto,
en
Concepto de Herencia
La herencia es sinnimo de reusabilidad. A travs de la herencia podemos definir
un nuevo tipo de dato por referencia a partir de uno ya existente. Ms
tcnicamente, partimos de la existencia de un tipo de dato base del cual
derivamos datos y comportamiento, al producto de esta operacin -derivacin-, la
llamamos clase derivada.
La declaracin de una clase derivada se lleva a cabo as:
SENTENCIAS
Sentencias de Seleccin
Las sentencias de seleccin alteran el flujo de control o de ejecucin del programa. En
C# existen diferentes construcciones que permiten llevar a cabo esta tarea. Se
clasifican
en:
Sentencias de seleccin:
if
switch
Operador Condicional ternario (?:)
Sentencias de iteracin o de ciclo:
while
do..while
for
foreach
La sentencia if
La sentencia if ejecuta el bloque de sentencias que parte de su construccin s y slo s
la evaluacin de la expresin booleana del encabezado da como resultado true.
Por ejemplo en,
if (Math.PI > Math.E)
Console.WriteLine ("Math.PI es mayor que Math.E");
la segunda sentencia se ejecuta siempre y cuando la evaluacin de Math.PI >
Math.E d como resultado lgico booleano true. De lo contrario se continua con la
siguiente sentencia inmediata.
Esta sentencia puede contener una o ms sentencias dentro de un bloque de llaves de
apertura ({) y de cierre (}). As:
if ( Math.PI > Math.E )
{
Console.WriteLine ("Math.PI es mayor que Math.E");
Console.WriteLine ("Otra sentencia ms");
}
4.2 La clusula else
La clusula else es el camino alterno que se toma en caso que la evaluacin de la
expresin
de
la
sentencia if d
como
resultado false.
menor
que
Math.E");
Debido a la flexbilidad del lenguaje, es posible anidar una sentencia if dentro de otra, o
dentro
de
una
clsula else.
Se recomienda el uso de identacin y el uso de llaves de cierre y apertura para
organizar el cdigo y hacerlo ms legible. De lo contrario caemos en el problema del
else suelto:
if (codigo == 201166771)
if ( promedio == 4.7 )
Console.WriteLine ("Se ha ganado un bono de 0.1");
else
Console.WriteLine ("El cdigo ingresado no se ha encontrado.");
Este problema empieza por la falta de organizacin del cdigo fuente. La
clusula else no hace parte del cuerpo del if externo -if (codigo == 201166771)- sino del
anidado -if (promedio == 4.7)-. Para evitar este inconveniente, la recomendacin es
usar
las
llevas
de
apertura
y
cierre;
as:
if (codigo == 201166771)
{
if ( promedio == 4.7 )
Console.WriteLine ("Se ha ganado un bono de 0.1");
}
else
Console.WriteLine (numeroDeCarta);
}
}
Observemos que switch (numeroDeCarta) se evala lleva al caso correspondiente de
los 3 disponibles (13, 12, y 11); aunque tambin se ha especificado que en caso de no
darse ninguno de los anteriores, default es el caso por defecto que se evala.
La sentencia switch acepta expresiones que se evalen a valores de tipos de
datos bool, enum,
y string.
Adicionalmente, en cada caso candidato, se puede especificar sentencias de salto,
como
son
las
siguientes:
Dado que una implementacin requiera que varios casos (en se conocen como: switch
sections) contengan el mismo cdigo, stos se deben enlistar de manera secuencial, y
poner la pieza de cdigo comn al final junto con la sentencia de salto break. Ejemplo:
switch(numeroDeCarta)
{
case 13:
case 12:
case 11:
Console.WriteLine ("Figuras");
break;
default:
Console.WriteLine ("Carta Numeral");
break;
}
La sentencia de salto break en el caso final o en la sentencia default, es opcional.
Sentencias de Iteracin
Las sentencias de iteracin son tiles para evitar la escritura de sentencias que
requieren ser ejecutadas mltiples veces. C# a travs de las sentencias de
iteracin while, do-while, for, y foreach logra llevar a cabo este cometido.
Ciclos while y do-while
El ciclo while repite un conjunto de sentencias un nmero determinado de veces (a
veces requerida, infinitamente) mientras que la expresin booleana del encabezado
sea true. Antes de entrar al cuerpo de la sentencia while, se prueba que la expresin
booleana
sea
verdadera.
Pasemos
al
siguiente
ejemplo:
class PruebaWhile
{
static void Main()
{
int n = 1;
while (n <= 5)
{
Console.WriteLine ("Valor actual de n es {0}", n);
++n;
}
}
}
}
Cualquiera de las partes del encabezado de la sentencia repetitiva for puede ser
omitido.
As:
int i = 0, fibonacciPrevio = 1, fibonacciActual = 1;
for (; i < 10;)
{
Console.WriteLine (fibonacciPrevio);
int nuevoFibonacci = fibonacciPrevio + fibonacciActual;
fibonacciPrevio = fibonacciActual;
fibonacciActual = nuevoFibonacci;
++i;
}
Este
cdigo
generar
los
mismos
resultados
que
el
anterior
(de
arriba).
Sentencia foreach
Esta sentencia es til para recorrer (equivalente a iterar) arreglos y colecciones (clases
que implementen las interfaces System.Collections
.IEnumerable [8] o System.Collections.Generic.IEnumerable [9]).
Su utilidad reside, en la lectura de los contenidos de arreglos y colecciones, no, para la
modificacin (edicin o eliminacin) de los contenidos de objetos de los tipos
anteriores.
OPERADORES Y TIPOS
Un operador en C# es un smbolo formado por uno o ms caracteres que permite
realizar una determinada operacin entre uno o ms datos y produce un resultado.
A continuacin se describen cules son los operadores incluidos en el lenguaje
clasificados segn el tipo de operaciones que permiten realizar, aunque hay que tener
en cuenta que C# permite la redefinicin del significado de la mayora de los
operadores segn el tipo de dato sobre el que se apliquen, por lo que lo que aqu se
cuenta se corresponde con los usos ms comunes de los mismos:
Operaciones aritmticas
Los operadores aritmticos incluidos en C# son los tpicos de suma (+), resta (-),
producto (*), divisin (/) y mdulo (%) Tambin se incluyen operadores de menos
unario () y ms unario (+)
Relacionados con las operaciones aritmticas se encuentran un par de operadores
llamados checked y unchecked que permiten controlar si se desea detectar los
desbordamientos que puedan producirse si al realizar este tipo de operaciones el
resultado es superior a la capacidad del tipo de datos de sus operandos. Estos
operadores se usan as:
checked (<expresinAritmtica>)
unchecked(<expresinAritmtica>)
Ambos operadores calculan el resultado de <expresinAritmtica> y lo devuelven si
durante el clculo no se produce ningn desbordamiento. Sin embargo, en caso de
que haya desbordamiento cada uno acta de una forma distinta:
Checked provoca un error de compilacin si <expresinAritmtica> es una expresin
constante y una excepcin System.OverflowException si no lo es, mientras que
unchecked devuelve el resultado de la expresin aritmtica truncado para modo que
quepa en el tamao esperado.
Por defecto, en ausencia de los operadores checked y unchecked lo que se hace es
evaluar las operaciones aritmticas entre datos constantes como si se les aplicase
checked y las operaciones entre datos no constantes como si se les hubiese aplicado
unchecked.
Operaciones lgicas
Se incluyen operadores que permiten realizar las operaciones lgicas tpicas: and (&&
y &), or (|| y |), not (!) y xor (^)Los operadores && y || se diferencia de & y | en que
los primeros realizan evaluacin perezosa y los segundos no. La evaluacin perezosa
consiste en que si el resultado de evaluar el primer operando permite deducir el
resultado de la operacin, entonces no se evala el segundo y se devuelve dicho
resultado directamente, mientras que la evaluacin no perezosa consiste en evaluar
siempre ambos operandos. Es decir, si el primer operando de una operacin && es
falso se devuelve false directamente, sin evaluar el segundo; y si el primer operando
de una || es cierto se devuelve true directamente, sin evaluar el otro.
Operaciones relacionales
Se han incluido los tradicionales operadores de igualdad (==), desigualdad (!=), mayor
que (>), menor que (<), mayor o igual que (>=) y menor o igual que (<=)
Operaciones de manipulacin de bits
Se han incluido operadores que permiten realizar a nivel de bits operaciones and (&),
or (|), not (~), xor (^), desplazamiento a izquierda (<<) y desplazamiento a
derecha (>>) El operador << desplaza a izquierda rellenando con ceros, mientras que
el tipo de relleno realizado por >> depende del tipo de dato sobre el que se aplica: si es
un dato con signo mantiene el signo, y en caso contrario rellena con ceros.
Operaciones de asignacin
Para realizar asignaciones se usa en C# el operador =, operador que adems de
realizar la asignacin que se le solicita devuelve el valor asignado. Por ejemplo, la
expresin a = b asigna a la variable a el valor de la variable b y devuelve dicho valor,
mientras que la expresin c = a = b asigna a c y a el valor de b (el operador = es
asociativo por la derecha)
Tambin se han incluido operadores de asignacin compuestos que permiten ahorrar
tecleo a la hora de realizar asignaciones tan comunes como:
temperatura = temperatura + 15; // Sin usar asignacin compuesta
temperatura += 15; // Usando asignacin compuesta
Las dos lneas anteriores son equivalentes, pues el operador compuesto += lo que
hace es asignar a su primer operando el valor que tena ms el valor de su segundo
operando. Como se ve, permite compactar bastante el cdigo.
Aparte del operador de asignacin compuesto +=, tambin se ofrecen operadores de
asignacin compuestos para la mayora de los operadores binarios ya vistos.
Estos son: +=, -=, *=, /=, %=, &=, |=, ^=, <<= y >>=. Ntese que no hay versiones
compuestas para los operadores binarios && y ||.
Otros dos operadores de asignacin incluidos son los de incremento(++) y decremento
(--) Estos operadores permiten, respectivamente, aumentar y disminuir en una unidad
el valor de la variable sobre el que se aplican. As, estas lneas de cdigo son
equivalentes:
temperatura = temperatura + 1; // Sin usar asignacin compuesta ni
incremento
temperatura += 1; // Usando asignacin compuesta
temperatura++;
// Usando incremento
Operador condicional
//tipo adelegado
No se preocupe si no conoce los conceptos de mtodos, propiedades, eventos y
delegados en los que se basa este ejemplo, pues se explican detalladamente en temas
posteriores.
Operaciones con punteros
Un puntero es una variable que almacena una referencia a una direccin de memoria.
Para obtener la direccin de memoria de un objeto se usa el operador &, para acceder
al contenido de la direccin de memoria almacenada en un puntero se usa el operador
*, para acceder a un miembro de un objeto cuya direccin se almacena en un puntero
se usa ->, y para referenciar una direccin de memoria de forma relativa a un puntero
se le aplica el operador
[ ] de la forma puntero[desplazamiento].
sizeof Este operador permite obtener el nmero de bytes que ocuparn en memoria los
objetos de un tipo, y se usa as:
sizeof(<nombreTipo>)
sizeof slo puede usarse dentro de cdigo inseguro, que por ahora basta considerar
que son zonas de cdigo donde es posible usar punteros.
sizeof slo se puede aplicar sobre nombres de tipos de datos cuyos objetos se puedan
almacenar directamente en pila. Es decir, que sean estructuras
Operaciones de creacin de objeto: El operador ms tpicamente usado para crear
objetos es new, que se usa as:
new <nombreTipo>(<parametros>)
Este operador crea un objeto de <nombreTipo> pasndole a su mtodo constructor los
parmetros indicados en <parmetros> y devuelve una referencia al mismo.
En funcin del tipo y nmero de estos parmetros se llamar a uno u otro de los
constructores del objeto. As, suponiendo que a1 y a2 sean variables de tipo Avin,
ejemplos de uso del operador new son:
Avin a1 = new Avin(); // Se llama al constructor sin parmetros de Avin
Avin a2 = new Avin(Caza); // Se llama al constructor de Avin que toma
// como parmetro una cadena
En caso de que el tipo del que se haya solicitado la creacin del objeto sea una clase,
ste se crear en memoria dinmica, y lo que new devolver ser una referencia a la
direccin de pila donde se almacena una referencia a la direccin del objeto en
memoria dinmica. Sin embargo, si el objeto a crear pertenece a una estructura o a un
tipo enumerado, entonces ste se crear directamente en la pila y la referencia
devuelta por el new se referir directamente al objeto creado.
Por estas razones, a las clases se les conoce como tipos referencia ya que de sus
objetos en pila slo se almacena una referencia a la direccin de memoria dinmica
donde verdaderamente se encuentran; mientras que a las estructuras y tipos
enumerados se les conoce como tipos valor ya sus objetos se almacenan
directamente en pila.
C# proporciona otro operador que tambin nos permite crear objetos. ste es
stackalloc, y se usa as:
stackalloc <nombreTipo>[<nElementos>]
Este operador lo que hace es crear en pila una tabla de tantos elementos de tipo
<nombreTipo> como indique <nElementos> y devolver la direccin de memoria en que
sta ha sido creada. Por ejemplo:
stackalloc slo puede usarse para inicializar punteros a objetos de tipos valor
declarados como variables locales. Por ejemplo:
int * p = stackalloc[100]; // p apunta a una tabla de 100 enteros.
Operaciones de conversin: Para convertir unos objetos en otros se utiliza el
operador de conversin, que no consiste ms que en preceder la expresin a convertir
del nombre entre parntesis del tipo al que se desea convertir el resultado de evaluarla.
Por ejemplo, sil es una variable de tipo long y se desea almacenar su valor dentro de
una variable de tipo int llamada i, habra que convertir previamente su valor a tipo int
as:
i = (int) l; // Asignamos a i el resultado de convertir el valor de l a tipo int
Los tipos int y long estn predefinidos en C# y permite almacenar valores enteros con
signo. La capacidad de int es de 32 bits, mientras que la de long es de 64 bits. Por
tanto, a no ser que hagamos uso del operador de conversin, el compilador no nos
dejar hacer la asignacin, ya que al ser mayor la capacidad de los long, no todo valor
que se pueda almacenar en un long tiene porqu poderse almacenar en un int. Es
decir, no es vlido:
i = l; //ERROR: El valor del no tiene porqu caber en i
Esta restriccin en la asignacin la impone el compilador debido a que sin ella podran
producirse errores muy difciles de detectar ante truncamientos no esperados debido al
que el valor de la variable fuente es superior a la capacidad de la variable destino.
Existe otro operador que permite realizar operaciones de conversin de forma muy
similar al ya visto. ste es el operador as, que se usa as:
<expresin> as <tipoDestino>
Lo que hace es devolver el resultado de convertir el resultado de evaluar <expresin>
al tipo indicado en <tipoDestino> Por ejemplo, para almacenar en una variable p el
resultado de convertir un objeto t a tipo tipo Persona se hara:
p = t as Persona;
Las nicas diferencias entre usar uno u otro operador de conversin son:
CONCLUSIONES
Este lenguaje declarativo basado en XML nos permite declarar estructuras de objetos
generalmente visuales pero en realidad, prcticamente podemos instanciar cualquier
objeto desde este lenguaje
RECOMENDACIONES
la extensin de marcado que afecta en mayor medida a la orientacin proporcionada en
este tema es la extensin de marcado StaticResource. La funcin de la extensin de
marcado StaticResource es permitir la factorizacin del XAML en recursos reutilizables
procedentes de un ResourceDictionary XAML.
BIBLIOGRAFIA