64
Introducción a la Programación Para Dispositivos Móviles Sesión 1 Parte 1

Sesion1 Parte 1

Embed Size (px)

DESCRIPTION

Sesion1 Parte 1

Citation preview

Page 1: Sesion1 Parte 1

Introducción a la Programación Para

Dispositivos MóvilesSesión 1 Parte 1

Page 2: Sesion1 Parte 1

¿Qué es lo que

✦ ¿Qué es un dispositivo móvil?✦ ¿Es un diferente paradigma de

programación?✦ Un poco de historia✦ Principales plataformas de desarrollo✦ Patrón MVC

Page 3: Sesion1 Parte 1

¿Qué es un dispositivo móvil?

Page 4: Sesion1 Parte 1

Todos conocemos...

Smartphone Tablet

Page 5: Sesion1 Parte 1

Pero también

Lentes

TVs

Relojes

Page 6: Sesion1 Parte 1

Un dispositivo móvil es el artefacto que puedes llevar contigo en

cualquier momento, ser utilizado casi instantáneamente, es personal y

puede conectarse a una red

Page 7: Sesion1 Parte 1

¿Es un diferente paradigma de programación?

Page 8: Sesion1 Parte 1

DiferenciasDesarrollo desktop / web

Nos enfrentamos a las reglas de la ingeniería de software:

• Metodologías de desarrollo• Gestión de proyectos

Mientras más funciones tenga y se termine en el tiempo, mejor

Page 9: Sesion1 Parte 1

DiferenciasDesarrollo móvil

Nos enfrentamos contra la tiranía de la experiencia de usuario

Experiencia de usuario

Page 10: Sesion1 Parte 1

¿Qué es una solución

+ +

Solución Móvil

Web Web Mobile Nativa

Page 11: Sesion1 Parte 1

Nuevos paradigmas✦ Canales múltiples

✦ No restringirse a solo un canal✦ Centrarse en capacidades de canal✦ Tener cuidado con escalabilidad

✦ Nuevas maneras de ofrecer un servicio✦ Llevar servicios ya existentes a los “dedos de tus clientes”✦ Proveer lo que el usuario quiere, en el momento y el lugar

que lo necesita✦ Simplificarle la vida a los clientes

✦ Al ofrecer menor cantidad de información, la aplicación es más enfocada y por lo tanto más sencilla.

Page 12: Sesion1 Parte 1

Un poco de historia

Page 13: Sesion1 Parte 1

Nuevos “jugadores”:•Ubuntu OS, Firefox OS

Evolución Histórica

Page 14: Sesion1 Parte 1

Principales Plataformas

Page 15: Sesion1 Parte 1

•Gran cantidad de dispositivos vendidos

•Lenguaje de programación Java

•Es una extensión de especificación J2ME

•Gran cantidad de dispositivos vendidos

•Un solo fabricante de hardware, desarrollo dirigido (baja fragmentación)

•Alta integración de software con hardware

•Market muy desarrollado (App Store)

•Gran cantidad de dispositivos vendidos

•Lenguaje de programación Java

•Baja barrera de entrada

•Varios markets (muy desarrollados)

•Variedad de dispositivos

•Tecnología .NET•Facilidad de desarrollo

•Equipos con pocas prestaciones

•Falta de un market difundido

•Cuota de mercado en descenso

•Alta fragmentación

•Lenguaje de programación Objective C

•Desarrollo solamente con hardware de Apple

•Dispositivos caros•Licenciamiento necesario para desarrollo.

•Mediana fragmentación

•Diversidad de APIs (por fabricante)

•Bajo control del ecosistema *

•Market no muy desarrollado

•Poca variedad de equipos

•Dispositivos caros•Integración muy fuerte con Windows

Pro

Cons

Page 16: Sesion1 Parte 1

Repaso de Java

Page 17: Sesion1 Parte 1

Conceptos Java✦ Clases y objetos (diferencia)✦ Atributos y métodos✦ Comunicación entre objetos✦ Herencia✦ Interfases✦ Polimorfismo

Page 18: Sesion1 Parte 1

Clases y objetos

package com.javaejemplo.classes;

public class Tren {

}

tren = new Tren();

Clase Objeto

Un objeto es una instancia de una clase

Page 19: Sesion1 Parte 1

¿Qué sucede en la memoria cuando instanciamos un objeto?

Heaptren

Page 20: Sesion1 Parte 1

¿Qué sucede en la memoria cuando instanciamos un objeto?

Heaptren

tren = new Tren();

Page 21: Sesion1 Parte 1

¿Qué sucede en la memoria cuando instanciamos un objeto?

Heaptren

tren = new Tren();

Page 22: Sesion1 Parte 1

¿Qué sucede en la memoria cuando instanciamos un objeto?

Heaptren

tren = new Tren();

Page 23: Sesion1 Parte 1

