Está en la página 1de 22

Ingeniera en TICs

Materia
Programacin de Aplicaciones
Profesor(a)
Anastacio Rodriguez Garcia
Unidad 3
Patrn de Diseo Visitor
Alumno
Jess Deanda Ortiz
No. Control
1213100085

Introduccin
En programacin orientada a objetos, el patrn visitor es una forma de separar el
algoritmo de la estructura de un objeto.
La idea bsica es que se tiene un conjunto de clases elemento que conforman la
estructura de un objeto. Cada una de estas clases elemento tiene un mtodo aceptar
(accept()) que recibe al objeto visitante (visitor) como argumento. El visitante es una
interfaz que tiene un mtodo visit diferente para cada clase elemento; por tanto habr
implementaciones de la interfaz visitor de la forma: visitorClase1, visitorClase2...
visitorClaseN. El mtodo accept de una clase elemento llama al mtodo visit de su clase.
Clases concretas de un visitante pueden entonces ser escritas para hacer una operacin
en particular.
Cada mtodo visit de un visitante concreto puede ser pensado como un mtodo que no es
de una sola clase, sino de un par de clases: el visitante concreto y clase elemento
particular. As el patrn visitor simula el envo doble (en ingls ste trmino se conoce
como Double-Dispatch) en un lenguaje convencional orientado a objetos de envo nico
(Single-Dispatch), como son Java o C++.
El patrn visitor tambin especifica cmo sucede la interaccin en la estructura del objeto.
En su versin ms sencilla, donde cada algoritmo necesita iterar de la misma forma, el
mtodo accept de un elemento contenedor, adems de una llamada al mtodo visit del
objeto visitor, tambin pasa el objeto visitor como argumento al llamar al mtodo accept
de todos sus elementos hijos.
Este patrn es ampliamente utilizado en intrpretes, compiladores y procesadores de
lenguajes, en general.

Contenido
Visitor Design Pattern ......................................................................................................................... 1
Ejercicio ........................................................................................................................................... 2
Creacin del Proyecto ..................................................................................................................... 3
Interfaz de Usuario .......................................................................................................................... 4
Strings.xml ................................................................................................................................... 4
activity_main.xml ........................................................................................................................ 5
activity_result.xml ....................................................................................................................... 7
fila.xml ......................................................................................................................................... 9
Drawable ..................................................................................................................................... 9
Patrn de Diseo ........................................................................................................................... 10
Interfaz Visitable ....................................................................................................................... 10
Clases Visitables ........................................................................................................................ 10
Interfaz Visitor ........................................................................................................................... 12
Clases Visitor ............................................................................................................................. 13
Actividades Android ...................................................................................................................... 14
MainActivity .............................................................................................................................. 14
ResultActivity............................................................................................................................. 16
Pruebas.......................................................................................................................................... 19

Visitor Design Pattern


Ejemplos del patrn.

Mtodo simple sin usar este patrn: supongamos un veterinario a domicilio, que con base
en 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.

Mtodo usando el patrn: 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 ms apropiada para
l. El veterinario slo "visita" al animal, y aplica la cura apropiada.

Es un patrn de comportamiento, que permite definir una operacin sobre objetos de una
jerarqua de clases sin modificar las clases sobre las que opera. Representa una operacin
que se realiza sobre los elementos que conforman la estructura de un objeto.

Visitante (Visitor): Declara una operacin 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 operacin Accept que toma un visitante como
argumento

Elemento Concreto (ConcreteElementA/B): Implementa la operacin Accept

Ejercicio
El propsito de esta aplicacin es cotizar un viaje de 1 de 3 destinos diferentes:

Dolores Hidalgo

Paris

Madrid

Dentro de cada ciudad t puedes visitar un mximo de 4 lugares:

Parque

Museo

Zoolgico

Catedral

Cada lugar se cotiza de manera diferente en base a la cantidad de personas dentro del
paquete.
El clculo del costo del Zoolgico de Madrid no es el mismo que el del Zoolgico de Paris.
Ejemplo.
Zoolgico 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 ms 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
Zoolgico 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 ms 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.

Creacin 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 aplicacin como Visitor
Dominio asgnalo de esta manera
(Tu Nombre y tu Apellido).utng.edu.mx
Selecciona la ubicacin donde deseas alojar tu proyecto.
Presiona Next.

