© FUOC • P05/75062/00112 6 <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>nteAl <strong>de</strong>sarrol<strong>la</strong>r aplicaciones más reales, nos encontramos con problemas gran<strong>de</strong>sy complejos.Los enunciados <strong>de</strong> problemas complejos hacen referencia a objetos queno tienen una correspon<strong>de</strong>ncia directa con los tipos elementales <strong>de</strong> <strong>la</strong>notación algorítmica.El tratamiento <strong>de</strong> estos objetos pue<strong>de</strong> no ser elemental y, asimismo, tambiénpue<strong>de</strong> llevar a un número <strong>de</strong> sentencias y <strong>de</strong>c<strong>la</strong>raciones excesivamente elevado,si expresamos todo lo que hay que hacer como una composición secuencial<strong>de</strong> asignaciones, iteraciones y/o alternativas.El resultado es un algoritmo <strong>de</strong> muchas páginas, difícil <strong>de</strong> seguir y, por lo tanto,también <strong>de</strong> saber si funciona, y lleno <strong>de</strong> <strong>de</strong>talles (algunas veces repetidos)que lo hacen prácticamente ilegible. El número <strong>de</strong> <strong>de</strong>talles que hay que teneren cuenta es excesivo, y nuestra capacidad <strong>de</strong> ser conscientes <strong>de</strong> todos los <strong>de</strong>talleses limitada. Pensar estos enunciados en términos <strong>de</strong> los elementos básicos<strong>de</strong>l lenguaje, sin unas pautas que seguir, nos pue<strong>de</strong> comportar muchosquebra<strong>de</strong>ros <strong>de</strong> cabeza y bastante dispersión mental, <strong>de</strong> forma que disminuyenuestra capacidad <strong>de</strong> comprensión sobre lo que hacemos y, por lo tanto,nuestra seguridad sobre si estamos realizando un algoritmo correcto y legible(mantenible). Con estas circunstancias, llegamos a <strong>la</strong> conclusión <strong>de</strong> que <strong>la</strong> notaciónalgorítmica es tan elemental que hace incómodo y poco práctico el <strong>de</strong>sarrollo<strong>de</strong> aplicaciones reales, y <strong>de</strong> que haría falta un lenguaje más cómodoque comprendiese objetos más reales.¿Os imagináis...... lo que conseguiríamos si expusiésemosel funcionamiento<strong>de</strong> un programa en términos<strong>de</strong>l movimiento <strong>de</strong> electronesque hay por <strong>la</strong>s pistas <strong>de</strong> cobre<strong>de</strong> <strong>la</strong> p<strong>la</strong>ca <strong>de</strong> circuito impresoy en el silicio <strong>de</strong> vuestro or<strong>de</strong>nador?Acabaríamos confundidosy distraídos por el exceso<strong>de</strong> información en <strong>la</strong> exposición,y per<strong>de</strong>ríamos toda referenciaa aquello <strong>de</strong> lo queestamos hab<strong>la</strong>ndo.Si este apreciado lenguaje existiese, con <strong>la</strong> cantidad y <strong>la</strong> variedad <strong>de</strong> problemasque hay por resolver, tendría un número tan gran<strong>de</strong> <strong>de</strong> acciones y tipos quenunca acabaríamos <strong>de</strong> conocerlo a fondo. Se pue<strong>de</strong>n encontrar algunos lenguajesespecíficos para algunas aplicaciones concretas, pero cuando no los encontramos,¿qué hacemos?La notación algorítmica tiene los suficientes elementos para construircualquier algoritmo que <strong>de</strong>seemos a partir <strong>de</strong> los tipos elementales, <strong>la</strong>asignación y <strong>la</strong>s composiciones algorítmicas. El lenguaje algorítmicotambién permite ampliar el propio lenguaje <strong>de</strong>finiendo y construyendotipos más complejos y <strong>de</strong>finiendo <strong>la</strong>s acciones y/o funciones que másnos convengan.Con <strong>la</strong>s características <strong>de</strong>l lenguaje algorítmico, todo lo que nos hace falta essaber qué <strong>metodología</strong> <strong>de</strong>bemos seguir para llevar a buen fin el <strong>diseño</strong> <strong>de</strong> unproblema complejo. Esta <strong>metodología</strong> consistirá en <strong>de</strong>scomponer un proble-
© FUOC • P05/75062/00112 7 <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>ntema complejo en subproblemas más sencillos e in<strong>de</strong>pendientes entre sí. La solución<strong>de</strong> estos subproblemas implicará <strong>la</strong> solución <strong>de</strong>l problema. Por otro<strong>la</strong>do, <strong>la</strong> <strong>de</strong>scomposición <strong>de</strong>l problema se hace mediante <strong>la</strong> abstracción.La abstracción es el resultado <strong>de</strong> ais<strong>la</strong>r ciertos aspectos (cualidad, atributos,etc.) <strong>de</strong> un todo para po<strong>de</strong>r razonar o pensar <strong>de</strong> forma más cómoday menos dispersa (en nuestro caso, para <strong>la</strong> solución <strong>de</strong> problemas).En el fondo, se trata <strong>de</strong> simplificar alguna realidad y reducir<strong>la</strong> sólo a los aspectosque tengan una especial relevancia o un interés <strong>de</strong>terminado para lo queestamos pensando o haciendo.Hemos estado utilizando <strong>la</strong> abstracción prácticamente <strong>de</strong>s<strong>de</strong> el inicio <strong>de</strong>l curso:el mo<strong>de</strong>lo <strong>de</strong> secuencia, los esquemas (que podríamos consi<strong>de</strong>rar como algoritmosabstractos), etc. A partir <strong>de</strong> este módulo, sin embargo, tendremos queapren<strong>de</strong>r a abstraer <strong>de</strong> forma más a<strong>de</strong>cuada problemas más complejos que losque hemos trabajado hasta ahora. Deberemos <strong>de</strong>scomponer el problema ensubproblemas más sencillos. Este módulo os proporcionará <strong>la</strong>s técnicas necesariaspara hacerlo (herramientas <strong>de</strong> <strong>la</strong> notación para abstraer datos y abstraercódigo) y una <strong>metodología</strong> a seguir (<strong>diseño</strong> <strong>de</strong>scen<strong>de</strong>nte).