Introducción a la metodología de diseño descendente
Introducción a la metodología de diseño descendente Introducción a la metodología de diseño descendente
© FUOC • P05/75062/00112 26 Introducción a la metodología de diseño descendenteEl resto de funciones son obvias:funcion ultimaPalabra(m: tPalabra): booleanoretorna m.final o m.vacioffuncionfuncion palabraVacia(m: tPalabra): booleanoretorna m.vaciaffuncionfuncion hayQueCorregirPalabra(m: tPalabra): booleanoretorna m.hayQueCorregirffuncionCon esto llegamos al final de la solución del ejercicio. Habréis notado la cantidadde detalles que han sido necesarios para llegar a la solución. El análisisha sido complicado a causa de los detalles que se debían tener en cuenta, sobretodo en la etapa en que trabajábamos con frases como secuencias de palabras.Sin embargo, la separación de los problemas nos ha ayudado a concentrarnosde forma más cómoda en estos detalles, algo que no hubiese ocurrido si hubiéramostenido en cuenta todos los detalles del problema al mismo tiempo.1.8. Valoración final de la metodología¿Realmente es tan útil el método propuesto? Si lo hubiésemos pensado sólo encaracteres, sin utilizar ninguna abstracción ni separación de problemas, podríamoshaber llegado a una solución como ésta:algoritmo churrovarc: caracter;N1, N2, N3, N4, Mx: entero;FF, A, DP: booleano;fvarN1 := 0;Mx := 0;N2 := 0;N3 := 0;N4 := 0;A := falso;FF := cierto;c := leerCaracter();mientras (no FF) o (c ≠ ‘.’) hacersi (c ≠ ‘ ’) entoncesFF := falso;si no A entoncesA := c = ‘*’fsic := leerCaracter();si (c = ‘ ’) entoncessi A entoncesN2 := N2 + 1;A := falsofsiDP := c = ‘.’;c := LeerCaracter()fsisinoDP := c = ‘.’;c := LeerCaracter()fsi
© FUOC • P05/75062/00112 27 Introducción a la metodología de diseño descendentesi DP entoncesfsifalgoritmoFF := cierto;N3 := N3 + 1;si N2 > 0 entoncesN4 := N4 + 1fsiN1:= N1 + N2;si N2 > Mx entoncesMx := N2fsiN2 := 0fmientrassi N3 > 0 entoncesescribirReal(enteroAReal(N4) / enteroAReal(N3) ∗ 100.0);escribirReal(enteroAReal(N1) / enteroAReal(N4));escribirEntero(Mx);fsiAhora la discusión consiste en saber si vale la pena llegar a este tipo de solución.Es conveniente que os preguntéis:• ¿Os es fácil tener la certeza de que esta solución funciona sin probarla en elordenador, e incluso probándola?• ¿Creéis que, al ser un texto más corto, debe ser más eficiente cuando sea procesado?• ¿Creéis que, al ser un texto más corto, harán falta menos horas de desarrollo?• ¿Creéis que con muchos comentarios sería más inteligible que la soluciónanterior, basada en el método que hemos propuesto?• ¿Creéis que es fácil de modificar, de mantener o de entender por alguien opor vosotros mismos después de un tiempo?Esta serie de preguntas, en el caso de que consideréis lo que hemos ido proponiendoa lo largo del curso, tiene una respuesta única: no.Los numerosos detalles que aparecen en el algoritmo lo hacen muy poco prácticopara que nos convenzamos de que funciona. Debemos estar muy concentradosy atentos para estar seguros: ¿avanza bien la secuencia?, ¿acabará bien?¿están bien las inicializaciones?, etc. Si alguien propone un algoritmo de estetipo posiblemente lo haya ido probando en el ordenador, modificándolo continuamentedesde una versión inicial, hasta que algunas pruebas le han dado laconfianza de que es correcto, pero no la absoluta certeza. “¿Qué prueba le falta?”,es su duda. Se habrán hecho múltiples relecturas (entre otras cosas, podríaPensad...... además, que es más fácilrealizar pruebas si el problemaestá descompuesto en accionesy/o funciones para que podamoscomprobar qué tarearealiza cada función.
- Page 1: Introduccióna la metodologíade di
- Page 5 and 6: © FUOC • P05/75062/00112 5 Intro
- Page 7 and 8: © FUOC • P05/75062/00112 7 Intro
- Page 9 and 10: © FUOC • P05/75062/00112 9 Intro
- Page 11 and 12: © FUOC • P05/75062/00112 11 Intr
- Page 13 and 14: © FUOC • P05/75062/00112 13 Intr
- Page 15 and 16: © FUOC • P05/75062/00112 15 Intr
- Page 17 and 18: © FUOC • P05/75062/00112 17 Intr
- Page 19 and 20: © FUOC • P05/75062/00112 19 Intr
- Page 21 and 22: © FUOC • P05/75062/00112 21 Intr
- Page 23 and 24: © FUOC • P05/75062/00112 23 Intr
- Page 25: © FUOC • P05/75062/00112 25 Intr
- Page 29 and 30: © FUOC • P05/75062/00112 29 Intr
- Page 31 and 32: © FUOC • P05/75062/00112 31 Intr
- Page 33 and 34: © FUOC • P05/75062/00112 33 Intr
- Page 35: © FUOC • P05/75062/00112 35 Intr
- Page 38 and 39: © FUOC • P05/75062/00112 38 Intr
- Page 40 and 41: © FUOC • P05/75062/00112 40 Intr
- Page 42 and 43: © FUOC • P05/75062/00112 42 Intr
- Page 44 and 45: © FUOC • P05/75062/00112 44 Intr
- Page 46 and 47: © FUOC • P05/75062/00112 46 Intr
- Page 48 and 49: © FUOC • P05/75062/00112 48 Intr
- Page 50 and 51: © FUOC • P05/75062/00112 50 Intr
- Page 52 and 53: © FUOC • P05/75062/00112 52 Intr
- Page 54 and 55: © FUOC • P05/75062/00112 54 Intr
- Page 56 and 57: © FUOC • P05/75062/00112 56 Intr
© FUOC • P05/75062/00112 27 <strong>Introducción</strong> a <strong>la</strong> <strong>metodología</strong> <strong>de</strong> <strong>diseño</strong> <strong>de</strong>scen<strong>de</strong>ntesi DP entoncesfsifalgoritmoFF := cierto;N3 := N3 + 1;si N2 > 0 entoncesN4 := N4 + 1fsiN1:= N1 + N2;si N2 > Mx entoncesMx := N2fsiN2 := 0fmientrassi N3 > 0 entoncesescribirReal(enteroAReal(N4) / enteroAReal(N3) ∗ 100.0);escribirReal(enteroAReal(N1) / enteroAReal(N4));escribirEntero(Mx);fsiAhora <strong>la</strong> discusión consiste en saber si vale <strong>la</strong> pena llegar a este tipo <strong>de</strong> solución.Es conveniente que os preguntéis:• ¿Os es fácil tener <strong>la</strong> certeza <strong>de</strong> que esta solución funciona sin probar<strong>la</strong> en elor<strong>de</strong>nador, e incluso probándo<strong>la</strong>?• ¿Creéis que, al ser un texto más corto, <strong>de</strong>be ser más eficiente cuando sea procesado?• ¿Creéis que, al ser un texto más corto, harán falta menos horas <strong>de</strong> <strong>de</strong>sarrollo?• ¿Creéis que con muchos comentarios sería más inteligible que <strong>la</strong> soluciónanterior, basada en el método que hemos propuesto?• ¿Creéis que es fácil <strong>de</strong> modificar, <strong>de</strong> mantener o <strong>de</strong> enten<strong>de</strong>r por alguien opor vosotros mismos <strong>de</strong>spués <strong>de</strong> un tiempo?Esta serie <strong>de</strong> preguntas, en el caso <strong>de</strong> que consi<strong>de</strong>réis lo que hemos ido proponiendoa lo <strong>la</strong>rgo <strong>de</strong>l curso, tiene una respuesta única: no.Los numerosos <strong>de</strong>talles que aparecen en el algoritmo lo hacen muy poco prácticopara que nos convenzamos <strong>de</strong> que funciona. Debemos estar muy concentradosy atentos para estar seguros: ¿avanza bien <strong>la</strong> secuencia?, ¿acabará bien?¿están bien <strong>la</strong>s inicializaciones?, etc. Si alguien propone un algoritmo <strong>de</strong> estetipo posiblemente lo haya ido probando en el or<strong>de</strong>nador, modificándolo continuamente<strong>de</strong>s<strong>de</strong> una versión inicial, hasta que algunas pruebas le han dado <strong>la</strong>confianza <strong>de</strong> que es correcto, pero no <strong>la</strong> absoluta certeza. “¿Qué prueba le falta?”,es su duda. Se habrán hecho múltiples relecturas (entre otras cosas, podríaPensad...... a<strong>de</strong>más, que es más fácilrealizar pruebas si el problemaestá <strong>de</strong>scompuesto en accionesy/o funciones para que podamoscomprobar qué tarearealiza cada función.