Así podemos instanciar varios

Heaptren

tren = new Tren();tren = new Tren();

Page 24: Sesion1 Parte 1

Así podemos instanciar varios

Heaptren

tren = new Tren();tren = new Tren();tren = new Tren();

Page 25: Sesion1 Parte 1

Así podemos instanciar varios

Heaptren

tren = new Tren();tren = new Tren();tren = new Tren();

?? ??

Page 26: Sesion1 Parte 1

El sistema llama al proceso Garbage Collector

Heaptren

tren = new Tren();tren = new Tren();tren = new Tren();

Garbage Collector

Page 27: Sesion1 Parte 1

Así se puede reutilizar ese espacio

Heaptren

tren = new Tren();tren = new Tren();tren = new Tren();

Page 28: Sesion1 Parte 1

Atributos y métodospublic class Tren {

private String linea; private int anhoFabricacion; public double precio; public String getLinea() { return linea; } public void setLinea(String linea) { this.linea = linea; } public int getAnhoFabricacion() { return anhoFabricacion; } public void setAnhoFabricacion(int anhoFabricacion) { this.anhoFabricacion = anhoFabricacion; }

}

Page 29: Sesion1 Parte 1

Atributos y métodospublic class Tren {

private String linea; private int anhoFabricacion; public double precio; public String getLinea() { return linea; } public void setLinea(String linea) { this.linea = linea; } public int getAnhoFabricacion() { return anhoFabricacion; } public void setAnhoFabricacion(int anhoFabricacion) { this.anhoFabricacion = anhoFabricacion; }

}

Atributos

Métodos

Page 30: Sesion1 Parte 1

Comunicación entre objetosPersona Automóvil

arrancar()

