1 00:00:00,050 --> 00:00:07,269 Vale, vamos a realizar una interfaz gráfica para gestionar pedidos, para variar y ya está. 2 00:00:08,250 --> 00:00:13,769 Vale, entonces, vamos a tunearlo también un poco para que sea un poquito más completo. 3 00:00:15,250 --> 00:00:24,469 Primero, importante en una aplicación, antes de empezar a ver qué tiene que hacer mi aplicación, 4 00:00:24,469 --> 00:00:26,929 antes de empezar con 5 00:00:26,929 --> 00:00:28,050 ¿qué tiene que hacer? 6 00:00:29,030 --> 00:00:31,030 ¿qué tiene que hacer? recordad que forma 7 00:00:31,030 --> 00:00:33,329 parte de la fase de análisis 8 00:00:33,329 --> 00:00:34,250 ¿no? de un proyecto 9 00:00:34,250 --> 00:00:37,149 ¿sí o no? ¿conocéis los ciclos? 10 00:00:37,729 --> 00:00:38,869 el ciclo de vida 11 00:00:38,869 --> 00:00:40,829 el desarrollo del software ¿verdad? ¿lo conocéis? 12 00:00:41,549 --> 00:00:43,009 vale, y la fase de análisis 13 00:00:43,009 --> 00:00:44,909 es ¿qué 14 00:00:44,909 --> 00:00:46,829 tiene que hacer esto? 15 00:00:46,969 --> 00:00:47,710 ¿qué tiene que hacer? 16 00:00:48,670 --> 00:00:50,929 ¿qué tiene que hacer? entonces tú te juntas con 17 00:00:50,929 --> 00:00:52,189 el cliente y le dices 18 00:00:52,189 --> 00:00:54,649 A ver, ¿tú qué quieres? 19 00:00:54,990 --> 00:00:57,049 Él te cuenta un rollo en uno que no entiendes nada 20 00:00:57,049 --> 00:00:59,030 Entonces te sigues entrevistando con él, con Macatín 21 00:00:59,030 --> 00:01:01,469 Y al final sacas un listado 22 00:01:01,469 --> 00:01:03,509 De funcionalidades pequeñitas 23 00:01:03,509 --> 00:01:04,930 Que son las que tiene que hacer 24 00:01:04,930 --> 00:01:05,590 ¿Vale? 25 00:01:07,209 --> 00:01:08,370 No, las más importantes no 26 00:01:08,370 --> 00:01:10,890 Todas y cada una de las que tiene que hacer 27 00:01:10,890 --> 00:01:13,230 El desglose de lo que tiene que hacer una por una 28 00:01:13,230 --> 00:01:13,909 ¿Vale? 29 00:01:15,909 --> 00:01:17,209 Pero, eso es una cosa 30 00:01:17,209 --> 00:01:18,250 No pongas cara de 31 00:01:18,250 --> 00:01:20,010 Estás ahí tocando la nariz 32 00:01:20,010 --> 00:01:21,230 Porque es así 33 00:01:21,230 --> 00:01:23,329 Pero eso es una cosa 34 00:01:23,329 --> 00:01:25,670 Lo que tiene que hacer la aplicación 35 00:01:25,670 --> 00:01:27,670 Que es importante que la tengamos clara 36 00:01:27,670 --> 00:01:29,650 Pero nunca nos olvidemos 37 00:01:29,650 --> 00:01:31,150 De otra parte importantísima 38 00:01:31,150 --> 00:01:33,969 Que es, ¿qué datos maneja mi aplicación? 39 00:01:34,189 --> 00:01:34,849 ¿Y dónde están? 40 00:01:35,650 --> 00:01:37,450 ¿Qué datos maneja? Voy a caracterizarlos 41 00:01:37,450 --> 00:01:39,769 Voy a describirlos, ¿y dónde se van a guardar? 42 00:01:40,450 --> 00:01:42,010 Entonces esa parte es importantísima 43 00:01:42,010 --> 00:01:43,549 Caracterizar los datos 44 00:01:43,549 --> 00:01:44,969 Con los que va a trabajar mi aplicación 45 00:01:44,969 --> 00:01:47,189 Porque si no tenemos clarísimos 46 00:01:47,189 --> 00:01:49,569 Los datos con los que va a trabajar y su estructura 47 00:01:49,569 --> 00:01:51,090 Es imposible 48 00:01:51,090 --> 00:01:53,409 que podamos enunciar claramente 49 00:01:53,409 --> 00:01:55,530 qué tiene que hacer, es imposible 50 00:01:55,530 --> 00:01:56,989 que podamos tener un enunciado claro de 51 00:01:56,989 --> 00:01:59,709 tiene que hacer esto con no sé qué 52 00:01:59,709 --> 00:02:01,489 si ese no sé qué no está 53 00:02:01,489 --> 00:02:02,829 perfectamente caracterizado 54 00:02:02,829 --> 00:02:04,950 vale, pues aquí 55 00:02:04,950 --> 00:02:07,310 ¿con qué datos va a trabajar nuestra aplicación? 56 00:02:07,689 --> 00:02:09,210 pues pedidos, vale 57 00:02:09,210 --> 00:02:11,150 ¿y qué tienen los pedidos? 58 00:02:12,050 --> 00:02:13,349 pues los pedidos 59 00:02:13,349 --> 00:02:15,729 se caracterizan por un código 60 00:02:15,729 --> 00:02:16,310 único 61 00:02:16,310 --> 00:02:18,689 y un tipo 62 00:02:18,689 --> 00:02:20,550 una descripción 63 00:02:20,550 --> 00:02:23,830 y un precio, vale, lo de la variable tipo numerado 64 00:02:23,830 --> 00:02:26,349 olvidadlo porque no hemos visto variables tipo numerado 65 00:02:26,349 --> 00:02:28,729 ¿vale? pero a cambio 66 00:02:28,729 --> 00:02:31,969 lo que vamos a meterle es 67 00:02:31,969 --> 00:02:35,669 los pedidos en lugar de tener solamente 68 00:02:35,669 --> 00:02:37,990 código, descripción y precio 69 00:02:37,990 --> 00:02:40,770 que tengan un listado de productos 70 00:02:40,770 --> 00:02:43,689 ¿vale? vamos a cambiar esto de numerado 71 00:02:43,689 --> 00:02:48,110 por tipo 72 00:02:48,110 --> 00:02:51,590 descripción y el precio lo cambiamos 73 00:02:51,590 --> 00:03:09,539 por listado de productos, vale, y ahora sí, cada producto tendrá su nombre, unidades 74 00:03:09,539 --> 00:03:20,110 y precio por unidad, bueno, ahora sí están caracterizados los datos, los datos son pedidos, 75 00:03:20,110 --> 00:03:22,150 Cada pedido tiene 76 00:03:22,150 --> 00:03:23,189 Código único 77 00:03:23,189 --> 00:03:25,430 Lo de tipo 78 00:03:25,430 --> 00:03:27,629 Tipo nos sobra, ¿verdad? 79 00:03:28,750 --> 00:03:29,689 Pasamos del tipo 80 00:03:29,689 --> 00:03:31,909 Vale 81 00:03:31,909 --> 00:03:34,590 Código único, descripción de ese pedido 82 00:03:34,590 --> 00:03:35,569 Y listado de productos 83 00:03:35,569 --> 00:03:38,349 Y cada producto, nombre de ese producto 84 00:03:38,349 --> 00:03:40,729 Unidades del producto y precio por unidad 85 00:03:40,729 --> 00:03:42,770 Y podríamos completarlo 86 00:03:42,770 --> 00:03:44,469 Poniendo el cliente que ha hecho el pedido 87 00:03:44,469 --> 00:03:46,169 Etcétera, pero bueno, vamos a dejarlo aquí 88 00:03:46,169 --> 00:03:48,270 El código único es del map solo, ¿no? 89 00:03:48,270 --> 00:03:49,710 No, es que esa es otra pregunta 90 00:03:49,710 --> 00:03:52,610 Que es donde voy a guardar los datos 91 00:03:52,610 --> 00:03:54,310 Donde los voy a guardar y como 92 00:03:54,310 --> 00:03:55,030 Vale 93 00:03:55,030 --> 00:03:58,569 Entonces el pedido se va a caracterizar por un código 94 00:03:58,569 --> 00:03:59,469 Se tiene que caracterizar 95 00:03:59,469 --> 00:04:01,949 Otra cosa es, vale, ahora como guardo esos datos 96 00:04:01,949 --> 00:04:04,650 Que es que ya nos está diciendo aquí como hacerlo 97 00:04:04,650 --> 00:04:06,229 Nos lo está ordenando 98 00:04:06,229 --> 00:04:08,590 Vale, pero nosotros antes 99 00:04:08,590 --> 00:04:10,550 Hemos hablado con el cliente 100 00:04:10,550 --> 00:04:12,030 Y le hemos dicho, a ver, de este pedido 101 00:04:12,030 --> 00:04:13,210 A ti que datos te interesan 102 00:04:13,210 --> 00:04:14,789 Pues cada pedido va a tener un código 103 00:04:14,789 --> 00:04:16,769 Tiene que tener un código único 104 00:04:16,769 --> 00:04:19,189 cada pedido para que yo lo pueda localizar rápidamente 105 00:04:19,189 --> 00:04:21,009 para que no confundir pedidos con otros 106 00:04:21,009 --> 00:04:22,910 vale, pues venga, cada código un pedido 107 00:04:22,910 --> 00:04:24,329 tú vas ahí apuntando con 108 00:04:24,329 --> 00:04:26,709 tus apuntes 109 00:04:26,709 --> 00:04:28,910 ¿qué más quieres que tenga el pedido? hombre, pues 110 00:04:28,910 --> 00:04:31,110 una descripción para que cuando yo lo localice ese pedido 111 00:04:31,110 --> 00:04:33,209 pues de dónde ha salido, si es 112 00:04:33,209 --> 00:04:34,649 urgente, si no es urgente, lo que sea 113 00:04:34,649 --> 00:04:37,050 y también los productos para que yo tenga 114 00:04:37,050 --> 00:04:39,129 que servirlo, pues para saber lo que tengo que ir a buscar 115 00:04:39,129 --> 00:04:40,290 al almacén, vale 116 00:04:40,290 --> 00:04:42,769 versión reducida, porque lo ideal sería 117 00:04:42,769 --> 00:04:45,509 tener un cliente, para saber a quién enviárselos 118 00:04:45,509 --> 00:04:47,430 porque si no, no sabes a quién enviárselos 119 00:04:47,430 --> 00:04:48,529 pero bueno, lo dejamos así 120 00:04:48,529 --> 00:04:51,430 vale, entonces ya tenemos claro y ya vamos a apuntar 121 00:04:51,430 --> 00:04:53,250 nuestro blog de notas, vale, tus pedidos 122 00:04:53,250 --> 00:04:55,189 necesitan esto, y ahora ya 123 00:04:55,189 --> 00:04:56,569 tú ya te vas 124 00:04:56,569 --> 00:04:59,350 y te haces la siguiente pregunta 125 00:04:59,350 --> 00:05:01,170 que es, ¿dónde voy a guardar esto? 126 00:05:02,389 --> 00:05:03,350 lo normal es que 127 00:05:03,350 --> 00:05:04,550 lo guardáramos en una base de datos 128 00:05:04,550 --> 00:05:07,850 tabla productos, tabla pedidos 129 00:05:07,850 --> 00:05:09,350 ¿vale? cada producto 130 00:05:09,350 --> 00:05:11,430 clave ajena a un pedido, ¿verdad? 131 00:05:12,029 --> 00:05:13,449 cada producto pertenece 132 00:05:13,449 --> 00:05:15,170 a un pedido, pues clave ajena, algo así 133 00:05:15,170 --> 00:05:17,790 en nuestro caso no podemos 134 00:05:17,790 --> 00:05:18,750 hacer esa parte porque 135 00:05:18,750 --> 00:05:21,810 aunque sabemos, sabéis diseñar 136 00:05:21,810 --> 00:05:22,689 una base de datos 137 00:05:22,689 --> 00:05:26,029 no sabemos acceder a ella desde una aplicación 138 00:05:26,029 --> 00:05:27,850 luego esa solución por ahora 139 00:05:27,850 --> 00:05:29,769 no nos vale, bueno pues vamos a 140 00:05:29,769 --> 00:05:31,089 guardarlos localmente 141 00:05:31,089 --> 00:05:33,709 menuda birria porque va a tener 142 00:05:33,709 --> 00:05:35,329 que estar la aplicación arrancada siempre 143 00:05:35,329 --> 00:05:37,670 como se vaya a la luz todos los pedidos 144 00:05:37,670 --> 00:05:39,329 el historial de pedidos se ha ido fuera 145 00:05:39,329 --> 00:05:40,110 pero bueno 146 00:05:40,110 --> 00:05:43,769 si no se va a la luz pues no funciona 147 00:05:43,769 --> 00:05:44,649 la aplicación bien 148 00:05:44,649 --> 00:05:47,209 pues donde los guardamos 149 00:05:47,209 --> 00:05:48,610 localmente hemos dicho 150 00:05:48,610 --> 00:05:49,910 una variable de la aplicación 151 00:05:49,910 --> 00:05:52,110 ¿cómo? pues hombre 152 00:05:52,110 --> 00:05:54,490 el tío me ha venido a decir que el código 153 00:05:54,490 --> 00:05:56,009 es lo que le va a ser a él útil 154 00:05:56,009 --> 00:05:58,829 para localizar un pedido rápidamente 155 00:05:58,829 --> 00:06:00,930 ver la descripción que tiene 156 00:06:00,930 --> 00:06:01,709 sus unidades 157 00:06:01,709 --> 00:06:04,629 pues hombre, maravilloso si yo uso 158 00:06:04,629 --> 00:06:06,750 un map, porque el map precisamente 159 00:06:06,750 --> 00:06:08,649 lo que me ofrece es 160 00:06:08,649 --> 00:06:10,670 la rapidez en localizar algo 161 00:06:10,670 --> 00:06:11,290 por clave 162 00:06:11,290 --> 00:06:14,470 si yo lo meto todo en un set 163 00:06:14,470 --> 00:06:16,910 pues para localizarte o quitar a Aries 164 00:06:16,910 --> 00:06:17,449 un rollete 165 00:06:17,449 --> 00:06:21,350 no hace falta 166 00:06:21,350 --> 00:06:22,649 tú ya lo diseñas 167 00:06:22,649 --> 00:06:24,089 si quieres que la tengas, si no la tengas 168 00:06:24,089 --> 00:06:26,790 pero el pedido 169 00:06:26,790 --> 00:06:28,290 queda identificado por su código 170 00:06:28,290 --> 00:06:30,870 otra cosa es que no esté en la clase pedido 171 00:06:30,870 --> 00:06:32,490 pero conceptualmente 172 00:06:32,490 --> 00:06:33,850 el pedido tiene su código 173 00:06:33,850 --> 00:06:36,509 luego tú ya decides cómo colocas esos datos 174 00:06:36,509 --> 00:06:38,069 como lo planteabas al principio me sonaba más 175 00:06:38,069 --> 00:06:39,129 a que el pedido lo iba a tener 176 00:06:39,129 --> 00:06:40,769 como D1 177 00:06:40,769 --> 00:06:44,250 claro, yo no estaba hablando 178 00:06:44,250 --> 00:06:46,009 de clase pedido, estaba hablando 179 00:06:46,009 --> 00:06:47,750 del pedido real de la persona 180 00:06:47,750 --> 00:06:49,990 del pedido real de la persona, no estaba pensando 181 00:06:49,990 --> 00:06:52,129 ya, no estaba pensando todavía en cómo hacer la clase 182 00:06:52,129 --> 00:06:53,629 pedido, aun así 183 00:06:53,629 --> 00:06:56,110 lo natural es 184 00:06:56,110 --> 00:06:57,889 si un pedido se caracteriza por su código 185 00:06:57,889 --> 00:06:59,370 independientemente de que yo lo meta en un map 186 00:06:59,370 --> 00:07:01,449 que también le ponga la propiedad código 187 00:07:01,449 --> 00:07:04,250 que también, ¿no? porque lo caracteriza 188 00:07:04,250 --> 00:07:06,050 aunque esa propiedad va a estar 189 00:07:06,050 --> 00:07:07,029 también en el 190 00:07:07,029 --> 00:07:09,149 en la clave del map, pero 191 00:07:09,149 --> 00:07:12,149 en cualquier caso, si yo utilizo ese pedido 192 00:07:12,149 --> 00:07:13,670 fuera del contexto del map 193 00:07:13,670 --> 00:07:15,910 pues está bien que tenga su propia 194 00:07:15,910 --> 00:07:17,350 ID dentro 195 00:07:17,350 --> 00:07:19,750 caracterizándola, que sirva para 196 00:07:19,750 --> 00:07:21,029 equals, que sirva para cosas 197 00:07:21,029 --> 00:07:22,209 claro 198 00:07:22,209 --> 00:07:25,930 claro, depende de las funcionalidades 199 00:07:25,930 --> 00:07:27,689 que quieras hacer, depende de, pero siempre 200 00:07:27,689 --> 00:07:29,509 va a ser más escalable 201 00:07:29,509 --> 00:07:31,649 esta aplicación, más, vas a poder 202 00:07:31,649 --> 00:07:33,470 añadir funcionalidades más fácilmente 203 00:07:33,470 --> 00:07:35,810 si pedido tiene dentro su ID 204 00:07:35,810 --> 00:07:37,129 porque te va a facilitar la vida 205 00:07:37,129 --> 00:07:39,769 si no, si se va a quedar ahí y todo lo que 206 00:07:39,769 --> 00:07:41,730 haces, lo haces con el map, pues da igual 207 00:07:41,730 --> 00:07:43,350 porque ya está el ID en 208 00:07:43,350 --> 00:07:45,769 vale, bueno pues entonces 209 00:07:45,769 --> 00:07:47,769 los datos van a estar en un map 210 00:07:47,769 --> 00:07:49,569 más o menos con estos requisitos 211 00:07:49,569 --> 00:07:51,389 y ahora ya 212 00:07:51,389 --> 00:07:54,089 que funcionalidades tenemos que hacer 213 00:07:54,089 --> 00:07:56,310 pues bueno, quiero insertar un pedido 214 00:07:56,310 --> 00:07:58,149 nuevo, quiero consultarlo 215 00:07:58,149 --> 00:08:00,050 por código, quiero modificarlo 216 00:08:00,050 --> 00:08:01,829 y añadiremos algunas, pues gestionar 217 00:08:01,829 --> 00:08:04,009 los precios, gestionar búsquedas 218 00:08:04,009 --> 00:08:04,490 lo que sea 219 00:08:04,490 --> 00:08:07,910 y además con una interfaz gráfica, entonces tendremos que 220 00:08:07,910 --> 00:08:09,689 decidir pues cuantos paneles hacemos 221 00:08:09,689 --> 00:08:11,889 para que tenga cositas, pero lo primero son 222 00:08:11,889 --> 00:08:28,029 los datos. Entonces vamos a arrancar el dentro de ejercicios, interfaces gráficas, que esto 223 00:08:28,029 --> 00:08:54,370 yo creo que, no sé ni dónde estaba esto, pero esto es, a ver, ¿cómo se llamaba este 224 00:08:54,370 --> 00:08:59,929 proyecto? Ejercicios, clase, interfaces gráficas, vale. ¿Qué habíamos hecho? El arcao y el 225 00:08:59,929 --> 00:09:04,549 ejercicio 2. Pues venga, vamos a poner, en lugar de un proyecto nuevo, lo meto en un 226 00:09:04,549 --> 00:09:06,289 paquete, todas las clases hay 227 00:09:06,289 --> 00:09:08,110 a mogollón, muy feo, pero bueno, así 228 00:09:08,110 --> 00:09:09,909 para subirlo a la virtual es más fácil. 229 00:09:10,789 --> 00:09:11,149 Diez. 230 00:09:19,840 --> 00:09:21,720 Vale, de nuevo todo esto que estamos haciendo 231 00:09:21,720 --> 00:09:23,559 es con el objetivo de repasar 232 00:09:23,559 --> 00:09:24,659 una y otra vez lo de siempre. 233 00:09:25,419 --> 00:09:27,700 Lo de que algunos ya sabréis y os aburriréis muchísimo, 234 00:09:27,980 --> 00:09:29,720 pero hay que acostumbrarse al aburrimiento 235 00:09:29,720 --> 00:09:31,559 también. Y los que no, 236 00:09:31,840 --> 00:09:33,600 pues que lo utilicen como 237 00:09:33,600 --> 00:09:35,740 repaso de lo mismo 238 00:09:35,740 --> 00:09:37,379 y una y otra vez. Gestión de clases, 239 00:09:37,519 --> 00:09:38,740 de métodos, de colecciones. 240 00:09:41,820 --> 00:09:44,679 Claro, claro, una aplicación con interfaz gráfica 241 00:09:44,679 --> 00:09:45,980 Para gestionar todos esos pedidos 242 00:09:45,980 --> 00:09:47,899 Pues venga, nuestros datos 243 00:09:47,899 --> 00:09:50,440 Nuestros datos los vamos a poner en una clase 244 00:09:50,440 --> 00:09:51,480 Aparte 245 00:09:51,480 --> 00:09:58,230 Nuestros datos van a estar aquí 246 00:09:58,230 --> 00:09:59,590 Accesibles 247 00:09:59,590 --> 00:10:02,429 Por todos los métodos de la aplicación 248 00:10:02,429 --> 00:10:05,629 Metidos en un HashMap 249 00:10:05,629 --> 00:10:07,610 Por ejemplo, donde 250 00:10:07,610 --> 00:10:09,190 Si el código es entero 251 00:10:09,190 --> 00:10:10,350 Pues será integer 252 00:10:10,350 --> 00:10:13,870 Y la clave será el objeto pedido 253 00:10:13,870 --> 00:10:41,769 vale, pues ya tenemos importados 254 00:10:41,769 --> 00:10:44,049 estos dos y la clase pedido 255 00:10:44,049 --> 00:10:45,389 pues hay que hacerla 256 00:10:45,389 --> 00:10:50,820 pues venga 257 00:10:50,820 --> 00:10:53,120 vamos a hacer la clase pedido 258 00:10:53,120 --> 00:11:00,200 y la clase pedido 259 00:11:00,200 --> 00:11:03,279 como los pedidos se caracterizan por un código 260 00:11:03,279 --> 00:11:05,100 vamos a ponérselo, otra cosa es que luego 261 00:11:05,100 --> 00:11:06,940 a lo mejor no lo usemos porque como ya está 262 00:11:06,940 --> 00:11:08,919 duplicado en la clave del map pues igual 263 00:11:08,919 --> 00:11:11,419 no nos hace falta pero nos podría hacer 264 00:11:11,419 --> 00:11:52,389 Descripción y listita de productos. 265 00:11:52,389 --> 00:11:54,429 Pues nada, habrá que importarlo todo. 266 00:11:54,429 --> 00:12:06,840 Producto, vale, bueno, vamos a crear producto lo primero para que me ofrezca luego el import. 267 00:12:06,840 --> 00:12:09,419 Producto 268 00:12:09,419 --> 00:12:10,220 Pues le hace falta 269 00:12:10,220 --> 00:12:13,179 Y producto era solamente el nombre 270 00:12:13,179 --> 00:12:23,090 Las unidades 271 00:12:23,090 --> 00:12:32,879 Y el precio 272 00:12:32,879 --> 00:12:37,820 Y aquí ya sí que podemos hacer 273 00:12:37,820 --> 00:12:39,080 Los constructores 274 00:12:39,080 --> 00:12:52,840 No, ¿cuántos de este producto? 275 00:12:53,299 --> 00:12:54,740 Cuatro bolis, cinco gomas 276 00:12:54,740 --> 00:12:55,960 Ocho rotus 277 00:12:55,960 --> 00:13:12,409 Get it set 278 00:13:12,409 --> 00:13:15,700 Vale 279 00:13:15,700 --> 00:13:18,740 hay clave primaria en esta clase 280 00:13:18,740 --> 00:13:20,919 si no la hay, que diseño más 281 00:13:20,919 --> 00:13:22,279 peligroso 282 00:13:22,279 --> 00:13:24,960 si, podemos entender que hay clave 283 00:13:24,960 --> 00:13:25,919 primaria que es el nombre 284 00:13:25,919 --> 00:13:28,940 pues vamos a ponerle un jasco de equals 285 00:13:28,940 --> 00:13:32,000 por si las moscas 286 00:13:32,000 --> 00:13:41,059 y efectivamente como pedido 287 00:13:41,059 --> 00:13:42,240 va a trabajar con una lista 288 00:13:42,240 --> 00:13:44,679 si nosotros dentro de los productos 289 00:13:44,679 --> 00:13:46,419 quisiéramos añadir un 290 00:13:46,419 --> 00:13:49,279 ver si un producto está en esta 291 00:13:49,279 --> 00:13:51,080 lista, pues gracias 292 00:13:51,080 --> 00:13:52,960 sea ese jasco de equals, podríamos hacerlo 293 00:13:52,960 --> 00:13:55,159 con el contains. Sin ese 294 00:13:55,159 --> 00:13:57,320 jasco de equals, el contains 295 00:13:57,320 --> 00:13:59,320 dentro de producto no nos valdría. 296 00:13:59,960 --> 00:14:00,860 Entonces, si una 297 00:14:00,860 --> 00:14:03,039 funcionalidad fuera, mira 298 00:14:03,039 --> 00:14:04,799 a ver en qué pedidos hay 299 00:14:04,799 --> 00:14:07,039 bolis para comunicar al 300 00:14:07,039 --> 00:14:09,000 cliente que los bolis se nos han acabado. 301 00:14:09,600 --> 00:14:10,980 Pues ahí tendríamos que recoger los 302 00:14:10,980 --> 00:14:13,259 pedidos, hacer un contains de productos. 303 00:14:13,879 --> 00:14:15,059 Ese contains solo va 304 00:14:15,059 --> 00:14:17,019 a funcionar si producto tiene jasco de equals. 305 00:14:20,259 --> 00:14:20,740 Ahora sí 306 00:14:20,740 --> 00:14:22,679 que podemos importar 307 00:14:22,679 --> 00:14:23,179 esto. 308 00:14:33,700 --> 00:14:34,179 Vale. 309 00:14:34,620 --> 00:14:35,779 Un constructor 310 00:14:35,779 --> 00:14:40,019 de pedido. 311 00:14:43,039 --> 00:14:44,659 Tiene las tres propiedades, 312 00:14:44,840 --> 00:14:45,919 constructores, 313 00:14:47,360 --> 00:14:48,679 getter setter 314 00:14:48,679 --> 00:14:50,039 y el 315 00:14:50,039 --> 00:14:51,679 jasco de equals por nombre. 316 00:14:51,899 --> 00:14:53,820 Ah, no, el jasco de equals lo he hecho por los tres. 317 00:14:53,820 --> 00:14:56,559 no, lo he hecho por nombre 318 00:14:56,559 --> 00:15:00,350 es que como 319 00:15:00,350 --> 00:15:01,509 aquí me 320 00:15:01,509 --> 00:15:04,509 no, no, no, lo he hecho por los tres 321 00:15:04,509 --> 00:15:06,250 lo he hecho por los tres 322 00:15:06,250 --> 00:15:07,990 claro, veía que yo mucho 323 00:15:07,990 --> 00:15:10,429 claro, por los tres no tiene 324 00:15:10,429 --> 00:15:10,990 sentido 325 00:15:10,990 --> 00:15:16,240 jascode 326 00:15:16,240 --> 00:15:18,080 equals solo por nombre 327 00:15:18,080 --> 00:15:23,639 dime 328 00:15:23,639 --> 00:15:30,399 la clase para los datos de la aplicación 329 00:15:30,399 --> 00:15:33,039 que los datos van a ser un map 330 00:15:33,039 --> 00:15:34,620 de pedidos 331 00:15:34,620 --> 00:15:37,240 indexados 332 00:15:37,240 --> 00:15:38,879 por su clave 333 00:15:38,879 --> 00:15:40,100 por su código 334 00:15:40,100 --> 00:15:45,210 aquí van a estar los datos guardados 335 00:15:45,210 --> 00:15:46,889 se supone que se habrán volcado 336 00:15:46,889 --> 00:15:47,950 de una base de datos 337 00:15:47,950 --> 00:15:51,190 pero en muchos 338 00:15:51,190 --> 00:15:51,590 supone 339 00:15:51,590 --> 00:15:55,049 en muchos 340 00:15:55,049 --> 00:15:55,409 supone 341 00:15:55,409 --> 00:16:02,129 no porque 342 00:16:02,129 --> 00:16:04,070 Normalmente cuando 343 00:16:04,070 --> 00:16:06,990 Claro, cuando una entidad tiene alguna propiedad 344 00:16:06,990 --> 00:16:07,850 Que son colecciones 345 00:16:07,850 --> 00:16:11,129 Pues tú la instancias primero con sus datos básicos 346 00:16:11,129 --> 00:16:13,210 Y se supone que luego esos datos los vas rellenando 347 00:16:13,210 --> 00:16:13,769 Con el tiempo 348 00:16:13,769 --> 00:16:16,850 La puedes poner, pero entonces cuando lo instancias 349 00:16:16,850 --> 00:16:18,110 Pues si le pones null 350 00:16:18,110 --> 00:16:20,269 Ya te has cargado este new de aquí 351 00:16:20,269 --> 00:16:20,970 Entonces 352 00:16:20,970 --> 00:16:28,740 Constructor normal 8 353 00:16:28,740 --> 00:16:32,740 Y gettyset de todos 354 00:16:32,740 --> 00:16:39,879 vale 355 00:16:39,879 --> 00:16:41,340 y también puedo avanzar 356 00:16:41,340 --> 00:16:43,279 no sé si lo voy a necesitar o no 357 00:16:43,279 --> 00:16:45,120 pero tenemos clarísimo 358 00:16:45,120 --> 00:16:47,580 que el código identifica de forma única 359 00:16:47,580 --> 00:16:48,100 el pedido 360 00:16:48,100 --> 00:16:51,460 pues desde luego no me va a poner 361 00:16:51,460 --> 00:16:53,360 ningún problema el añadir el jasco 362 00:16:53,360 --> 00:16:55,000 de equal, lo más que puede ocurrir es que sobre 363 00:16:55,000 --> 00:16:57,419 pero molestar no va a molestar 364 00:16:57,419 --> 00:17:00,980 y ayudar igual si que ayuda 365 00:17:00,980 --> 00:17:02,500 si yo tengo que hacer 366 00:17:02,500 --> 00:17:04,900 iteraciones sobre pedidos, etc 367 00:17:04,900 --> 00:17:09,279 Pues mis datos ya están caracterizados 368 00:17:09,279 --> 00:17:10,880 Voy a tener un montón de pedidos 369 00:17:10,880 --> 00:17:17,349 Entonces en esta clase de datos 370 00:17:17,349 --> 00:17:19,849 Lo normal es que uno ya incluya 371 00:17:19,849 --> 00:17:22,390 Métodos para hacer las operaciones básicas 372 00:17:22,390 --> 00:17:23,910 De acceso a estos datos 373 00:17:23,910 --> 00:17:26,410 Que es insertar un pedido nuevo 374 00:17:26,410 --> 00:17:30,569 Buscar recuperar pedido 375 00:17:30,569 --> 00:17:31,849 Etcétera 376 00:17:31,849 --> 00:17:33,170 ¿Vale? 377 00:17:33,170 --> 00:17:34,589 En este caso es que 378 00:17:34,589 --> 00:17:36,529 Es decir, aquí 379 00:17:36,529 --> 00:17:39,289 haríamos los famosos métodos 380 00:17:39,289 --> 00:17:40,390 que os mencionaba ayer 381 00:17:40,390 --> 00:17:41,569 CRUD 382 00:17:41,569 --> 00:17:55,470 estos, vale 383 00:17:55,470 --> 00:17:57,970 pues insertar uno, pues hombre 384 00:17:57,970 --> 00:18:15,140 vale 385 00:18:15,140 --> 00:18:16,140 pues aquí 386 00:18:16,140 --> 00:18:18,859 tenemos que pensar 387 00:18:18,859 --> 00:18:21,900 ahora ya si que tenemos que pensar un poquito en el funcionamiento de la aplicación 388 00:18:21,900 --> 00:18:23,640 que es 389 00:18:23,640 --> 00:18:25,599 a mi el 390 00:18:25,599 --> 00:18:27,759 cliente que me ha pedido esta aplicación 391 00:18:27,759 --> 00:18:29,660 lógicamente 392 00:18:29,660 --> 00:18:31,579 me habrá dicho el que se va a sentar a usarla 393 00:18:31,579 --> 00:18:33,539 esta gestión, ¿qué datos te va a dar del pedido? 394 00:18:34,099 --> 00:18:35,319 Entonces, te va a dar 395 00:18:35,319 --> 00:18:37,579 del pedido, oye, pues me acaban 396 00:18:37,579 --> 00:18:39,779 de hacer un pedido urgente 397 00:18:39,779 --> 00:18:40,799 para no sé dónde 398 00:18:40,799 --> 00:18:42,160 de 399 00:18:42,160 --> 00:18:45,619 con bolis 400 00:18:45,619 --> 00:18:47,359 tres que cuestan cinco pesetas 401 00:18:47,359 --> 00:18:49,700 y con ordenadores 402 00:18:49,700 --> 00:18:51,819 ocho que cuestan doce pesetas. 403 00:18:53,220 --> 00:18:53,319 ¿Vale? 404 00:18:53,599 --> 00:18:55,420 Entonces, esos son los datos que el tío va a meter. 405 00:18:56,579 --> 00:18:57,440 Él no te va a decir 406 00:18:57,440 --> 00:18:59,440 el código. No vas a tener 407 00:18:59,440 --> 00:19:01,640 ayer secretario tuyo pensando 408 00:19:01,640 --> 00:19:03,660 en el código, espérate voy a mirar los códigos 409 00:19:03,660 --> 00:19:05,579 que ya estaban metidos, no te va a meter el código 410 00:19:05,579 --> 00:19:07,000 todo eso lo gestiona la aplicación 411 00:19:07,000 --> 00:19:09,619 vale, pues el problema llega 412 00:19:09,619 --> 00:19:11,579 aquí, cuando tú quieres meter un pedido 413 00:19:11,579 --> 00:19:13,599 nuevo, este código 414 00:19:13,599 --> 00:19:14,619 de donde ha salido 415 00:19:14,619 --> 00:19:17,480 claro, entonces la propia aplicación 416 00:19:17,480 --> 00:19:19,539 lo tiene que generar, tiene que 417 00:19:19,539 --> 00:19:21,599 garantizar que va a ser único para todos 418 00:19:21,599 --> 00:19:22,920 los pedidos, único 419 00:19:22,920 --> 00:19:25,740 bueno, pues eso nos es fácil de programar 420 00:19:25,740 --> 00:19:27,519 podemos hacer aquí una variable estática 421 00:19:27,519 --> 00:19:29,519 global que incrementamos 422 00:19:29,519 --> 00:19:31,599 cada vez que insertamos un pedido nuevo, por ejemplo 423 00:19:31,599 --> 00:19:44,049 podemos llamarlo 424 00:19:44,049 --> 00:19:45,569 secuencia 425 00:19:45,569 --> 00:19:48,490 para códigos 426 00:19:48,490 --> 00:19:49,990 inicialmente 427 00:19:49,990 --> 00:19:51,509 pues uno, por ejemplo 428 00:19:51,509 --> 00:19:52,950 entero 429 00:19:52,950 --> 00:20:00,220 vale, pues cada vez que se inserta un pedido 430 00:20:00,220 --> 00:20:02,599 el pedido nos habrá llegado 431 00:20:02,599 --> 00:20:04,279 nos ha llegado 432 00:20:04,279 --> 00:20:06,240 con ese código sin 433 00:20:06,240 --> 00:20:08,279 setear, vale, con ese código 434 00:20:08,279 --> 00:20:10,079 está sin setear, pues venga 435 00:20:10,079 --> 00:20:12,299 vamos a ponerle al pedido 436 00:20:12,299 --> 00:20:13,940 setCódigo 437 00:20:13,940 --> 00:20:15,079 esta secuencia 438 00:20:15,079 --> 00:20:18,319 y ahora además lo metemos en el map 439 00:20:18,319 --> 00:20:21,859 pedidos.put 440 00:20:21,859 --> 00:20:23,819 con esta secuencia misma 441 00:20:23,819 --> 00:20:26,019 estoy duplicando la información 442 00:20:26,019 --> 00:20:26,839 pero bueno 443 00:20:26,839 --> 00:20:29,779 sí, sí 444 00:20:29,779 --> 00:20:31,960 que no pasa nada porque esté dentro también 445 00:20:31,960 --> 00:20:33,680 me refiero que estoy poniendo el código en dos sitios 446 00:20:33,680 --> 00:20:35,380 pero ya hemos dicho que eso tiene su utilidad 447 00:20:35,380 --> 00:20:37,619 y aquí pongo el pedido p 448 00:20:37,619 --> 00:20:44,240 secuencia 449 00:20:44,240 --> 00:20:44,660 code 450 00:20:44,660 --> 00:20:49,480 vale 451 00:20:49,480 --> 00:20:53,160 esta es la versión más chuchurría 452 00:20:53,160 --> 00:20:55,380 para hacer este insert 453 00:20:55,380 --> 00:20:57,619 más chuchurría porque no me da 454 00:20:57,619 --> 00:20:58,519 ningún tipo de 455 00:20:58,519 --> 00:21:01,279 al que llama a insert pedido 456 00:21:01,279 --> 00:21:02,779 y quien va a llamar a insert pedido 457 00:21:02,779 --> 00:21:05,380 a insert pedido lo va a llamar un listener de nuestra 458 00:21:05,380 --> 00:21:07,519 interfaz, un listener va a llamar 459 00:21:07,519 --> 00:21:09,240 a insert pedido después de haber recogido los datos 460 00:21:09,240 --> 00:21:11,079 y ese listener 461 00:21:11,079 --> 00:21:13,380 no va a recibir ninguna realimentación 462 00:21:13,380 --> 00:21:15,380 si dejamos el método así, menuda caca 463 00:21:15,380 --> 00:21:17,200 no va a saber ese listener 464 00:21:17,200 --> 00:21:19,059 si poner en la interfaz de nuevo 465 00:21:19,059 --> 00:21:20,319 pedido insertado 466 00:21:20,319 --> 00:21:22,359 no ha podido insertar pedido 467 00:21:22,359 --> 00:21:24,759 no va a recibir ninguna realimentación 468 00:21:24,759 --> 00:21:27,380 entonces, que este método 469 00:21:27,380 --> 00:21:28,779 nos dé alguna realimentación 470 00:21:28,779 --> 00:21:31,180 bueno, antes que nada, la secuencia 471 00:21:31,180 --> 00:21:32,660 tendremos que dejarla incrementada 472 00:21:32,660 --> 00:21:35,000 porque es que si no, vamos a estar repitiendo 473 00:21:35,000 --> 00:21:39,000 y en vez de, claro, y ahora ya 474 00:21:39,000 --> 00:21:41,140 la secuencia hay que dejarla incrementada, eso para empezar 475 00:21:41,140 --> 00:21:42,940 y ahora ya tenemos que pensar 476 00:21:42,940 --> 00:21:45,220 la realimentación que le damos 477 00:21:45,220 --> 00:21:47,180 a la interfaz gráfica que me ha llamado 478 00:21:47,180 --> 00:21:49,220 para saber si se ha insertado correctamente 479 00:21:49,220 --> 00:21:51,200 o no, a través de un boolean 480 00:21:51,200 --> 00:21:53,279 que me devuelva true o false, pues la más cómoda 481 00:21:53,279 --> 00:21:55,019 porque como este tiene este 482 00:21:55,019 --> 00:21:57,079 inactivo, el pobre, sin uso, void 483 00:21:57,079 --> 00:21:58,900 pues la más cómoda es con un boolean 484 00:21:58,900 --> 00:22:01,500 si este 485 00:22:01,500 --> 00:22:02,559 dato 486 00:22:02,559 --> 00:22:05,059 si este valor de retorno no fuera 487 00:22:05,059 --> 00:22:07,140 void, porque la aplicación me tiene que devolver algo 488 00:22:07,140 --> 00:22:09,900 mi manera de avisar 489 00:22:09,900 --> 00:22:11,980 de que algo raro ha pasado, ¿cuál sería? 490 00:22:12,599 --> 00:22:13,579 si se ha metido o no 491 00:22:13,579 --> 00:22:14,319 con un drop 492 00:22:14,319 --> 00:22:17,940 con una, lanzando 493 00:22:17,940 --> 00:22:20,019 una excepción, tendría que crearme 494 00:22:20,019 --> 00:22:21,940 una excepción y lanzarla desde aquí 495 00:22:21,940 --> 00:22:23,819 y esa sería la manera que 496 00:22:23,819 --> 00:22:25,920 el listener se enteraría de que algo raro 497 00:22:25,920 --> 00:22:27,420 ha pasado, ¿vale? 498 00:22:28,180 --> 00:22:29,799 porque no se puede enterar por el valor 499 00:22:29,799 --> 00:22:31,759 de retorno, bueno, a menos que el método 500 00:22:31,759 --> 00:22:33,799 si te devuelve nul es que no ha funcionado 501 00:22:33,799 --> 00:22:35,720 y tú lo puedes sacar a partir de ahí 502 00:22:35,720 --> 00:22:37,720 pero lo que quiero decir es que 503 00:22:37,720 --> 00:22:39,700 tenemos dos maneras de avisar 504 00:22:39,700 --> 00:22:41,420 desde luego jamás lo haríamos con un 505 00:22:41,420 --> 00:22:43,079 sys o system.out ha fallado 506 00:22:43,079 --> 00:22:45,019 porque aquí no hay consola por ningún lado 507 00:22:45,019 --> 00:22:46,500 esto es una interfaz gráfica 508 00:22:46,500 --> 00:22:50,059 o bien avisamos con el boolean porque el método no devuelve nada 509 00:22:50,059 --> 00:22:51,599 o bien nos creamos una excepción 510 00:22:51,599 --> 00:22:53,740 con ese mensaje y le hacemos aquí el flow 511 00:22:53,740 --> 00:22:55,400 vale, pues aquí 512 00:22:55,400 --> 00:22:56,259 ¿qué puede fallar? 513 00:22:56,819 --> 00:22:58,000 ¿puede fallar algo en este put? 514 00:22:58,720 --> 00:23:01,740 a ver, podría fallar que ya existiera 515 00:23:01,740 --> 00:23:03,500 el pedido y por tanto el put 516 00:23:03,500 --> 00:23:05,339 no funciona, porque cuando no funciona 517 00:23:05,339 --> 00:23:07,420 el put más que no funciona 518 00:23:07,420 --> 00:23:08,819 cuando no hace la inserción 519 00:23:08,819 --> 00:23:11,039 cuando ya existe algo con una clave 520 00:23:11,039 --> 00:23:13,460 pero no puede pasar 521 00:23:13,460 --> 00:23:15,480 porque la secuencia se aumenta, con lo cual aquí 522 00:23:15,480 --> 00:23:17,359 no se me ocurre nada que pueda 523 00:23:17,359 --> 00:23:19,200 fallar, salvo que 524 00:23:19,200 --> 00:23:21,480 pedido sea null, que algo haya fallado 525 00:23:21,480 --> 00:23:22,220 en la aplicación 526 00:23:22,220 --> 00:23:24,359 pues es que hasta eso 527 00:23:24,359 --> 00:23:27,460 conviene verificarlo, porque nunca sabemos 528 00:23:27,460 --> 00:23:29,680 a quién se le va a ocurrir a llamar insert pedido 529 00:23:29,680 --> 00:23:31,640 a lo mejor este map lo ha puesto 530 00:23:31,640 --> 00:23:33,579 a null, entonces hasta eso 531 00:23:33,579 --> 00:23:35,559 conviene verificarlo 532 00:23:35,559 --> 00:23:37,759 y decir, oye, si donde yo 533 00:23:37,759 --> 00:23:39,920 tengo que meter los datos es nul 534 00:23:39,920 --> 00:23:43,460 pues retún 535 00:23:43,460 --> 00:23:45,400 false, bueno, o podríamos 536 00:23:45,400 --> 00:23:46,299 depende de 537 00:23:46,299 --> 00:23:50,000 como sea el resto de mi aplicación 538 00:23:50,000 --> 00:23:51,279 pues 539 00:23:51,279 --> 00:23:53,400 podríamos crear un map nuevo 540 00:23:53,400 --> 00:23:55,640 eso claro, tendría yo que 541 00:23:55,640 --> 00:23:57,539 juntarme con todo el equipo y decidir 542 00:23:57,539 --> 00:23:59,640 cómo hacemos, pero bueno, vamos a optar 543 00:23:59,640 --> 00:24:01,880 por esta opción, si algo ha pasado 544 00:24:01,880 --> 00:24:03,500 y alguien ha eliminado el map 545 00:24:03,500 --> 00:24:05,859 yo quiero que insert no se inserte 546 00:24:05,859 --> 00:24:07,200 no quiero que genere uno nuevo 547 00:24:07,200 --> 00:24:09,180 vale, tendría que 548 00:24:09,180 --> 00:24:11,380 sentarme con los demás a decidir que quiero 549 00:24:11,380 --> 00:24:13,180 si el mapa ha desaparecido 550 00:24:13,180 --> 00:24:15,119 si quiero crear uno nuevo e insertarlo 551 00:24:15,119 --> 00:24:16,720 y ya está, y quedarme callado 552 00:24:16,720 --> 00:24:19,099 o quiero avisar de que, oye, este mapa ha desaparecido 553 00:24:19,099 --> 00:24:20,140 bueno, vamos a dejarlo así 554 00:24:20,140 --> 00:24:22,839 vale, pues lo que puede fallar aquí 555 00:24:22,839 --> 00:24:24,220 a mí no se me ocurre otra cosa 556 00:24:24,220 --> 00:24:26,279 en este código 557 00:24:26,279 --> 00:24:27,700 que 558 00:24:27,700 --> 00:24:31,809 no se me ocurre otra cosa 559 00:24:31,809 --> 00:24:34,609 que aquí haya un null pointer exception 560 00:24:34,609 --> 00:24:37,609 bueno, a ver, si nos ponemos muy muy muy exquisitos 561 00:24:37,609 --> 00:24:39,849 también podría fallar esta cosa 562 00:24:39,849 --> 00:24:41,190 si le pasamos un pedido null 563 00:24:41,190 --> 00:24:43,710 porque aquí también saldría un null pointer exception 564 00:24:43,710 --> 00:24:45,450 si nos ponemos ya el colmo 565 00:24:45,450 --> 00:24:47,230 de hacer el método más robusto del universo 566 00:24:47,230 --> 00:24:48,829 que no pare la aplicación 567 00:24:48,829 --> 00:24:51,089 porque imaginaos que alguien llama a este método 568 00:24:51,089 --> 00:24:52,710 pasándole un null 569 00:24:52,710 --> 00:24:55,789 si alguien llama a este método 570 00:24:55,789 --> 00:24:57,750 mal, que las cosas se llaman 571 00:24:57,750 --> 00:24:59,450 mal a veces si le llama un null 572 00:24:59,450 --> 00:25:01,529 aquí va a salir un pedazo 573 00:25:01,529 --> 00:25:02,670 null pointer exception 574 00:25:02,670 --> 00:25:05,549 parece una tontería, pero el usuario se le ha roto 575 00:25:05,549 --> 00:25:07,309 la aplicación, ni interfaz gráfica 576 00:25:07,309 --> 00:25:09,089 ni leches, pum, todo ha desaparecido 577 00:25:09,089 --> 00:25:11,269 entonces, hombre, si la aplicación 578 00:25:11,269 --> 00:25:13,730 está bien hecha, está todo bien coordinado 579 00:25:13,730 --> 00:25:15,509 la interfaz gráfica no tiene la opción 580 00:25:15,509 --> 00:25:16,589 de pasarle un DUN 581 00:25:16,589 --> 00:25:19,230 bueno, hombre, claro que tiene 582 00:25:19,230 --> 00:25:21,410 o sea, es que no es 583 00:25:21,410 --> 00:25:23,009 la interfaz gráfica, eres tú en el list 584 00:25:23,009 --> 00:25:24,269 en el que decides lo que pasas 585 00:25:24,269 --> 00:25:26,309 entonces, bueno, esto ya sí que es 586 00:25:26,309 --> 00:25:27,549 ¿alguien está llamando por aquí? 587 00:25:28,430 --> 00:25:29,809 sí, perdono 588 00:25:29,809 --> 00:25:33,650 Ah, vale, que es cambio de clase