Mantn la configuracin por defecto, para ello presiona Next hasta que Finish este habilitado.

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 cdigo 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 aplicacin.


El cdigo 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 strangarray lugares contiene un listado de los lugares dentro de las ciudades que se pueden visitar.
Su funcin dentro de la aplicacin es fundamental, ya que al ser colecciones de datos permiten
poblar o llenar componentes como los spinners y las ListViews.
Su orden afecta al cdigo de la app, existen puntos de decisin 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.
4

activity_main.xml

Esta es la interfaz de la actividad principal cuenta con elementos como scrollView. Spinner, EditText, ListView, TextView y
Button.
Se pretende que el usuario elija una ciudad del spinner, introduzca el nmero de personas en el EditText, seleccione los
lugares a visitar en el ListView y que al presionar el botn se ejecuten las operaciones.
No te preocupes, te facilitar el cdigo XML de esta pantalla. Te pido de favor que la analices por un momento y puedas
digerir su estructura,

Cdigo activity_main.xml

activity_result.xml

El propsito 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.

Cdigo activity_result.xml

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 imgenes, una por una, que se encuentran en Tutorial_Visitor ->
Imgenes:

dh.jpeg

madrid.jpeg

paris.jpeg

En la carpeta res -> Drawable

Patrn de Diseo
Interfaz Visitable
Crea la interfaz Visitable, la cual proveer de una representacin del mtodo aceptar, el cual
recibir como parmetro 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 reconoce
la 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 mtodo sobreescrito Aceptar
implementado de la interfaz y un constructor que recibe como parmetro la cantidad de personas.
Crea las siguientes Clases

Parque

Museo

Catedral

Zoolgico

Ejemplo:

Prcticamente la estructura es la misma, la nica diferencia entre las clases es su constructor. Te resultar fcil
crearlas.

10

Clase Ciudad
Esta clase es un punto clave dentro de nuestra aplicacin. Como tal, una ciudad tambin es
un lugar y por lo tanto tambin es visitable. La diferencia con las dems 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 tambin recibe como
parmetro la cantidad de personas que lo van a visitar, pero adems 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 nmero n de
personas y un conjunto n de lugares a visitar.
Implementa los mtodos de la interfaz

11

Interfaz Visitor
Esta interfaz emplea como recurso primordial la sobrecarga de mtodos, el cual consiste en un
conjunto de mtodos con el mismo nombre pero con diferente cantidad y tipo de parmetros. En
la interfaz visitor se puede visualizar el mtodo visualizar, el cual retorna un valor del tipo double.
Cada uno de estos mtodos tiene un parmetro distinto, un objeto Visitable diferente.
Crea la interfaz Visitor la cual proveer los mtodos Visitar para cada una de las clases Visitables.

12

Clases Visitor
Estas clases implementan la interfaz Visitor. Cada
una ellas, har una operacin nica de acuerdo al
tipo de objeto recibido como parmetro. Las
operaciones de un visitor de Madrid sern
diferentes al de un visitor de Paris.
Los mtodos visitar con parmetro del tipo
Parque, Catedral, Zoolgico y Museo retornan un
valor de acuerdo a la cantidad de visitantes.
Importante!, el mtodo con parmetro del tipo
Ciudad, har una iteracin por cada uno de los
lugares que componen la ciudad y sumar el
resultado del mtodo 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 mtodos
visitar de las clases VisitorMadrid y VisitorParis.
Puedes usar VisitorDolores como referencia
para hacer este paso.

13

Actividades Android
MainActivity
Realiza los siguientes imports y declaracin de los distintos componentes que conforman el
documento activity_main.xml. Esta clase implementar OnClickListener para aplicarlo como
escuchador de clics en el botn btnCotizar.

14

Modifica el mtodo OnCreate de la siguiente manera.

Modifica el mtodo onClick (btnCotizar) de la siguiente manera.

15

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 mtodo 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 ejecucin del mtodo 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.

16

Modifica el mtodo.

Agrega el mtodo getVisitor

17

Agrega el mtodo getLugar

Agrega el mtodo hacerAdaptador

18

Pruebas
1.
2.
3.
4.
5.

Ejecuta la aplicacin.
Selecciona una ciudad
Asigna el nmero de personas
Selecciona los lugares a visitar
Da click en cotizar.

19

También podría gustarte