Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
Elemento (Element): Define una operacin Accept que toma un visitante como
argumento
Ejercicio
El propsito de esta aplicacin es cotizar un viaje de 1 de 3 destinos diferentes:
Dolores Hidalgo
Paris
Madrid
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.
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:
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
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
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:
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
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.
17
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