Me 1
Me 1
UNIDAD Nº I
PRINCIPIOS BASICOS DE ANGULAR IONIC NODE JS.
www.iplacex.cl
SEMANA 1
Introducción
www.iplacex.cl 2
Ideas Fuerza
2. Desarrollo Multiplataforma
El desarrollo multiplataforma consiste en la construcción de aplicaciones
que pueda ser ejecutadas en distintos tipos de sistemas operativos ya
sea Windows, Mac OS, Linux, Android, Windows Phone, IOS una de las
ventajas del desarrollo multiplataforma es escribir el código una vez y
luego desplegarlo en la plataforma deseada.
3. Aplicación Híbrida
Una aplicación híbrida es un conjunto de herramientas web utilizadas
para desarrollar aplicaciones nativas orientadas a distintos sistemas
operativos Windows, Mac OS, Linux, Android, Windows Phone, IOS,
evitándonos la tarea de crear una aplicación para cada sistema operativo.
www.iplacex.cl 3
Desarrollo
1. Definición de Multiplataforma:
Por ejemplo, una aplicación multiplataforma puede ejecutarse sin problema alguno, tanto
en Microsoft Windows en la arquitectura x86, como en Linux en la arquitectura x86 y Mac
OS X, ya sea en el PC o sistemas Apple Macintosh basados en x86. En general, una
aplicación multiplataforma se puede ejecutar tanto en todas las plataformas existentes o
como mínimo dos plataformas.
www.iplacex.cl 4
acceder a través de un navegador. Estos son los principales puntos a favor de las
aplicaciones multiplataforma:
Multidispositivo
www.iplacex.cl 5
• Google recomienda las webs adaptativas, ya que estas ofrecen ventajas
considerables en el posicionamiento en buscadores.
Las ventajas de ofrecer aplicaciones o páginas web que sean responsivas conllevan a la
progresiva extinción de las web diseñadas para móviles. La aparición de estas ha
permitido a los usuarios la visualización fácil, rápida e intuitiva de contenidos a los que
hasta entonces solo tenía acceso desde un PC.
www.iplacex.cl 6
2. Soluciones Multiplataforma
¿Qué es Node.Js?
Es una aplicación que puede ejecutarse sin problema alguno, tanto en Microsoft
Windows en la arquitectura x86, como en Linux en la arquitectura x86 y Mac OS X, ya
sea en el PowerPC o sistemas Apple Macintosh basados en x86. En general, una
aplicación multiplataforma se puede ejecutar tanto en todas las plataformas existentes o
como mínimo dos plataformas.
¿Qué es Ionic?
www.iplacex.cl 7
Ionic es un framework para el desarrollo de aplicaciones híbridas, inicialmente pensado
para móviles y tablets, aunque ahora también capaz de implementar aplicaciones web e
incluso dentro de pocas aplicaciones de escritorio multiplataforma. Su característica
fundamental es que usa por debajo Angular 2 y una cantidad de componentes enorme,
que facilita mucho el desarrollo de las aplicaciones.
Se trata de una estupenda herramienta para la creación de aplicaciones sorprendentes,
pensada para obtener resultados de una manera rápida y con una menor inversión
económica, ya que permite crear aplicaciones para distintas plataformas móviles con una
misma base de código.
Angular
De ser una plataforma para la creación de Web Apps, ha evolucionado como motor de
una enorme cantidad de proyectos del ámbito empresarial y de ahí para aplicaciones en
la Web Mobile Híbrida, llevando la tecnología al límite de sus posibilidades.
Es el motivo por el que comenzaron a detectarse problemas en Angular 1, o necesidades
donde no se alcanzaba una solución a la altura de lo deseable.
Entre ellas están las siguientes:
JavaScript:
www.iplacex.cl 8
Para comenzar se encontraron problemas en la creación de aplicaciones debido al propio
Javascript. Es un lenguaje con carácter dinámico, asíncrono y de complicada depuración.
Al ser tan particular resulta difícil adaptarse a él, sobre todo para personas que están
acostumbradas a manejar lenguajes más tradicionales como Java o C#, porque muchas
cosas que serían básicas en esos lenguajes no funcionan igualmente en Javascript.
Ya sabemos que con Angular se lleva al navegador mucha programación que antes
estaba del lado del servidor, comenzando por el renderizado de las vistas. Esto hace que
surjan nuevos problemas y desafíos. Uno de ellos es la sobrecarga en el navegador,
haciendo que algunas aplicaciones sean lentas usando Angular 1 como motor.
Todos esos problemas, difíciles de solucionar con la tecnología usada por Angular 1, han
impulsado a sus creadores a desarrollar desde cero una nueva versión del framework.
La nueva herramienta está pensada para dar cabida a todos los usos dados por los
desarrolladores, llevar a JavaScript a un nuevo nivel comparable a lenguajes más
tradicionales, siendo además capaz de resolver de una manera adecuada las
necesidades y problemas de la programación del lado del cliente.
www.iplacex.cl 9
TypeScript /JavaScript
El 2012 fue el año en que TypeScript apareció (luego de 2 años de desarrollo), una
solución de Microsoft para el desarrollo de aplicaciones con JavaScript a gran escala,
para ellos y para sus clientes. Steve Lucco y un equipo de más de 50 personas que
incluía a Anders Hejlsberg, Lead Architect de C# y creador de Delphi y Turbo Pascal
desarrollaron Typescript en Microsoft, un proyecto que originalmente se conoció como
Strada.
www.iplacex.cl 10
La sugerencia de usar TypeScript para desarrollar en Angular es casi una imposición
porque la documentación y los generadores de código están pensados en TypeScript.
www.iplacex.cl 11
3. Escalabilidad como Objetivo Principal
Node.Js fue formulado para generar un sistema escalable y que tuviese la consistencia
suficiente como para poder generar un elevado número de conexiones de forma
simultánea con el servidor. Generalmente cuando se crea un gran número de conexiones
el rendimiento y la velocidad de las aplicaciones y páginas web se ven perjudicados. Esto
se debe a que la gran mayoría de tecnologías que trabajan desde el lado del servidor
accionan las peticiones de forma aislada y mediante hilos independientes. Por eso,
cuando la cantidad de solicitudes que se hacen van en incremento, los recursos y el
consumo de estos también se incrementan. A este tipo de limitaciones que se generan
en el propio servidor, también es necesario sumar todas aquellas que posee el cliente
(desde la velocidad de su conexión a internet o la memoria RAM de su dispositivo, por
ejemplo). La cantidad de solicitudes, así como los procesos entrantes y salientes se
convierten en uno de los factores limitantes y Node.js ha sido concebido para optimizar
este inconveniente.
De este modo las peticiones que se vayan generando reciben un tratamiento en forma
de eventos y pertenecen a este único bucle.
Por este motivo los rasgos de asincronía y el uso de eventos en JavaScript resultan tan
interesante para los creadores de Node.Js. Este nuevo replanteamiento proporciona un
lenguaje con la capacidad de gestionar una gran cantidad de solicitudes y conexiones
con la máxima eficiencia.
www.iplacex.cl 12
No es extraño entonces que se haya convertido en una de las alternativas más utilizadas
por todo tipo de desarrolladores y aplicaciones que requieren la gestión de una gran
cantidad de conexiones simultáneas. Algunos ejemplos son aplicaciones que se basan
en las notificaciones push como ZaroMQ o aquellas que realizan solicitudes de forma
constante a servicios como Ajax. Sin embargo, Node.Js no es la alternativa más
recomendable si vamos a trabajar en APPS que generen pocas solicitudes.
4. Operaciones Asíncronas
www.iplacex.cl 13
5. Tipos de Proyectos que utilizan Node.Js
Al ser Node.Js una herramienta versátil para todo tipo de cosas, como aplicaciones web,
aplicaciones en línea de comandos, scripts para administración de sistemas, todo tipo de
aplicaciones de red, etc.
PayPal Node.Js
Netflix Node.Js
Uno de los servicios de Streamig más grande del mundo, contaba con diversos
problemas en su infraestructura siendo el más grave el de los largos tiempos de carga,
desde que se implementó Node.Js obtuvo una mejora abismal en términos de
www.iplacex.cl 14
rendimiento ya que pudo reducir el tiempo de carga de su web en torno a un 70 %.
Gracias a Node.Js la plataforma logró perfeccionar notablemente las interfaces del
usuario y optimizar la compilación de sus directorios.
Linkedin Node.Js
En la red profesional más grande del mundo. Hoy cuenta con la suma de más de 600
millones de usuarios registrados. Su aplicación para móviles está desarrollada
íntegramente con Node.Js el gran potencial de Node y su agilidad fueron las principales
razones para que Linkedin recurriese a él. Y es que la eficiencia de la implementación
se refleja muy bien en sus números:
www.iplacex.cl 15
A modo de ejemplo platearemos la siguiente situación:
Tenemos un sitio desarrollado en angular, este sitio interactuará solamente con la parte
del cliente, esta aplicación si bien está desarrollada, el cliente la puede utilizar sin
inconvenientes, pero esta aplicación necesita comunicar con un servidor central, este
servidor esta desarrollado con su BackEnd en Java utilizando el framework Spring,
entonces para su integración y lograr la correcta comunicación con nuestro servidor
emplearemos una api REST que nos permite disponibilizar los servicios de nuestro
BackEnd para poder consumir estos con nuestra aplicación desarrollada en Angular
como lo muestra en el siguiente diagrama:
Ilustración 1
Aplicación Híbrida
www.iplacex.cl 16
principio usuarios finales no percibirán la diferencia con respecto a otros tipos de
aproximaciones diferentes, como las aplicaciones nativas.
• Con una misma base de código serán capaces de compilar apps para funcionar
correctamente en una gran cantidad de sistemas operativos de móviles o tablets.
Generalmente nos será suficiente que nuestra app funcione en iOS y Android,
pero Ionic es capaz de compilar a otros sistemas como Windows Phone.
www.iplacex.cl 17
React
Por tanto, React representa una base sólida sobre la cual se puede construir casi
cualquier cosa con Javascript. Además, facilita mucho el desarrollo, ya que nos ofrece
muchas cosas ya listas, en las que no necesitamos invertir tiempo de trabajo. En este
artículo te ampliaremos esta información, aportando además diversos motivos por los
que usar React como librería del lado del cliente.
Con respecto a librerías sencillas como jQuery, React aporta una serie de posibilidades
muy importantes. Al tener las vistas asociadas a los datos, no necesitamos escribir
código para manipular la página cuando los datos cambian. Esta parte en librerías
sencillas es muy laboriosa de conseguir y es algo que React hace automáticamente.
También en comparación con jQuery nos permite una arquitectura de desarrollo más
avanzada, con diversos beneficios como la encapsulación del código en componentes,
que nos ofrecen una serie de ventajas más importantes que los plugin, como la
posibilidad de que esos componentes conversen e interaccionen entre sí, algo que sería
muy difícil de conseguir con Plugins.
www.iplacex.cl 18
ReactJS solapa por completo las funcionalidades de jQuery, por lo que resulta una
evolución natural para todos los sitios que usan esa librería. Podrían convivir, pero no es
algo que realmente sea necesario y recargaría un poco la página, por lo que tampoco
sería muy recomendable.
Fundamentos de TypeScript
Lo importante que hay que recordar es que todas las estructuras de control estándar que
se encuentra en JavaScript son compatibles dentro de un programa TypeScript. Esto
incluye:
• Flujos de control.
• Tipos de datos.
• Operadores.
• Subrutina.
www.iplacex.cl 19
Esta es unas de las fortalezas claves de TypeScript: se basa en un lenguaje (y un
conjunto de lenguajes) que ya es común para los programadores. JavaScript es
completamente documentado no solo en la especificación ECMA-262, sino también en
libros, en portales de redes de desarrolladores, foros y sitios web de preguntas y
respuestas.
Antes de indagar más sobre la sintaxis de TypeScript, recalcar el hecho de que todo
JavaScript es válido TypeScript, con un solo pequeño número de excepciones. Puede
tomar el código de JavaScript existente, agregarlo a un archivo TypeScript, y todas las
declaraciones serán válidas. Hay una sutil diferencia entre un código válido y un código
libre de errores en TypeScript; porque, aunque su código puede funcionar, el compilador
de TypeScript le advertirá sobre cualquier problema potencial que haya detectado.
Debido a que esta es una causa común de errores creando variables separadas,
realizando una aserción de tipo, o haciendo que la variable sea dinámica.
www.iplacex.cl 20
El JavaScript muestra dos ejemplos de la misma rutina. Aunque el primero llama a
Math.pi explícitamente, el segundo usa una declaración with, que agrega las propiedades
y funciones de Math al ámbito actual. Las sentencias anidadas dentro de la sentencia
with pueden omitir el prefijo Math y llamar directamente a propiedades y funciones, por
ejemplo, la propiedad PI o la función floor.
Al final de la declaración with, se restaura el alcance léxico original, por lo que las
llamadas posteriores fuera del bloque with deben usar el prefijo Math. La sentencia with
no está permitida en modo estricto en ECMAScript 5 y en ECMAScript 6 clases y módulos
serán tratados como en modo estricto por defecto. TypeScript trata con sentencias como
un error y tratará todos los tipos dentro de la declaración with como tipos dinámicos. Esto
se debe a lo siguiente:
Por lo tanto, con estas excepciones menores a la regla en mente, puede colocar
cualquier JavaScript válido en un archivo TypeScript y será TypeScript válido. A modo
de ejemplo, aquí está el script de cálculo de área transferido a un archivo TypeScript.
www.iplacex.cl 21
En el listado 1-2, las declaraciones son simplemente JavaScript, pero en TypeScript las
variables radio y área se beneficiarán de la inferencia de tipo. Debido a que el radio se
inicializa con el valor 4, se puede inferir que el tipo de radio es número. Con sólo un ligero
aumento en el esfuerzo, el resultado de multiplicar Math.pi, que se sabe que es un
número, con la variable de radio que se ha inferido que es un número, es posible inferir
que el tipo de área es también un número.
Variables
• Un guión bajo.
• Un signo de dólar.
www.iplacex.cl 22
• Un carácter Unicode de categorías: letra mayúscula, letra minúscula, letra minúscula,
letra modificadora, otra letra o número de letra.
En JavaScript es posible crear una variable global declarándola sin la palabra clave var.
Esto se hace comúnmente inadvertidamente cuando la palabra clave var se pierde
accidentalmente; rara vez se hace deliberadamente. En un programa TypeScript, esto
causará un error, que evita toda una categoría de errores difíciles de diagnosticar en su
código. En la imagen siguiente muestra una función JavaScript válida que contiene una
variable global implícita, para la cual TypeScript generará un error «No se pudo encontrar
el símbolo». Este error se puede corregir agregando la palabra clave var, lo que haría
que la variable tenga un alcance local a la función AddNumbers, o declarando
explícitamente una variable en el ámbito global.
function addNumbers(a, b) {
// missing var keyword
total = a + b;
return total;
}
TypeScript se escribe de forma opcional estática; esto significa que los tipos se
comprueban automáticamente para evitar asignaciones accidentales de valores no
válidos. Es posible excluirse de esto declarando variables dinámicas. La comprobación
estática de tipos reduce los errores causados por el mal uso accidental de los tipos.
www.iplacex.cl 23
También puede crear tipos para reemplazar los tipos primitivos para evitar errores de
ordenación de parámetros.
Type Annotations
Para una variable, la anotación de tipo viene después del identificador y está precedida
por dos puntos. La figura siguiente muestra las combinaciones que dan como resultado
una variable mecanografiada. El estilo más detallado es agregar una anotación de tipo y
asignar el valor. Aunque este es el estilo que se muestra en muchos ejemplos de este
www.iplacex.cl 24
capítulo, en la práctica este es el que menos usarás. La segunda variación muestra una
anotación de tipo sin asignación de valor; la anotación de tipo aquí es necesaria porque
TypeScript no puede inferir el tipo cuando no hay ningún valor presente. El ejemplo final
es como JavaScript simple; una variable se declara e inicializa en la misma línea. En
TypeScript, el tipo de la variable se deduce del valor asignado.
El tipo utilizado para especificar una anotación puede ser un tipo primitivo, un tipo de
matriz, una firma de función o cualquier estructura compleja que desee representar,
incluidos los nombres de las clases y las interfaces que cree. Si desea desactivar la
comprobación de tipo estático, puede usar el tipo especial any, que marca el tipo de una
variable como dinámico. No se realizan comprobaciones en los tipos dinámicos. El
www.iplacex.cl 25
siguiente código de un rango de anotaciones de tipo que cubren algunos de estos
escenarios diferentes.
// array anotation
var names: string[] = ['James', 'Nick', 'Rebecca', 'Lily'];
www.iplacex.cl 26
Si una anotación de tipo se vuelve demasiado compleja, puede crear una interfaz para
representar el tipo y simplificar las anotaciones. El listado 1-6 muestra cómo simplificar
la anotación de tipo para el objeto persona, que se mostró al final del ejemplo anterior en
siguiente código. Esta técnica es especialmente útil si tiene la intención de reutilizar el
tipo, ya que proporciona una definición reutilizable. Las interfaces no se limitan a describir
tipos de objetos; son lo suficientemente flexibles como para describir cualquier estructura
que sea probable que encuentre.
interface Person {
name: string;
heightInCentimeters: number;
}
var person: Person = {
name: 'Mark',
heightInCentimeters: 183
}
www.iplacex.cl 27
El tipo any es exclusivo de TypeScript y denota un tipo dinámico. Este tipo se utiliza
siempre que TypeScript no puede inferir un tipo, o cuando explícitamente desea hacer
que un tipo sea dinámico. Usar cualquier tipo equivale a optar por no verificar el tipo para
la vida útil de la variable.
El compilador también contiene tres tipos que no están destinados a utilizarse como
anotaciones de tipo, sino que se refieren a la ausencia de valores.
Por ejemplo, si tenía un método que buscó en una matriz de objetos para
encontrar una coincidencia, podría devolver null para indicar que no se encontró
ninguna coincidencia.
Arreglos o Arrays
Los Arreglos de TypeScript tienen una escritura precisa para su contenido. Para
especificar un tipo de matriz, simplemente agregue corchetes después del nombre del
tipo. Esto funciona para todos los tipos, ya sean primitivos o personalizados. Cuando
agrega un elemento a la matriz, su tipo se comprobará para asegurarse de que es
compatible. Cuando acceda a los elementos de la matriz, obtendrá autocompletado de
calidad porque se conoce el tipo de cada elemento. El listado de Array muestra cada una
de estas comprobaciones de tipo.
www.iplacex.cl 28
interface Monument {
name: string;
heightInMeters: number;
}
// el arreglo utilizando la interfaz Monument
var monuments: Monument[] = [];
monuments.push({
name: 'Peter the Great',
heightInMeters: 96
});
monuments.push({
name: 'Angel of the North',
heightInMeters: 20
});
www.iplacex.cl 29
function compareMonumentHeights(a: Monument, b: Monument) {
if (a.heightInMeters > b.heightInMeters) {
return -1;
}
if (a.heightInMeters < b.heightInMeters) {
return 1;
}
return 0;
}
www.iplacex.cl 30
La matriz se ordena usando monuments.sort (...), que toma una función para comparar
valores. Cuando la comparación es numérica, la función comparador puede simplemente
devolver a - b, en otros casos puede escribir código personalizado para realizar la
comparación y devolver un número positivo o negativo para ser utilizado para ordenar (o
un cero si los valores son los mismos).
Se accede a los elementos de una matriz mediante un índice. El índice está basado en
cero, por lo que el primer elemento de la matriz MonumentSorderedByHeight es
monumentSorderedByHeight [0]. Cuando se accede a un elemento desde la matriz, se
proporciona autocompletado para las propiedades name y heightInMeters. La propiedad
de ubicación que aparece en el objeto Estatua de la Libertad no se proporciona en la lista
de finalización automática, ya que no forma parte de la interfaz Monumento. Para obtener
más información sobre el uso de matrices y bucles.
8. Orientación a Objetos
La programación orientada a objetos permite que los conceptos del mundo real se
representen por código que contiene tanto los datos como el comportamiento
relacionado. Los conceptos se modelan normalmente como clases, con propiedades
para los datos y métodos para el comportamiento, y las instancias específicas de estas
clases se denominan objetos.
A lo largo de los años ha habido muchas discusiones sobre la orientación de los objetos
y estoy seguro de que el debate sigue siendo lo suficientemente animado como para
continuar durante muchos años. Debido a que la programación es un proceso heurístico,
rara vez encontrará una respuesta absoluta.
Esta es la razón por la que escuchará la frase «depende» tan a menudo en el desarrollo
de software. Ningún paradigma de programación se adapta a todas las situaciones, por
lo que cualquiera que le diga que la programación funcional, la programación orientada
www.iplacex.cl 31
a objetos u otro estilo de programación es la respuesta a todos los problemas no ha
estado expuesto a una gran variedad de problemas complejos.
Debido a esto, los lenguajes de programación se están volviendo cada vez más
multiparadigma. La programación orientada a objetos es una formalización de muchas
buenas prácticas que surgieron al principio de la programación informática. Proporciona
los conceptos para facilitar la aplicación de estas buenas prácticas. Al modelar objetos
del mundo real del dominio problemático usando objetos en el código, el programa puede
hablar el mismo idioma que el dominio al que sirve. Los objetos también permiten la
encapsulación y la ocultación de información, lo que impide que diferentes partes de un
programa modifiquen datos en los que depende otra parte del programa.
TypeScript proporciona todas las herramientas clave que necesita para utilizar la
orientación de objetos en su programa:
• Clases
• Instancias de clases
• Métodos
• Herencia
• Recursión abierta
• Encapsulación
• Delegación
• Clases de polimorfismo, instancias de clases, métodos y herencia.
www.iplacex.cl 32
esta lista merecen una explicación más detallada, especialmente en lo que respecta a
cómo funcionan dentro del sistema de tipos TypeScript.
www.iplacex.cl 33
Conclusión
En esta semana hemos visto los fundamentos para poder desarrollar nuestras primeras
aplicaciones orientadas hacia multiplataforma. Las ventajas que nos da hacer este tipo
de desarrollo son: reducción de costos de mantención, mejor control sobre el desarrollo,
escritura de código de forma centralizada (escribe una vez despliega en distintas
plataformas).
Además, cabe destacar que herramientas como NodeJS son utilizadas por empresas de
gran nivel mundial como lo son Netflix, LinkedIn etc.
Herramientas que nos facilitan el desarrollo, como lo son, Ionic, Angular, NodeJs, React,
llevan bastante tiempo siendo desarrolladas, mejorando y facilitando nuestra labor al
momento de construir una aplicación multiplataforma.
www.iplacex.cl 34
Bibliografía
www.iplacex.cl 35
www.iplacex.cl 36