© FUOC • P05/75062/00112 34 <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>ntediferentes etapas que alcanzan subobjetivos parciales que, al componerse, proporcionanel objetivo final. Cada una <strong>de</strong> estas etapas se encapsu<strong>la</strong> mediante accionesy funciones. De este modo obtenemos legibilidad e inteligibilidad en <strong>la</strong>ssoluciones formu<strong>la</strong>das. La orientación <strong>de</strong> <strong>la</strong> <strong>de</strong>scomposición es funcional. Notadque esto que acabamos <strong>de</strong> comentar es aplicable a subproblemas provenientes<strong>de</strong> una <strong>de</strong>scomposición orientada a objetos (por ejemplo, el tratamiento <strong>de</strong>un elemento abstracto <strong>de</strong> una secuencia).3. Formu<strong>la</strong>r <strong>la</strong> soluciónUna vez que ya sabemos cómo queremos resolver el problema, sólo nos haráfalta formu<strong>la</strong>r <strong>la</strong> solución en <strong>la</strong> notación algorítmica que hemos <strong>de</strong>finido. Deeste modo, podremos expresar con precisión y rigor el algoritmo que resuelveel problema.Recordad que…... cuando formuléis vuestrosalgoritmos, <strong>de</strong>béis seguirestrictamente <strong>la</strong> notaciónalgorítmica que hemos <strong>de</strong>finidopara evitar ambigüeda<strong>de</strong>s.Ya conocemos <strong>la</strong> sintaxis y <strong>la</strong> semántica <strong>de</strong> cada uno <strong>de</strong> los elementos y, en elsiguiente cuadro, se sintetizan <strong>la</strong>s construcciones <strong>de</strong>l lenguaje algorítmico.
© FUOC • P05/75062/00112 35 <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>nte4. Evaluar <strong>la</strong> soluciónDe momento no hemos introducido ningún método formal para verificar <strong>la</strong> corrección<strong>de</strong> un algoritmo. Es <strong>de</strong>cir, <strong>de</strong>bemos hacerlo informalmente, medianteel razonamiento sobre <strong>la</strong> semántica <strong>de</strong> los elementos y <strong>la</strong>s construcciones <strong>de</strong>llenguaje algorítmico que hayamos utilizado, y mediante <strong>la</strong> comprobación, pasoa paso, <strong>de</strong> que los hemos ido componiendo <strong>de</strong> modo a<strong>de</strong>cuado para conseguirfinalmente <strong>la</strong> postcondición <strong>de</strong>seada.Los comentarios que hayamosinsertado en el momento <strong>de</strong> hacerel <strong>diseño</strong>, como ya sabéis, nosayudarán a llevar a cabo estareflexión.De todas formas, el uso <strong>de</strong> <strong>la</strong> <strong>metodología</strong> <strong>de</strong> <strong>diseño</strong> y aplicación a<strong>de</strong>cuada <strong>de</strong>los esquemas <strong>de</strong> recorrido y búsqueda nos asegura <strong>la</strong> corrección <strong>de</strong> los tratamientossecuenciales que hayamos hecho. Recordad que un esquema es una especie<strong>de</strong> p<strong>la</strong>ntil<strong>la</strong> cuyo funcionamiento conocemos muy bien, y que utilizamospara solucionar un tipo concreto <strong>de</strong> problemas; por lo tanto, si lo aplicamos correctamente,nos conducirá a resultados también correctos.El uso combinado <strong>de</strong>l <strong>diseño</strong> <strong>de</strong>scen<strong>de</strong>nte y <strong>de</strong> los mecanismos <strong>de</strong> abstracciónno sólo beneficia al <strong>diseño</strong>, sino que también favorece otras etapas <strong>de</strong>l <strong>de</strong>sarrollo<strong>de</strong> programas:Como vimos en el módulo“<strong>Introducción</strong> a <strong>la</strong> programación”<strong>la</strong>s etapas <strong>de</strong> <strong>de</strong>sarrollo <strong>de</strong> un programason el análisis <strong>de</strong> requerimientos,el <strong>diseño</strong>, <strong>la</strong> implementación, <strong>la</strong>s pruebasy el mantenimiento.• El proceso <strong>de</strong> <strong>de</strong>sarrollo: gracias al hecho <strong>de</strong> parce<strong>la</strong>r <strong>la</strong> complejidad <strong>de</strong> losproblemas y <strong>de</strong> <strong>de</strong>scomponerlos sucesivamente en fragmentos menores,nos ocupamos en cada momento <strong>de</strong> <strong>la</strong> resolución <strong>de</strong> un único problema <strong>de</strong>dimensiones más manejables.• La puesta a punto: los fragmentos que componen los programas se pue<strong>de</strong>nprobar por separado (individualmente cada acción y función), y poco a poco.• El mantenimiento: <strong>la</strong>s modificaciones posteriores que será necesario realizardurante <strong>la</strong> vida útil <strong>de</strong> un programa, normalmente, tienen un impactolocalizado sólo en unas pocas acciones; el resto <strong>de</strong>l programa no se ve afectadoy, por lo tanto, el hecho <strong>de</strong> tenerlo <strong>de</strong>scompuesto facilita su modificación.Por otro <strong>la</strong>do, si los programas tienen una estructura más c<strong>la</strong>ra, resultamás fácil y seguro modificarlos.• La reutilización <strong>de</strong>l código: si se <strong>de</strong>sarrol<strong>la</strong>n programas que tratan con objetossimi<strong>la</strong>res, seguramente podremos aprovechar estos <strong>diseño</strong>s <strong>de</strong> tiposya hechos por otros programas, así como <strong>la</strong>s funciones y <strong>la</strong>s acciones quetraten.• La legibilidad: los programas que nos resultan <strong>de</strong>spués <strong>de</strong> aplicar <strong>la</strong>s técnicas<strong>de</strong> <strong>diseño</strong> <strong>de</strong>scen<strong>de</strong>nte y los esquemas están estructurados, por lo queson más fáciles <strong>de</strong> leer y analizar.