© FUOC • P05/75062/00112 32 <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>nteque se <strong>de</strong>ben diseñar con el fin <strong>de</strong> que, combinadas <strong>de</strong> forma conveniente, alcancenel objetivo final. En estos casos, cada acción o función (elemental ono) resuelve un subobjetivo, y compuestas a<strong>de</strong>cuadamente resolverán el objetivofinal <strong>de</strong>l algoritmo.Las pautas expuestas hasta ahora son también aplicables a problemas complejosque no pue<strong>de</strong>n ser expresados directamente con los elementos <strong>de</strong> <strong>la</strong> notaciónalgorítmica. Ahora ampliaremos <strong>la</strong>s indicaciones que nos servirán parap<strong>la</strong>ntear estos tipos <strong>de</strong> problemas más complejos.Cuando nos hal<strong>la</strong>mos ante un problema complejo, <strong>de</strong>bemos encontrar abstraccionesconvenientes que simplifiquen los <strong>de</strong>talles que hay que tener en cuentaen el p<strong>la</strong>nteamiento <strong>de</strong>l problema, y que por ello nos permitan resolverlo concomodidad y con suficiente c<strong>la</strong>ridad (por ejemplo, que facilite <strong>la</strong> aplicación <strong>de</strong>los esquemas). Una vez que hemos elegido estas abstracciones, <strong>de</strong>bemos mantener<strong>la</strong>sa lo <strong>la</strong>rgo <strong>de</strong>l p<strong>la</strong>nteamiento <strong>de</strong>l problema; es <strong>de</strong>cir, no <strong>de</strong>bemos entraren <strong>de</strong>talles que correspon<strong>de</strong>rán a otro nivel <strong>de</strong> <strong>diseño</strong> <strong>de</strong>scen<strong>de</strong>nte.Recordad que…... los esquemas algorítmicosno imponen ninguna restricciónrespecto <strong>de</strong>l tipo <strong>de</strong> loselementos <strong>de</strong> <strong>la</strong> secuencia y,por lo tanto, se pue<strong>de</strong>n aplicara secuencias <strong>de</strong> tipos no elementales<strong>de</strong>finidos mediantetup<strong>la</strong>s y tab<strong>la</strong>s, para resolverproblemas más complejos.Estamos haciendo una abstracción<strong>de</strong> datos.Al aplicar <strong>la</strong> <strong>metodología</strong> <strong>de</strong> <strong>diseño</strong> <strong>de</strong>scen<strong>de</strong>nte, i<strong>de</strong>ntificaremos <strong>la</strong> secuencia<strong>de</strong> elementos abstractos; cuando apliquemos el esquema elegido, <strong>de</strong>beremos <strong>de</strong>finiracciones y/o funciones correspondientes a <strong>la</strong> i<strong>de</strong>ntificación <strong>de</strong>l primer elemento,el siguiente y <strong>la</strong> marca <strong>de</strong> elemento. De este modo, en lugar <strong>de</strong> concretar<strong>la</strong>s operaciones anteriores con sentencias y tipos elementales <strong>de</strong>l lenguaje, <strong>la</strong>sencapsu<strong>la</strong>mos mediante acciones y/o funciones con tipos no elementales queescon<strong>de</strong>n los <strong>de</strong>talles concretos <strong>de</strong> <strong>la</strong> abstracción o <strong>la</strong>s abstracciones realizadas.Suponer <strong>la</strong> existencia <strong>de</strong> un tipo no elemental con un conjunto <strong>de</strong> acciones y/o funciones que no existen no nos <strong>de</strong>be comportar ningún problema: siemprelos podremos diseñar más a<strong>de</strong><strong>la</strong>nte.En el momento <strong>de</strong> formu<strong>la</strong>r un esquema sobre los datos abstractos, <strong>de</strong>beremosintroducir tantas acciones y funciones y tipos nuevos como sea necesario. Deeste modo, <strong>la</strong> aplicación <strong>de</strong> <strong>la</strong> <strong>metodología</strong> <strong>de</strong>l <strong>diseño</strong> <strong>de</strong>scen<strong>de</strong>nte comporta<strong>la</strong> creación <strong>de</strong> nuevos enunciados <strong>de</strong> subproblemas (tipos, acciones y funciones),que se <strong>de</strong>berán p<strong>la</strong>ntear en su nivel correspondiente (y, por lo tanto, porcada subproblema <strong>de</strong>beremos enten<strong>de</strong>r el enunciado, p<strong>la</strong>ntearlo, formu<strong>la</strong>rlo yevaluarlo; si el subproblema no es suficientemente concreto, dará lugar a otrossubproblemas que habrá que resolver). Iremos siguiendo este proceso <strong>de</strong> formasucesiva, hasta que sea posible aplicar los esquemas directamente sobre los datosreales <strong>de</strong>l problema.Estamos haciendo una abstracción<strong>de</strong> código.Por lo tanto, en cada nivel más concreto <strong>de</strong>l <strong>diseño</strong> <strong>de</strong>scen<strong>de</strong>nte tendremos quehacer primero un p<strong>la</strong>nteamiento <strong>de</strong>l nivel, y a continuación el p<strong>la</strong>nteamiento,<strong>la</strong> formu<strong>la</strong>ción y <strong>la</strong> evaluación <strong>de</strong> cada uno <strong>de</strong> los subproblemas para resolveren el nivel <strong>de</strong> trabajo.
© FUOC • P05/75062/00112 33 <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>nte• Para cada abstracción correspondiente al nivel <strong>de</strong> <strong>de</strong>scomposición es necesariorepresentar los tipos que hay que trabajar en <strong>de</strong>talle y que todavía nose han <strong>de</strong>finido.• Para cada acción y/o función ya especificada (subproblema) que se <strong>de</strong>be <strong>de</strong>sarrol<strong>la</strong>ren este nivel, hay que:– Reconocer, si hace falta, <strong>la</strong> secuencia que hay que tratar. En estos casoses más complicado, ya que los datos abstractos a<strong>de</strong>cuados que forman<strong>la</strong> secuencia <strong>de</strong>ben ser i<strong>de</strong>ntificados.– Decidir el esquema que se <strong>de</strong>be aplicar sobre <strong>la</strong> secuencia abstracta. Comosiempre, es necesario observar cuál <strong>de</strong> los esquemas que conocemos (búsqueday recorrido) nos ayudará a resolver el problema.– Aplicar el esquema elegido al problema concreto, efectuando <strong>la</strong>s variacionesque convengan en cada caso. La aplicación se <strong>de</strong>be hacer respetando<strong>la</strong>s abstracciones que correspondan a otro nivel más concreto, enel caso <strong>de</strong> que existan.– Especificar <strong>la</strong>s acciones y funciones auxiliares que hayan aparecido enel paso anterior.El punto c<strong>la</strong>ve en <strong>la</strong> abstracción <strong>de</strong> código consiste en <strong>de</strong>terminar cuálesson los niveles <strong>de</strong> abstracción a<strong>de</strong>cuados. Normalmente, los objetos quetrata el problema son el criterio que seguimos en el momento <strong>de</strong> <strong>de</strong>terminarlos niveles y <strong>de</strong>scomponer el problema.Notad que…… normalmente hacemosuna <strong>de</strong>scomposición orientadaa objetos.En cada nivel <strong>de</strong> <strong>de</strong>scomposición expresamos los algoritmos en función <strong>de</strong>unos tipos, acciones y funciones que <strong>de</strong>sarrol<strong>la</strong>remos en el siguiente nivel. Laabstracción que hemos hecho en cada nivel nos permite concentrarnos sóloen <strong>la</strong> resolución <strong>de</strong> un subproblema concreto; no tenemos por qué preocuparnos<strong>de</strong> cómo se diseñan los tipos, acciones y funciones que necesitamos; simplementelos utilizamos sabiendo qué hacen y, más a<strong>de</strong><strong>la</strong>nte, en otros niveles,ya los iremos diseñando.La <strong>de</strong>scomposiciónen niveles...... se pue<strong>de</strong> enten<strong>de</strong>r como situviésemos un procesador distintopara cada uno que fuesecapaz <strong>de</strong> enten<strong>de</strong>r todos lostipos, <strong>la</strong>s acciones y <strong>la</strong>s funcionesque aún esperan a ser <strong>de</strong>sarrol<strong>la</strong>dos.Recordad que para cada nivel <strong>de</strong> abstracción <strong>de</strong> <strong>diseño</strong> iría bien releer el enunciado,con el fin <strong>de</strong> captar los <strong>de</strong>talles que son relevantes.Notad que, a pesar <strong>de</strong> toda <strong>la</strong> exposición que acabamos <strong>de</strong> hacer sobre <strong>la</strong> tipología<strong>de</strong> problemas que po<strong>de</strong>mos resolver en este curso, todavía nos faltaría añadir uncaso. Nos po<strong>de</strong>mos encontrar ante un problema en el que no reconozcamos oi<strong>de</strong>ntifiquemos ninguna secuencia que nos convenga al p<strong>la</strong>ntearlo. En este caso,<strong>de</strong>beremos <strong>de</strong>scubrir el or<strong>de</strong>n <strong>de</strong> <strong>la</strong>s acciones que pue<strong>de</strong>n alcanzar el objetivo queque preten<strong>de</strong> el algoritmo.En ocasiones el número <strong>de</strong> acciones elementales que se <strong>de</strong>ben proponer paraconseguir un objetivo pue<strong>de</strong> ser excesivo; en este caso conviene reconocer <strong>la</strong>s