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

12.07.2015 Views

© 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.

© 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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!