Upload
alejandro-corona
View
216
Download
0
Embed Size (px)
Citation preview
8/18/2019 Visitor Design Pattern
1/22
Ingeniería en TICs
Materia
Programación de Aplicaciones
Profesor(a)
Anastacio Rodriguez Garcia
Unidad 3
Patrón de Diseño Visitor
Alumno
Jesús Deanda Ortiz
No. Control
1213100085
8/18/2019 Visitor Design Pattern
2/22
Introducción
En programación orientada a objetos, el patrón visitor es una forma de separar el
algoritmo de la estructura de un objeto.
La idea básica es que se tiene un conjunto de clases elemento que conforman la
estructura de un objeto. Cada una de estas clases elemento tiene un método aceptar
(accept()) que recibe al objeto visitante (visitor) como argumento. El visitante es una
interfaz que tiene un método visit diferente para cada clase elemento; por tanto habrá
implementaciones de la interfaz visitor de la forma: visitorClase1, visitorClase2...
visitorClaseN. El método accept de una clase elemento llama al método visit de su clase.
Clases concretas de un visitante pueden entonces ser escritas para hacer una operación
en particular.
Cada método visit de un visitante concreto puede ser pensado como un método que no es
de una sola clase, sino de un par de clases: el visitante concreto y clase elemento
particular. Así el patrón visitor simula el envío doble (en inglés éste término se conoce
como Double-Dispatch) en un lenguaje convencional orientado a objetos de envío único
(Single-Dispatch), como son Java o C++.
El patrón visitor también especifica cómo sucede la interacción en la estructura del objeto.
En su versión más sencilla, donde cada algoritmo necesita iterar de la misma forma, el
método accept de un elemento contenedor, además de una llamada al método visit delobjeto visitor, también pasa el objeto visitor como argumento al llamar al método accept
de todos sus elementos hijos.
Este patrón es ampliamente utilizado en intérpretes, compiladores y procesadores de
lenguajes, en general.
8/18/2019 Visitor Design Pattern
3/22
ContenidoVisitor Design Pattern ......................................................................................................................... 1
Ejercicio ........................................................................................................................................... 2
Creación del Proyecto ..................................................................................................................... 3
Interfaz de Usuario .......................................................................................................................... 4
Strings.xml ................................................................................................................................... 4
activity_main.xml ........................................................................................................................ 5
activity_result.xml ....................................................................................................................... 7
fila.xml ......................................................................................................................................... 9
Drawable ..................................................................................................................................... 9
Patrón de Diseño ........................................................................................................................... 10
Interfaz Visitable ....................................................................................................................... 10Clases Visitables ........................................................................................................................ 10
Interfaz Visitor ........................................................................................................................... 12
Clases Visitor ............................................................................................................................. 13
Actividades Android ...................................................................................................................... 14
MainActivity .............................................................................................................................. 14
ResultActivity ............................................................................................................................. 16
Pruebas .......................................................................................................................................... 19
8/18/2019 Visitor Design Pattern
4/22
1
Visitor Design PatternEjemplos del patrón.
Método simple sin usar este patrón: supongamos un veterinario a domicilio, que con baseen al animal que tiene que curar sabe qué cura tiene que aplicar. Es responsabilidad del
veterinario el saber de qué clase es el animal y sobre la base de ello aplicar la cura.
Método usando el patrón: El veterinario no tiene que reconocer al animal ni saber qué cura
aplicarle. Es el propio animal el que le dice al veterinario qué cura es más apropiada para
él. El veterinario sólo "visita" al animal, y aplica la cura apropiada.
Es un patrón de comportamiento, que permite definir una operación sobre objetos de una
jerarquía de clases sin modificar las clases sobre las que opera. Representa una operación
que se realiza sobre los elementos que conforman la estructura de un objeto.
Visitante (Visitor): Declara una operación de visita para cada elemento concreto en la
estructura de objetos, que incluye el propio objeto visitado
Visitante Concreto (ConcreteVisitor1/2): Implementa las operaciones del visitante y
acumula resultados como estado local
Elemento (Element): Define una operación “Accept” que toma un visitante como
argumento
Elemento Concreto (ConcreteElementA/B): Implementa la operación “Accept”
8/18/2019 Visitor Design Pattern
5/22
2
Ejercicio El propósito de esta aplicación es cotizar un viaje de 1 de 3 destinos diferentes:
Dolores Hidalgo
Paris
Madrid
Dentro de cada ciudad tú puedes visitar un máximo de 4 lugares:
Parque
Museo
Zoológico
Catedral
Cada lugar se cotiza de manera diferente en base a la cantidad de personas dentro del
paquete.
El cálculo del costo del Zoológico de Madrid no es el mismo que el del Zoológico de Paris.
Ejemplo.
Zoológico de Madrid
Incluir dentro del paquete, entradas al Zoologico de Madrid cuesta $1000.00 por cada boleto.
Si se adquieren de 10 a 20 boletos, se ofrece un 25% de descuento al costo de cada boleto. Si
se adquieren más de 20, se aplica un descuento del 40% al costo de cada boleto.
5 boletos = 1000 * 5
10 boletos = 1000*10*0.75
25 boletos = 1000*25*0.75
Zoológico de Paris
Incluir dentro del paquete, entradas al Zoologico de Madrid cuesta $800.00 por cada boleto. Si
se adquieren entre 6 y 15 boletos, se aplica un 10% de descuento al costo de cada boleto. Si
se adquieren más de 15, se aplica un descuento del 30% al costo de cada boleto.
5 boletos = 800* 5
10 boletos = 800*10*0.90
25 boletos = 800*25*0.70
Con esto se pretende demostrar, que cada lugar se cotiza de manera de distinta en cada
ciudad.
8/18/2019 Visitor Design Pattern
6/22
3
Creación del Proyecto Crea un proyecto en Android Studio o Eclipse ADK, con el nombre Visitor.
Android Studio
Crea un proyecto en Android
File -> New -> New Project
Asigna el nombre de la aplicación como “Visitor”
Dominio asígnalo de esta manera
(Tu Nombre y tu Apellido).utng.edu.mx
Selecciona la ubicación donde deseas alojar tu proyecto.
Presiona Next.
Mantén la configuración por defecto, para ello presiona Next hasta que Finish este habilitado.
8/18/2019 Visitor Design Pattern
7/22
4
Interfaz de Usuario
Strings.xml
String es el archivo XML, donde se pueden almacenar cadenas y arreglos de cadenas (colecciones),
los cuales se pueden asignar como valores a los componentes de un Layout.
El siguiente código XML describe las cadenas y arreglos de cadenas (string-array) empleados en al
app.
Dentro de tu proyecto, modifica el archivo strings.xml que se encuentra en res -> values ->
strings.xml, reemplazando su contenido por el siguiente:
Importancia de los string-array dentro de la aplicación.
El código anterior agrega dos colecciones o listados de datos, el string array “ciudades” almacena
el nombre de las ciudades que se pueden escoger en un paquete de viaje mientras que el strang-
array “lugares” contiene un listado de los lugares dentro de las ciudades que se pueden visitar.
Su función dentro de la aplicación es fundamental, ya que al ser colecciones de datos permiten
poblar o llenar componentes como los spinners y las ListViews.
Su orden afecta al código de la app, existen puntos de decisión dentro del algoritmo en los que se
trabaja con directamente con el índice de los arreglos. No será el mismo resultado escoger como
destino a Dolores Hidalgo que a Madrid. Por lo que es importante que el orden de los arreglos sea
igual al mostrado arriba.
8/18/2019 Visitor Design Pattern
8/22
5
activity_main.xml
Esta es la interfaz de la actividad principal cuenta con elementos como scrollView. Spinner, EditText, ListView, TextView yButton.Se pretende que el usuario elija una ciudad del spinner, introduzca el número de personas en el EditText, seleccione loslugares a visitar en el ListView y que al presionar el botón se ejecuten las operaciones.No te preocupes, te facilitaré el código XML de esta pantalla. Te pido de favor que la analices por un momento y puedasdigerir su estructura,
8/18/2019 Visitor Design Pattern
9/22
6
Código activity_main.xml
8/18/2019 Visitor Design Pattern
10/22
7
activity_result.xml
El propósito de esta pantalla es el de mostrar el nombre de la ciudad elegida, una imagen de
la ciudad, la lista de los lugares seleccionados, la cantidad de personas que van a viajar y el
total a pagar por el viaje. Para ello se emplean elementos como TextViews, ListView y
ImageView y el archivo fila.xml para representar el nombre de cada lugar y el costo del mismo.
8/18/2019 Visitor Design Pattern
11/22
8
Código activity_result.xml
8/18/2019 Visitor Design Pattern
12/22
9
fila.xml
Este XML es de apoyo para pantalla Activity_result.xml, ya que se espera que los elementos
TextView de esta pantalla, aparezcan en el ListView tantas veces como lugares se hayan
seleccionado.
Drawable
Copiar las siguientes imágenes, una por una, que se encuentran en Tutorial_Visitor ->
Imágenes:
dh.jpeg
madrid.jpeg
paris.jpeg
En la carpeta res -> Drawable
8/18/2019 Visitor Design Pattern
13/22
10
Patrón de Diseño
Interfaz Visitable
Crea la interfaz Visitable, la cual proveerá de una representación del método aceptar, el cual
recibirá como parámetro un objeto de tipo Visitor. Aun no contamos con ninguna clase ni interfaz
del tipo Visitor. Por lo que no es de preocuparse que salte un error indicando que no se reconocela palabra Visitor.
Clases Visitables
Las clases visitables son todas aquellas que implementan la interfaz Visitable. Cada clase cuenta
con atributo cantidad, un accesor para dicho atributo, un método sobreescrito Aceptar
implementado de la interfaz y un constructor que recibe como parámetro la cantidad de personas.
Crea las siguientes Clases
Parque
Museo
Catedral
Zoológico
Ejemplo:
Prácticamente la estructura es la misma, la única diferencia entre las clases es su constructor. Te resultará fácilcrearlas.
8/18/2019 Visitor Design Pattern
14/22
11
Clase Ciudad
Esta clase es un punto clave dentro de nuestra aplicación. Como tal, una ciudad también es
un lugar y por lo tanto también es visitable. La diferencia con las demás clases Visitables, es
que una ciudad está compuesta por otros lugares Visitables. Por lo que se adiciona una Lista
de Arreglos de tipo Visitable y accesor a la misma. El constructor también recibe como
parámetro la cantidad de personas que lo van a visitar, pero además recibe la lista de lugares
a visitar dentro de la ciudad.
Por lo que al hacer una nueva instancia de un objeto ciudad, puedes asignar un número n de
personas y un conjunto n de lugares a visitar.
Implementa los métodos de la interfaz
8/18/2019 Visitor Design Pattern
15/22
12
Interfaz Visitor
Esta interfaz emplea como recurso primordial la sobrecarga de métodos, el cual consiste en un
conjunto de métodos con el mismo nombre pero con diferente cantidad y tipo de parámetros. En
la interfaz visitor se puede visualizar el método visualizar, el cual retorna un valor del tipo double.
Cada uno de estos métodos tiene un parámetro distinto, un objeto Visitable diferente.
Crea la interfaz Visitor la cual proveerá los métodos Visitar para cada una de las clases Visitables.
8/18/2019 Visitor Design Pattern
16/22
13
Clases Visitor
Estas clases implementan la interfaz Visitor. Cada
una ellas, hará una operación única de acuerdo al
tipo de objeto recibido como parámetro. Las
operaciones de un visitor de Madrid serán
diferentes al de un visitor de Paris.
Los métodos visitar con parámetro del tipo
Parque, Catedral, Zoológico y Museo retornan un
valor de acuerdo a la cantidad de visitantes.
Importante!, el método con parámetro del tipo
Ciudad, hará una iteración por cada uno de los
lugares que componen la ciudad y sumará el
resultado del método visitar de cada uno de los
lugares. Retornando el total de esta suma.
VisitorDolores
VisitorMadrid
VisitorParis
Ejemplo:
Te invito a que generes tus propias
promociones para Madrid y Paris!, lo único que
tienes que hacer es modificar los métodosvisitar de las clases VisitorMadrid y VisitorParis.
Puedes usar VisitorDolores como referencia
para hacer este paso.
8/18/2019 Visitor Design Pattern
17/22
14
Actividades Android
MainActivity
Realiza los siguientes imports y declaración de los distintos componentes que conforman el
documento activity_main.xml. Esta clase implementará OnClickListener para aplicarlo como
escuchador de clics en el botón btnCotizar.
8/18/2019 Visitor Design Pattern
18/22
15
Modifica el método OnCreate de la siguiente manera.
Modifica el método onClick (btnCotizar) de la siguiente manera.
8/18/2019 Visitor Design Pattern
19/22
16
ResultActivity
Actividad que procesa los parametros recibidos por la actividad MainActivity. Cada uno de los
lugares que componen la ciudad, son representados dentro de un listview, donde desplegan
individualmente el costo de la visita. Entonces cada lugar ejecuta el método aceptar para
desplegar el monto a pagar por la visita a ese lugar de acuerdo a la cantidad de personas. El
resultado total es representado por la ejecución del método aceptar del objeto Ciudad, por lo que
traerá el total de cada uno de los lugares que lo componen.
Realiza los siguientes imports y declaraciones de componentes androids y variables.
8/18/2019 Visitor Design Pattern
20/22
17
Modifica el método.
Agrega el método getVisitor
8/18/2019 Visitor Design Pattern
21/22
18
Agrega el método getLugar
Agrega el método hacerAdaptador
8/18/2019 Visitor Design Pattern
22/22
19
Pruebas
1. Ejecuta la aplicación.
2. Selecciona una ciudad
3. Asigna el número de personas
4. Selecciona los lugares a visitar
5. Da click en cotizar.