Está en la página 1de 30

PROGRAMACIÓN DE COMPONENTES

DE ESCRITORIO
UNIDAD Nº I
Desarrollo de aplicaciones con WPF

1 www.iplacex.cl
SEMANA 1

Consideraciones previas

Alineación Curricular del Material de Estudio

El contenido que se expone a continuación está ligado a la siguiente unidad de


competencia:

Programar una aplicación de escritorio, según requerimientos de la empresa.

Sobre las fuentes utilizadas en el material


El presente Material de Estudio constituye un ejercicio de recopilación de distintas fuentes,
cuyas referencias bibliográficas estarán debidamente señaladas al final del documento. Este
material, en ningún caso pretende asumir como propia la autoría de las ideas planteadas. La
información que se incorpora tiene como única finalidad el apoyo para el desarrollo de los
contenidos de la unidad correspondiente, respetando los derechos de autor ligados a las ideas e
información seleccionada para los fines específicos de cada asignatura.

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.

Durante esta primera semana de la asignatura, nos centraremos en ver en más


profundidad que son las aplicaciones de escritorio; ejemplos de este tipo de programas,
como fueron desarrollados y con que tecnologías. Además, conocerás el lenguaje de
programación e IDE a utilizar en la asignatura.

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.

• Aplicación: Software o programa capaz de facilitar la realización de una tarea o


apoyar procesos y acciones de los usuarios.

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.

1.1 Aplicaciones de escritorio

Una aplicación de escritorio es un programa capaz de ser ejecutado en un ordenador para


realizar una o varias tareas, como ver videos por medio de un reproductor de videos o
buscar algo por internet por medio un buscador.

La gran mayoría de las aplicaciones de escritorio, y en general todo tipo de aplicaciones,


necesitan del conocimiento del usuario para poder realizar ciertas tareas como la conexión
en redes privadas, y de permisos especiales como pueden ser el acceso a la cámara o
micrófono del dispositivo. Permiten a los usuarios realizar acciones por medio de
interfaces gráficas completamente funcionales, simples y fáciles de aprender y utilizar; a

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

Sin embargo, siguen existiendo aplicaciones que mantienen el formato de “escritorio”,


como por ejemplo el mismo Microsoft Word. El cómo se verá y construirá finalmente la
app dependerá de los requerimientos técnicos disponibles y también de los requerimientos
del cliente.

Aunque durante el transcurso de esta asignatura no nos centraremos en el desarrollo de


aplicaciones multiplataforma per se, es necesario contar con un contexto global de
aplicaciones y tecnologías que permitan el desarrollo de estas. Una de estas tecnologías
es el lenguaje de programación C#, el cual veremos un poco más en profundidad en el
siguiente punto del material.

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#

C# es un lenguaje de programación creado a principios del siglo XXI en Microsoft por


Anders Hejlsberg. Fue diseñado teniendo como inspiración otros lenguajes de
programación como Java, C y C++, y puede ser utilizado para el desarrollo de
prácticamente cualquier tipo de software, como aplicaciones web con Blazor, aplicaciones
móviles cross-platform con Xamarin, video juegos con el framework de Unity, aplicaciones
de escritorio con el framework de .NET Core, aplicaciones en la nube con Azure, entre
otro tipo de programas.

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

2.1 Estructura general de un programa en C#

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.

2.2 Polimorfismo y herencia

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:

• Polimorfismo por herencia: es el más común y permite a una clase hija


heredar métodos y atributos desde una clase padre, pero no viceversa.
9 www.iplacex.cl
10 www.iplacex.cl
En el ejemplo anterior, tenemos a la clase Perro, la cual actúa como clase padre. Las
clases Chiguagua y Bulldog son las clases hijas. Esto les permite heredar el método Ladrar
presente en la clase padre, para luego, cada vez que son instanciadas poder invocarlo y
utilizarlo, en este caso, para mostrar un mensaje por pantalla.

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

Este tipo de polimorfismo se da por medio de la implementación de clases abstractas. Una


clase abstracta es aquella clase que posee comportamientos definidos pero que aún no
han sido implementados, similar a como actúa una interface.

Siguiendo con el ejemplo anterior, vamos a implementar un comportamiento (método) que


permita comer al perro.

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.

Luego, se debe realizar la implementación de esta interface en las clases Chiguagua y


Bulldog

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:

Si te fijas, las formas de poder implementar el polimorfismo llegan al mismo resultado.


Sin embargo, dependerá del contexto de desarrollo de una app la forma de polimorfismo
a aplicar.

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…”.

En el ámbito de la programación también existen paradigmas y también buscan solucionar


problemas. Estos modelos están asociados a los lenguajes de programación y permiten a
los desarrolladores contar con directrices, reglas y convenciones para considerar durante
el proceso de desarrollo de un software o aplicación.

Bajo lo anterior, C# cae dentro de la categoría de lenguaje de programación


