Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DE ESCRITORIO
UNIDAD Nº I
Desarrollo de aplicaciones con WPF
1 www.iplacex.cl
SEMANA 1
Consideraciones previas
2 www.iplacex.cl
Introducción
A lo largo de los años, los usuarios nos hemos acostumbrado y adaptado a la utilización
de aplicaciones en distintos dispositivos, como consolas de video juegos, teléfonos
móviles y computadores.
Estos últimos (computadores) siguen quizás siendo los dispositivos más utilizados a nivel
global, trayendo consigo la implementación de nuevas soluciones capaces de cubrir
nuestras necesidades con sus funcionalidades.
Aunque crear estas aplicaciones no es tarea fácil. Existen muchos factores para tener en
cuenta durante todo el proceso de desarrollo, como la expertis que tenga el usuario en el
uso de aplicaciones; interacción con programas, sistemas y/o arquitecturas diferentes que
pueda llegar a tener el software; implementación de validaciones y seguridad en los datos
sensibles, lenguajes de programación; gestores de base de datos involucrados, entre
otros. La lista es muy grande, y entre más complejo sea el proyecto, son más las aristas
para considerar.
3 www.iplacex.cl
Ideas fuerza
• GUI: Graphic User Interface o GUI, representa la utilización de imágenes, textos y
objetos para la representación de información y acciones que puede realizar un
usuario dentro de una aplicación.
4 www.iplacex.cl
Desarrollo
1. Aplicaciones en el mundo
En las primeras décadas de los ordenadores electrónicos, entre los años 70 hasta
mediados de los 80, las empresas tecnológicas como IBM creaban sus propios
dispositivos de cómputo y sistemas operativos. Esto dificultaba el desarrollo de
aplicaciones debido a que todos los sistemas operativos funcionaban de forma distinta,
generando que aplicaciones que fueron desarrolladas para un sistema A no puedan ser
utilizados en un sistema B. Además, todos estos programas solo podían ser ejecutados y
utilizados por medio de consola de comandos, lo que dificultaba aún más su
implementación y aprendizaje para el usuario.
Fue gracias a la aparición de sistemas operativos con una interfaz gráfica, como Windows
o MacOS a finales de los años 80 y principios de los 90, que los ordenadores comenzaron
a convertirse en dispositivos cada vez más accesibles y funcionales para todo tipo de
usuario. Aunque aún seguía habiendo un problema: mayor parte de los programas solo
funcionaban para el sistema operativo para el cual fueron diseñados.
Con la aparición de lenguajes de programación como Java (diseñado por James Gosling
en 1990 en Sun Microsystems) y C# (desarrollado por Anders Hejlsberg en el 2000 en
Microsoft) es que este panorama fue cambiando. Este tipo de lenguajes permitieron a los
desarrolladores poder escribir el código fuente de una app o programa solo una vez, pero
con la posibilidad de poder ser ejecutado en diversos ambientes.
En el caso de Java gracias a JVM (Java Virtual Machine) y el JRE (Java Runtime
Environment); y el caso de C# debido a que es compilado a CIL (Common Intermediate
Language) e interpretado por el Common Language Runtime (CLR).
Esta ventaja presentada por estas nuevas tecnologías y lenguajes de programación
propiciaron también la evolución de las interfaces de usuario de los sistemas operativos y
de los programas y aplicaciones que pueden ser ejecutadas dentro de estos.
5 www.iplacex.cl
diferencia de hace unas 4 décadas, que la mayoría de los programas funcionaban en
líneas de comandos y hasta en tarjetas perforadas.
En la actualidad, gran parte del software que es desarrollado es pensado para ser
escalado a ser utilizado por múltiples tipos de dispositivos. Esto ha generado que las
interfaces de usuario estén tomando un aspecto más parecido a aplicaciones web, como
son el caso de Netflix o Steam.
Steam en Windows 10
6 www.iplacex.cl
Netflix en Windows 10
SABIAS QUE
En los últimos años, las interfaces de usuario se han empezado a diseñar bajo la
filosofía de UX (User eXperience). Esta toma en consideración aspectos psicológicos
de los usuarios para generar una interfaz de usuario funcional, tomando en cuenta
colores, distribución y tamaños de texto, familiaridad con un producto o marca, entre
otros tópicos.
7 www.iplacex.cl
2. Que es C#
Actualmente, de acuerdo con la encuesta “The State of the Octoverse” realizada por
GitHub el año 2021, C# es uno de los lenguajes de programación más populares a nivel
global.
Fuente: https://octoverse.github.com
Todo programa desarrollado con C# posee un solo punto de entrada único y principal
llamado Main(), siendo este el primer método en ser ejecutado. Antes de C# 9, esta era la
forma en que se establecía el método Main():
8 www.iplacex.cl
A partir de C# 9, es posible omitir el método Main() y escribir y ejecutar código
directamente en un archivo, como en el siguiente ejemplo:
Todos los programas desarrollados en C# constan de uno o más archivos, los cuales
contienen uno o más namespaces, que a su vez contienen las clases, interfaces
(interface), enumeraciones (enum) y estructuras (structs) que sean necesarios para el
programa.
Polimorfismo es una palabra griega que significa “con muchas formas” y que hace
referencia a la capacidad de los objetos (instancias de una clase) de poder convertirse en
un nuevo objeto sin cambiar su esencia (métodos, clases, propiedades). Existen tres tipos
de polimorfismo:
También, es posible modificar el comportamiento de este método en cada uno de los hijos
por medio de la directiva override:
Al transformar el método Ladrar() del padre a tipo virtual, permitirá sobrescribirlo en las
clases hijas. Al ser ejecutado, entonces se mostrarán los mensajes modificados para
cada clase hija.
11 www.iplacex.cl
• Polimorfismo por abstracción
En este caso, para poder definir métodos abstractos dentro de una clase, esta también
debe ser abstracta. Para el nuevo método solo se crea la firma del método, pero no se
realiza su implementación, ya que esta se dará dentro de las clases hijas
sobrescribiéndolo.
12 www.iplacex.cl
Finalmente, al ejecutar el código, se deberá invocar al método Comer() para que pueda
ser mostrado por pantalla.
13 www.iplacex.cl
• Polimorfismo por interface
Este tipo de polimorfismo está basado en “contratos”, los que establecen que acciones
puede realizar un clase que lo implemente. Por lo general, las interface serán utilizadas
para definir métodos de administración de datos (agregar, listar, eliminar, etc).
14 www.iplacex.cl
Siguiendo con el ejemplo de Perro, esta clase se transformará en una interface y se
especificarán dos métodos: Ladrar() y Comer(). Recuerda que en las interfaces se
escribe solo la firma del método.
15 www.iplacex.cl
Para finalmente, realizar la ejecución del código. A diferencia de los casos anteriores,
aquí se debe definir el array de Perro como IPerro, ya que se está trabajando con una
interface.
16 www.iplacex.cl
Logrando como resultado al ejecutar:
17 www.iplacex.cl
2.3 C# como lenguaje multiparadigma
Según la RAE, una de las definiciones de paradigma es que es una “teoría o conjunto de
teorías… que suministran la base y modelo para resolver problemas…”.
18 www.iplacex.cl
Para poder leer estos objetos, se crearía una clase Order con tres propiedades y un
método que permita obtener los datos la matriz de objetos JSON.
Si quisiésemos contar cada país que se repite en la propiedad ShipCountry y listarlos por
pantalla, con código imperativo (el código que escribiríamos normalmente entregando
instrucciones paso a paso de cómo se trabajará con los datos) se vería tal que así:
19 www.iplacex.cl
En donde, se crea un método GetReportsImp() que retorna una lista con un diccionario de
tipo string e int, y que recibe como parámetro de entrada una lista de años de tipo int.
Dentro del método, se realizarán dos foreach: el primero para recorrer los años ingresados
y el segundo para recorrer los objetos JSON y retornar el contador de países, con el
nombre y la cantidad de coincidencias. La forma de ejecutarlo serán las siguientes
respectivamente:
Se crea una variable de tipo int array (es decir, una matriz de números), y por medio de
un foreach, por cada diccionario retornado desde el método anteriormente descrito en
base a la lista de años, se imprimirán por pantalla el nombre del pais y el contador.
20 www.iplacex.cl
Por el contrario, si quisiésemos realizar la misma tarea, pero con código orientado al
paradigma funcional, las instrucciones serían las siguientes:
El método sigue retornando una lista con un diccionario de tipo string e int. Sin embargo,
recibe dos parámetros de entrada: una lista de ordenes (que viene desde el archivo de
objetos JSON) y una lista de años. Para este nuevo método, se implementó LINQ o
Language-Integrated Query para retornar una lista de los países y la cantidad de
coincidencias.
Al igual que con el ejemplo de código imperativo, se debe crear una matriz de tipo int
para los años, pero en este caso dentro del foreach al invocar a la función
GetReportsFunc(), se reciben dos parámetros de entrada: el primero correspondiente a
la lista de objetos JSON que se obtiene directamente con el método GetOrders(), y el
segundo a la lista de años creada. Un segundo foreach será utilizado para listar por
pantalla.
21 www.iplacex.cl
La gran diferencia entre los ejemplos mostrados anteriormente radica en la cantidad de
instrucciones dadas dentro de los métodos. Para el primer caso, fueron necesarios dos
ciclos foreach para poder obtener todos los datos necesarios a guardar dentro del
diccionario de datos. En el segundo caso, con la implementación de LINQ, se agrupan los
registros en base a la propiedad ShipCountry en donde el año de la orden sea igual a
alguno de los años de la colección ingresada, para finalmente retornar una lista que
también contiene un diccionario de datos. Esto debido a que LINQ puede leer los datos
directamente desde diversos tipos de estructuras como objetos JSON, manifiestos XML,
bases de datos, matrices, entre otros.
MATERIAL COMPLEMENTARIO
Por lo general cuando programamos, no nos fijamos en las directrices y normas que se
establecen para cada lenguaje de programación. Estas buscan facilitar la lectura,
documentación, revisión y mantenibilidad del código para los mismos desarrolladores que
diseñaron la aplicación y para los que interactúen con él a futuro.
22 www.iplacex.cl
C# no es excepción a esta regla. Teniendo en cuenta que este lenguaje es posible
implementarlo con varios paradigmas, es esencial la incorporación de estas reglas para
mantener claridad en el código. Por convención, los programas escritos en C# utilizan
“PascalCase” para definir nombres de tipo, namespaces y cualquier tipo de miembro de
código que sea público.
23 www.iplacex.cl
• Private or internal: Se debe usar _ (guion bajo) cuando se asignen campos
de tipo private o internal en el nombre de estos.
24 www.iplacex.cl
En caso de el campo private o internal sean static o thread, se debe usar s_ y t_
respectivamente.
SABER MÁS
25 www.iplacex.cl
Como previews. Por consecuencia, estaremos utilizando C# 10.0 y .NET 6.0 durante el
transcurso de esta asignatura.
SABER MÁS
Si quieres conocer cuáles son las nuevas características y mejoras que incluye la
versión 10 de C#, puedes visitar el siguiente link: What’s new in C# 10.
3. Visual Studio
Existen ciertos lenguajes en los cuales es posible trabajar sin la necesidad de “plantillas”
que faciliten el desarrollo de una aplicación, como por ejemplo en PHP, que se pueden
definir variables que pueden contener cualquier tipo de dato. Sin embargo, esto puede
conllevar a que, al momento de realizar el escalamiento del proyecto, se genere un
26 www.iplacex.cl
desorden en el mismo o que también se generen problemas de seguridad al no contar con
plantillas predefinidas y que reciben una cierta cantidad y tipos de datos.
Para esto, existen las clases. Las clases son una plantilla que es utilizada para generar
instancias de objetos y que contengan la misma estructura base, pero con distintos datos
asociados.
Cada uno de estos objetos poseen propiedades y métodos. Las propiedades son las
características que contiene un objeto, con un tipo de dato en particular (string, int, array,
etc) y conteniendo un valor asociado al tipo de dato (cadena de texto, números,
colecciones y matrices, etc). Los métodos, por otro lado, serán los entes encargados de
realizar acciones con estos datos o con el objeto como tal.
En C#, estaremos utilizando clases, propiedades y métodos, con el fin de establecer una
plantilla y funcionalidades dentro de cada objeto.
27 www.iplacex.cl
Conclusión
Dentro de estos entornos de desarrollo, podemos encontrar diversos lenguajes con los
que trabajar, como es el caso de Visual Studio Community y C# respectivamente, los
cuales serán parte de las herramientas y tecnologías que estaremos utilizando a lo largo
de la asignatura para crear aplicaciones de escritorio con WPF.
28 www.iplacex.cl
Bibliografía
C# Documentation
https://docs.microsoft.com/en-us/dotnet/csharp/
C# Coding Conventions
https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-
conventions
C# in 100 Seconds
https://www.youtube.com/watch?v=ravLFzIguCM&t=2s
El concepto de IDE
https://www.redhat.com/es/topics/middleware/what-is-ide#ide-conocidos
29 www.iplacex.cl
30 www.iplacex.cl