public class Automovil {

public void arrancar(){ // Codigo del método arrancar }}

public class Persona {

public void irATrabajar(){ Automovil automovil = new Automovil(); automovil.arrancar(); }}

Page 31: Sesion1 Parte 1

Herencia

Automóvil Tren Avión

MedioTransporte

public class ClaseHijo extends ClasePadre{

//....}

Page 32: Sesion1 Parte 1

Herencia

Automóvil Tren Avión

MedioTransporte

public class ClaseHijo extends ClasePadre{

//....}

En Java no hay

herencia múltiple

Page 33: Sesion1 Parte 1

Interfaces✦ Solo declara (no

implementa) métodos que deberán ser implementados por las clases que implementen la interface dada

✦ Una clase puede implementar varias interfaces

public interface IAccionesMedioTransporte { public void arrancar(); public void frenar();}

Page 34: Sesion1 Parte 1

Interfaces✦ Solo declara (no

implementa) métodos que deberán ser implementados por las clases que implementen la interface dada

✦ Una clase puede implementar varias interfaces

public interface IAccionesMedioTransporte { public void arrancar(); public void frenar();}

public class Avion implements IAccionesMedioTransporte{

@Override public void arrancar() { // TODO Codigo para arrancar }

@Override public void frenar() { // TODO Codigo para frenar }

}

Page 35: Sesion1 Parte 1

PolimorfismoEn programación orientada a objetos el polimorfismo se refiere a la posibilidad de

enviar un mensaje a un grupo de objetos cuya naturaleza puede ser heterogénea. El único requisito que deben cumplir los objetos que se utilizan de

manera polimórfica es saber responder al mensaje que se les envía.

Wikipedia http://es.wikipedia.org/wiki/Polimorfismo_(informática)

Page 36: Sesion1 Parte 1

PolimorfismoEn programación orientada a objetos el polimorfismo se refiere a la posibilidad de

enviar un mensaje a un grupo de objetos cuya naturaleza puede ser heterogénea. El único requisito que deben cumplir los objetos que se utilizan de

manera polimórfica es saber responder al mensaje que se les envía.

Wikipedia http://es.wikipedia.org/wiki/Polimorfismo_(informática)

public class MedioTransporte { private String marca;

public String getMarca() { return marca; }

public void setMarca(String marca) { this.marca = marca; }}

public class Automovil extends MedioTransporte{}

Page 37: Sesion1 Parte 1

PolimorfismoEn programación orientada a objetos el polimorfismo se refiere a la posibilidad de

enviar un mensaje a un grupo de objetos cuya naturaleza puede ser heterogénea. El único requisito que deben cumplir los objetos que se utilizan de

manera polimórfica es saber responder al mensaje que se les envía.

Wikipedia http://es.wikipedia.org/wiki/Polimorfismo_(informática)

public class Persona {

//... public void iniciar(){ Automovil automovil = new Automovil(); String marca = automovil.getMarca(); }}

public class MedioTransporte { private String marca;

public String getMarca() { return marca; }

public void setMarca(String marca) { this.marca = marca; }}

public class Automovil extends MedioTransporte{}

Page 38: Sesion1 Parte 1

Métodos abstractospublic abstract class MedioTransporte {

//... public abstract void limpiar();}

Page 39: Sesion1 Parte 1

Métodos abstractospublic abstract class MedioTransporte {

//... public abstract void limpiar();}

public class Automovil extends MedioTransporte{

@Override public void limpiar() { // TODO Codigo para limpiar }

}

Creamos una clase que implemente los métodos abstractos

Page 40: Sesion1 Parte 1

Métodos abstractospublic abstract class MedioTransporte {

//... public abstract void limpiar();}

public class Automovil extends MedioTransporte{

@Override public void limpiar() { // TODO Codigo para limpiar }

}

Creamos una clase que implemente los métodos abstractos

public class Persona { public void iniciar(){ MedioTransporte medioTransporte = new MedioTransporte() { @Override public void limpiar() { // TODO Codigo implementado dinámicamente // en tiempo de ejecución } }; medioTransporte.limpiar(); }}

Implementamos el método dinámicamente durante la creación

de la instancia

Page 41: Sesion1 Parte 1

Polimorfismo de interfacespublic class Avion implements IAccionesMedioTransporte{

@Override public void arrancar() { // TODO Codigo para arrancar }

@Override public void frenar() { // TODO Codigo para frenar }

}

public interface IAccionesMedioTransporte { public void arrancar(); public void frenar();}

Page 42: Sesion1 Parte 1

public void iniciar(){ IAccionesMedioTransporte acciones = new IAccionesMedioTransporte() { @Override public void frenar() { // TODO Codigo para frenar } @Override public void arrancar() { // TODO Codigo para arrancar } }; acciones.arrancar(); acciones.frenar(); }

public class Avion implements IAccionesMedioTransporte{

@Override public void arrancar() { // TODO Codigo para arrancar }

@Override public void frenar() { // TODO Codigo para frenar }

}

public class Persona { public void iniciar(){ Avion avion = new Avion(); avion.arrancar(); avion.frenar(); }}

Forma estática (en compilación)

Forma dinámica (en ejecución)

Page 43: Sesion1 Parte 1

¿Qué utilizar, herencia o interfaces?

Page 44: Sesion1 Parte 1

¿Qué utilizar, herencia o interfaces?

Page 45: Sesion1 Parte 1

Automóvil Tren Avión

MedioTransporte

Estructura

Page 46: Sesion1 Parte 1

Automóvil Tren Avión

MedioTransporte

Bicicleta

No arranca ni frena

Estructura

Page 47: Sesion1 Parte 1

Automóvil Tren Avión

MedioTransporte

Bicicleta

No arranca ni frena

Bus

Carga encomienda

Estructura

Page 48: Sesion1 Parte 1

Desacoplando...

Page 49: Sesion1 Parte 1

Patrón MVC

Page 50: Sesion1 Parte 1

Model View

Controller

Dividemos objetos de nuestra app en 3 grupos

Page 51: Sesion1 Parte 1

Model

¿Qué es el model (modelo)?

Model: ¿Qué es lo que nuestra app es o hace?

Ojo! no es cómo se muestra en pantalla!

Page 52: Sesion1 Parte 1

Controller

¿Qué es el controller (controlador)?

Es el que nos responde la siguiente pregunta: ¿Cómo nuestro modelo es presentado al usuario? (lógica de

UI)

Page 53: Sesion1 Parte 1

View

¿Qué son las views (vistas)?

Son los subordinados del Controller

Page 54: Sesion1 Parte 1

MVC

Model View

Controller

Intenta ordenar y organizar las clases y la comunicación entre ellas

Page 55: Sesion1 Parte 1

MVC

Model View

Controller

Los controller pueden siempre comunicarse directamente con los modelos

Page 56: Sesion1 Parte 1

MVC

Model View

Controller

Los controller también pueden comunicarse directamente con las vistas

Page 57: Sesion1 Parte 1

MVC

Model View

Controller

Los Modelos y Vistas nunca pueden comunicarse entre ellos

Page 58: Sesion1 Parte 1

MVC

Model View

Controller

¿Puede la Vista comunicarse con el Controller?

¿?

Page 59: Sesion1 Parte 1

MVC

Model View

Controller

Listeners

Si, indirectamente. Mediante Listeners

OnEventListener(){....

}

Page 60: Sesion1 Parte 1

MVC

Model View

Controller

Adapters

Existe otro método, por medio de Adapters

Page 61: Sesion1 Parte 1

MVC

Model View

Controller

¿?

¿Puede el Modelo comunicarse con el Controller?

Page 62: Sesion1 Parte 1

MVC

Model View

Controller

Indirectamente

Indirectamente, si se podría

Page 63: Sesion1 Parte 1
Page 64: Sesion1 Parte 1

Uso de las reglas del patrón MVC