multiparadigma. Es posible desarrollar aplicaciones con paradigmas como POO
(programación orientada a objetos), declarativa, imperativa, funcional y orientado a
componentes; mejorando la versatilidad del lenguaje y dando la posibilidad de incluso
poder combinar estos para robustecer el código. Además, algunos paradigmas permiten
realizar acciones de una manera más rápida que otros.

Veamos el siguiente ejemplo, en donde listaremos un contador de coincidencias utilizando


C# con paradigma imperativo y funcional, en base a la siguiente matriz de objetos JSON.

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.

La forma de ejecutarlo y resultado esperado son los siguientes respectivamente:

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.

Aunque ambos códigos llegan al mismo resultado, la cantidad de instrucciones ejecutadas


reduce el tiempo de respuesta, la lectura del código y la mantención de este,
transformándolo en una ventaja en el desarrollo de aplicaciones con C#.

MATERIAL COMPLEMENTARIO

El código de este ejemplo lo encontrarás como material complementario dentro de


esta primera semana. LINQ lo verás en más profundidad en la segunda unidad al
trabajar
2.2 con base
Estándares dede datos.
nomenclatura de C#

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.

A continuación, veremos algunas convenciones a tener en consideración durante el


desarrollo de aplicaciones:

• Nombre de interfaces: Los nombres de clases de tipo interface empiezan


con una I (i latina mayúscula).

• Pascal Casting: Al crear el nombre de class, record o struct, se debe


utilizar la primera letra en mayúscula, y si el nombre posee más de dos
palabras, la primera letra de cada palabra también debe llevar mayúscula.

• Public types: Cuando se nombre cualquiera de los siguientes tipos como


public: campos, propiedades, eventos, métodos y funciones locales se
debe usar Pascal Casing.

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

En C# existen muchas más convenciones aplicables a código, operadores de este y


también a comentarios y abarcarlos todos en este archivo es difícil. Si quieres conocer
más convenciones, reglas y normas de nomenclatura en C#, puedes visitar el
Lasiguiente
versión más actual
link C# de C#
Coding es la número 11, lanzada en 2022 para el framework de
Conventions
.NET 7.0. Sin embargo, estas aún están bajo procesos de testing y solo se encuentran

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

Un IDE (Integrated Development Environment por sus siglas en inglés), es un sistema de


software especializado en el diseño y en el desarrollo de aplicaciones para diversas
plataformas. Este proceso es facilitado gracias a la incorporación de herramientas gráficas
como el editor de código fuente, el compilador local y un depurador, entre otras
características.

Este tipo de programas permite el desarrollo de aplicaciones en múltiples lenguajes de


programación y tecnologías, facilitando así el diseño de aplicaciones entre ambientes
distribuidos, como lo permiten los IDEs Apache NetBeans e IntelliJ.

Durante el transcurso de la asignatura, estaremos utilizando Visual Studio Community


2022 como entorno de desarrollo, ya que nos permitirá trabajar con C# como lenguaje de
programación y crear aplicaciones de escritorio con WPF (Windows Presentation
Foundation), además del trabajo con bases de datos que veremos en la segunda unidad.

Opcionalmente, si sus ordenadores no poseen la potencia necesaria para ejecutar este


programa (Visual Studio Community 2022), podrán utilizar Visual Studio Code, aunque no
es recomendable ya que este no ofrece todas las prestaciones en interfaz gráfica como si
lo hace el IDE mencionado anteriormente.

4. Clases, métodos y propiedades (repaso)

Desarrollar una aplicación no es tarea fácil. Se deben considerar aspectos como el


ambiente en donde se ejecutará, si necesita ser integrado con otras aplicaciones ya
existentes, el nivel de complejidad, tecnologías a utilizar… en fin, son muchas las aristas
a tener en consideración. Uno de estos aspectos, se encuentra relacionada al nivel de
dificultad que pueda llegar a tener el código al ser escrito.

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

Los avances tecnológicos en la capacidad de cómputo de ordenadores, velocidades de


respuestas, monitores y pantallas con colores cada vez más reales, han propiciado un
avance en cómo son construidas y mostradas al usuario las interfaces de los programas
y de los mismos sistemas operativos.

Esta tarea de desarrollo de aplicaciones con interfaces de usuarios complejas, no serían


fáciles de llevar a cabo sin programas como los IDEs que contienen colecciones de
distintas herramientas capaces de simplificar el proceso de desarrollo, no solo de
programas de escritorio, si no que de prácticamente cualquier tipo de aplicació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

Microsoft Windows Guide: History, Origin and More


https://history-computer.com/microsoft-windows-guide/

C# Documentation
https://docs.microsoft.com/en-us/dotnet/csharp/

C# identifier naming rules and conventions


https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/identifier-
names

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

C# Development: The Complete Guide to Getting Started


https://www.trio.dev/blog/csharp-development-guide

El concepto de IDE
https://www.redhat.com/es/topics/middleware/what-is-ide#ide-conocidos

29 www.iplacex.cl
30 www.iplacex.cl

También podría gustarte