Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf ·...
Transcript of Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf ·...
![Page 1: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/1.jpg)
Universidad Autónoma de Madrid
Escuela Politécnica Superior
Análisis y Diseño de Software (ADSOF)
Curso 2017-2018
Práctica 5
Genericidad, colecciones, lambdas y
patrones de diseño
Inicio: semana del 16 de abril
Duración: 3 semanas
Entrega: lunes 7 de mayo – 8:45h (todos los grupos)
Peso en la calificación de prácticas: 30%
1
![Page 2: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/2.jpg)
Grafo de Juego de Tronos (Games of Thrones, GOT)
Package adsof1718.grafos.got
Grafo ponderado no dirigido, GrafoGOT extends GrafoNoDirigido
Vértices:
Datos de tipo PersonajeGOT, con el nombre y la “casa” de un personaje
Constructor: GrafoGOT(String nombeFicheroVertices, String nombreFicheroArcos)
Apartado 2: Expresiones Lambda
2
![Page 3: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/3.jpg)
Métodos a implementar en GrafoGOT
Vertice<PersonajeGOT> getVertice(String nombre)
List<String> casas()
List<String> miembrosCasa(String casa)
Map<String, Integer> gradoPersonajes()
Map<String, Integer> gradoPonderadoPersonajes()
Map<String, Integer> personajesRelevantes()
// aquellos con grado mayor que el grado medio del grafo
Restricción: usar expresiones lambda y operaciones sobre los
“streams” de vértices
Apartado 2: Expresiones Lambda
3
A 2
6
2 4
1 Grado(A) = 5
GradoPonderado(A) = 6 + 4 + 2 +1 + 2 = 15
![Page 4: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/4.jpg)
Expresión Lambda (Java 8)
Bloque de código sin nombre, formado por:
Lista de parámetros
Separador “->”
Cuerpo
Ejemplo
(int x) -> x + 1
Parece un método, pero no lo es
Es (una notación compacta para) una instancia de una “clase anónima”
tipada por una interfaz funcional
Apartado 2: Expresiones Lambda
4
![Page 5: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/5.jpg)
Ejemplo: imprimir por pantalla los elementos de una lista
Apartado 2: Expresiones Lambda
5
![Page 6: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/6.jpg)
Ejemplo: imprimir por pantalla los elementos de una lista
Simplificación del ejemplo anterior
Apartado 2: Expresiones Lambda
6
![Page 7: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/7.jpg)
Ejemplo: filtrado de los elementos de una lista
Lista de “productos”
Sin expresiones lambda
Apartado 2: Expresiones Lambda
7
![Page 8: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/8.jpg)
Ejemplo: filtrado de los elementos de una lista
Lista de “productos”
Sin expresiones lambda
Con expresiones lambda
Apartado 2: Expresiones Lambda
8
![Page 9: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/9.jpg)
Stream
Secuencia de datos que soporta operaciones secuenciales o paralelas
de agregación
Ejemplo:
Apartado 2: Expresiones Lambda
9
![Page 10: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/10.jpg)
Stream
Secuencia de datos que soporta operaciones secuenciales o paralelas
de agregación
Ejemplo:
Apartado 2: Expresiones Lambda
10
![Page 11: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/11.jpg)
Operaciones sobre streams: ejemplo
Apartado 2: Expresiones Lambda
11
![Page 12: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/12.jpg)
Operaciones sobre streams (I)
Apartado 2: Expresiones Lambda
12
![Page 13: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/13.jpg)
Operaciones sobre streams (II)
Apartado 2: Expresiones Lambda
13
![Page 14: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/14.jpg)
Patrón de diseño Observer (I)
Dependencia 1-a-N entre objetos
Cuando un objeto cambia de estado, se notifica a los objetos
dependientes para que se actualicen automáticamente
Apartado 3: Patrones de diseño
14
Figura adaptada de Freeman, E., Robson, E., Bates, B., & Sierra, K. (2004).
Head First Design Patterns: A Brain-Friendly Guide. " O'Reilly Media, Inc.".
![Page 15: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/15.jpg)
Patrón de diseño Observer (I)
Dependencia 1-a-N entre objetos
Cuando un objeto cambia de estado, se notifica a los objetos
dependientes para que se actualicen automáticamente
Apartado 3: Patrones de diseño
15
Figura adaptada de Freeman, E., Robson, E., Bates, B., & Sierra, K. (2004).
Head First Design Patterns: A Brain-Friendly Guide. " O'Reilly Media, Inc.".
![Page 16: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/16.jpg)
Patrón de diseño Observer (I)
Dependencia 1-a-N entre objetos
Cuando un objeto cambia de estado, se notifica a los objetos
dependientes para que se actualicen automáticamente
Apartado 3: Patrones de diseño
16
Figura adaptada de Freeman, E., Robson, E., Bates, B., & Sierra, K. (2004).
Head First Design Patterns: A Brain-Friendly Guide. " O'Reilly Media, Inc.".
![Page 17: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/17.jpg)
Patrón de diseño Observer (I)
Dependencia 1-a-N entre objetos
Cuando un objeto cambia de estado, se notifica a los objetos
dependientes para que se actualicen automáticamente
Apartado 3: Patrones de diseño
17
Figura adaptada de Freeman, E., Robson, E., Bates, B., & Sierra, K. (2004).
Head First Design Patterns: A Brain-Friendly Guide. " O'Reilly Media, Inc.".
![Page 18: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/18.jpg)
Patrón de diseño Observer (I)
Dependencia 1-a-N entre objetos
Cuando un objeto cambia de estado, se notifica a los objetos
dependientes para que se actualicen automáticamente
Apartado 3: Patrones de diseño
18
Figura adaptada de Freeman, E., Robson, E., Bates, B., & Sierra, K. (2004).
Head First Design Patterns: A Brain-Friendly Guide. " O'Reilly Media, Inc.".
![Page 19: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/19.jpg)
Patrón de diseño Observer (I)
Dependencia 1-a-N entre objetos
Cuando un objeto cambia de estado, se notifica a los objetos
dependientes para que se actualicen automáticamente
Apartado 3: Patrones de diseño
19
Figura adaptada de Freeman, E., Robson, E., Bates, B., & Sierra, K. (2004).
Head First Design Patterns: A Brain-Friendly Guide. " O'Reilly Media, Inc.".
![Page 20: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/20.jpg)
Patrón de diseño Observer (I)
Dependencia 1-a-N entre objetos
Cuando un objeto cambia de estado, se notifica a los objetos
dependientes para que se actualicen automáticamente
Apartado 3: Patrones de diseño
20
Figura adaptada de Freeman, E., Robson, E., Bates, B., & Sierra, K. (2004).
Head First Design Patterns: A Brain-Friendly Guide. " O'Reilly Media, Inc.".
![Page 21: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/21.jpg)
Patrón de diseño Observer (II)
Dependencia 1-a-N entre objetos
Cuando un objeto cambia de estado, se notifica a los objetos
dependientes para que se actualicen automáticamente
Apartado 3: Patrones de diseño
21
![Page 22: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/22.jpg)
En la práctica 5:
Clases (package adsof1718.grafos.got.simulador)
SujetoConcreto SimuladorGOT
ObservadorConcreto ObservadorGOT (asociado a un personaje)
N (p.e. 10000) acciones que se envían a SimuladorGOT (sujeto),
invocando su método “interaccion”:
Datos que se registran en un ObservadorGOT, invocando a su método
“actualizar” desde el simulador
Para su personaje: número de interacciones total, número de interacciones
con miembros de su casa, número de interacciones con cada una las otras
casas
Apartado 3: Patrones de diseño
22
![Page 23: Análisis y Diseño de Software (ADSOF)arantxa.ii.uam.es/~cantador/slides/adsof1718-p5.pdf · 2018-04-24 · Grafo de Juego de Tronos (Games of Thrones, GOT) Package adsof1718.grafos.got](https://reader033.fdocumento.com/reader033/viewer/2022042113/5e8eba5a01a1ed21f7470401/html5/thumbnails/23.jpg)
En la práctica 5:
Parte de un ejemplo de salida por pantalla:
Apartado 3: Patrones de diseño
23