Bienvenidos sean a este post, hoy comenzaremos como crear una ventana al mundo.
Si estuvieron siguiendo todos los posts anteriores, habran notado que hasta ahora solo hemos trabajado con codigos que se corren en la consola sin una parte grafica. Cada sistema operativo maneja a la parte grafica con sus propias API. Esto nos lleva tanto si es un proyecto personal, o una empresa, debemos enfocarnos cual sera la plataforma principal para nuestro proyecto. Esto es asi, principalmente porque desarrollar el proyecto para cada plataforma nos va a llevar la misma cantidad de tiempo en cada una. Ya que cada API tiene su propio enfoque y complejidad en cada S.O. Tomemos como ejemplo a .NET Framework para Windows, este nos da una gran mano para poder implementar una aplicacion con GUI (Graphical User Interface) pero si esta misma aplicacion debe correr en otro S.O lo deberan pensar dos veces antes de usarla.
Sin embargo, para soportar multiples S.O se puede utilizar algunas de las API para esto, como por ejemplo GtK, y que nos permitiran implementar una interfaz grafica de manera sencilla. Esto es asi porque nos permiten trabajar mediante una Maquina Virtual, al igual que Java o .Net Core, para entregar una mejor compatibilidad entre las distintas plataformas.
Esto tambien es influenciado por la forma en que se compila. Por ejemplo, en C++ al momento de compilarlo lo hacemos directamente al S.O donde lo hacemos con su codigo maquina. En cambio, lenguajes como Java o el Java de Microsoft (C#) agrega un paso mas llamado Bytecode, esta implementacion es tomada por la maquina virtual y esta creara el codigo maquina para la plataforma que corresponda, generando la llamada portabilidad. Tomemos el caso de Java, su maquina virtual es JVM (Java Virtual Machine). Para poder ejecutar un codigo debemos instalar previamente a esta maquina virtual, esto se hara una sola vez y servira para todos los codigos futuros. Una gran ventaja es que el codigo que hicimos para Linux, correra tambien en Windows, macOs, Android y cualquier otro S.O que tenga a JVM instalado. En cambio, un codigo de C++ debe ser compilado en cada S.O para que pueda ser ejecutado pero este codigo no siempre sera compatible con otros S.O y por lo tanto debamos adaptarlo. Pero una gran desventaja de Java con respecto a C++, es mucho mas lento tanto al compilarlo como ejecutarlo porque C++ trabaja directamente con el equipo sin intermediarios.
Como dijimos anteriormente, al momento de compilarlo en Java se genera un Bytecode el cual, tiene perfectamente detallado que hace cada parte del programa y cuando llega a la JVM, este se encarga de adaptarlo a su respectivo S.O para que ese codigo funcione perfectamente sin problemas.
Por otro lado, si bien C++ es uno o el lenguaje mas diseminado en los S.O, lo cual le da una gran portabilidad pero como comentamos anteriormente para que ese codigo funcione correctamente se debe compilar nuevamente en el equipo donde se ejecutara. Pero un inconveniente de C++ es que no posee de manera nativa la capacidad de manejar una GUI. Por lo tanto, para poder usar la GUI debemos utilizar a la API del S.O, lo cual nos lleva a que debemos modificar el codigo para cada S.O lo cual nos lleva a tener un codigo para cada S.O.
Tomemos como ejemplo que nuestra aplicacion debe correr en Linux, Windows y macOs. Para cada uno de estos debemos tener un codigo para cada API, esto dara como resultado que tendremos tres implementaciones diferentes con el mismo nombre y que hacen la misma tarea. Esto es simillar a cuando descargamos un programa de una pagina web donde cada S.O tiene su propia version, pero existen APIs para poder utilizar la parte grafica entre distintas plataformas pero eso sera un tema que veremos en el proximo post.
En resumen, hoy hemos visto un introduccion al GUI, como se debe usar, como seria la forma mas practica de implementar, como se puede impleentar y sus inconvenientes pero pronto veremos una alternativa. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
