Sei sulla pagina 1di 6

Tcnicas de Diseo de Programas

Por J. F. Daz (jfdiaz98@hotmail.com) Lic. en Ciencias de la Computacin Existen en la programacin varias metodologas para el diseo de software. Algunas de ellas, como la de programacin monoltica, han demostrado ser contraproducentes para el desarrollo de software a gran escala y han sido reemplazadas por nuevas propuestas, ms verstiles y eficientes. Otras en cambio siguen vigentes bajo nuevas formas de expresin y filosofas de programacin, tal es el caso de la programacin modular y su aplicacin en la Programacin Orientada a Objetos. En particular, estas dos metodologas, la monoltica y la modular, son el tema de este artculo. Al final se presentan adems algunas sencillas tcnicas de programacin basadas en la programacin modular que pueden serte de utilidad en tu aprendizaje del Arte de la Programacin. Que las aprovoches!

Contenido
Enfoque Monoltico o Programacin No Estructurada Programacin Procedimiental Programacin Modular Tcnicas de Diseo Modular Mtodo Descendente (Top-Down) Mtodo Ascendente (Bottom-Up) Otras Tcnicas de Diseo Mtodo de la Lnea Recta Enfoque E-P-S Programacin Orientada a Objetos (POO)

Enfoque Monoltico o Programacin No Estructurada


Este era el mtodo de diseo de facto en los primeros das de la programacin, cuando no existan grandes adelantos en la teora de desarrollo de software, y es la forma como se empieza a aprender a programar. Consiste en organizar secuencialmente bloques de instrucciones y llamadas a otros bloques segn la lgica de solucin del problema, accesando y modificando datos globales a todo el programa. Aqu, el uso de instrucciones de salto condicionales e incondicionales para llamar a ejecucin a un bloque de instrucciones y su correspondiente retorno al punto de llamada era la norma. A este estilo de codificacin (ms bien al cdigo resultante) se le denomina espaguetti. Figura 1: Programacin No Estructurada. El cdigo completo del programa opera directamente sobre datos globales.

Muchos lenguajes de programacin no ofrecen mecanismos para el diseo estructurado de programas y la nica forma posible de desarrollo de software es haciendo uso de las instrucciones de salto (p. ej. Ensamblador, COBOL y BASIC). Por otro lado, los lenguajes modernos que proveen instrucciones de salto como herramientas alternativas o por compatibilidad con versiones previas tienen una amplia base de usuarios que continua creando cdigo espaguetti aun cuando el lenguaje les ofrece mecanismos para la programacin estructurada. En particular los usuarios del popular Visual Basic, en su mayora ex usuarios de COBOL y Clipper, abusan de las instrucciones de salto en sus aplicaciones puesto que ese fue el modo en que aprendieron a programar, lo que incide directamente en la lectura, prueba, depuracin y mantenimiento del cdigo.

Con el advenimiento de las modernas tcnicas de programacin este mtodo de programacin se volvi obsoleto, y en la actualidad apenas es utilizado en la programacin de drivers (manejadores de dispositivos) y chips de ROM, el llamado firmware. Esta tcnica de programacin ofrece tremendas desventajas una vez que el programa se hace suficientemente grande. Por ejemplo, si la misma secuencia de instrucciones se necesita en diferentes situaciones dentro del programa, la secuencia debe ser repetida. Esto ha conducido a la idea de extraer estas secuencias, darles un nombre y ofrecer una tcnica para llamarlas y regresar desde estos procedimientos.

Programacin Procedimiental
Es una de las ms importantes tcnicas de programacin jams inventada. Es uno de lo mtodos de diseo ms flexibles y potentes para mejorar la productividad en la programacin. Se fundamenta en una serie de descomposiciones sucesivas del problema inicial, y est inspirado en la tcnica "Divide y Vencers" que usaba el conquistador Alejandro Magno para derrotar a sus enemigos. Su utilizacin tiene muchos beneficios, entre los que se encuentran la facilidad en la escritura, lectura y comprensin de los programas y el permitir ahorrar espacio que de otro modo estara ocupado por cdigo duplicado. Con la programacin procedimental se pueden combinar las secuencias de instrucciones repetibles en un solo lugar. Una llamada de procedimiento se utiliza para invocar al procedimiento. Despus de que la secuencia es procesada, el flujo de control regresa al punto de llamada para proseguir con la ejecucin de la instruccin ubicada inmediatamente despus de la que hizo la llamada. Figura 2: Programacin Procedimental. El cdigo completo del programa opera directamente sobre datos globales.

Al introducir parmetros as como procedimientos de procedimientos (subprocedimientos) los programas ahora pueden ser escritos en forma ms estructurada y libres de errores. Por ejemplo, si un procedimiento ya es correcto, cada vez que es usado produce resultados correctos. Por consecuencia, en caso de errores, se puede reducir la bsqueda a aquellos lugares que todava no han sido revisados. De este modo, un programa puede ser visto como una secuencia de llamadas a procedimientos . El programa principal es responsable de pasar los datos a las llamadas individuales y acta como un director, los datos son procesados por los procedimientos y, una vez que el programa ha terminado, los datos resultantes son presentados. As, el flujo de datos puede ser ilustrado como una grfica jerrquica, un rbol, como se muestra en la Figura 3 para un programa sin subprocedimientos. Figura 3: Programacin Procedimental. El programa principal coordina las llamadas a procedimientos y pasa los datos apropiados en forma de parmetros.

Con esta metodologa el programa se divide en partes independientes, cada una de las cuales ejecuta una nica actividad o tarea y se codifican independientemente de los dems. Cada una de ellas se analiza, codifica y ponen a punto por separado. Siguiendo un mtodo ascendente o

descendente de desarrollo se llegar a la descomposicin final del problema en mdulos en forma jerrquica. Las descomposiciones resultantes reciben luego el refinamiento progresivo del repertorio de instrucciones que van a formar parte de cada pieza del programa. Si la tarea asignada a cada procedimiento es demasiado compleja, ste deber descomponerse en otros procedimientos ms pequeos. Este proceso de subdivisin sucesiva contina hasta que cada procedimiento tenga solamente una tarea especfica que realizar. Esta tarea puede ser entrada, salida, procesamiento de datos, control de otros procedimientos o una combinacin de estos. Un procedimiento puede tranferir temporalmente el control (bifurcacin) a otro. Sin embargo, cada procedimiento debe eventualmente devolver el control al procedimiento del que lo recibi. Sin embargo, los procedimientos son independientes en el sentido de que ninguno puede tener acceso directo a otro, excepto al mdulo al que llama y a sus propios submdulos. No obstante, los resultados producidos por un procedimiento pueden ser utilizados por cualquier otro cuando se transfiera el control a ellos. Dado que los procedimientos son independientes, diferentes programadores pueden trabajar simultneamente en diferentes partes del mismo programa. Esto reducir el tiempo de diseo del algoritmo y posterior codificacin. Adems un procedimiento se puede modificar radicalmente sin afectar a los dems, incluso sin alterar su funcin principal. Resumiendo: se tiene ahora un programa nico dividido en pequeas piezas llamadas procedimientos que interactuan entre si, fcilmente comprensible, modificable y flexible. Para posibilitar el uso de procedimientos generales o grupos de procedimientos tambin en otros programas, aqullos deben estar disponibles en forma separada. Por esa razn, la programacin modular permite el agrupamiento de procedimientos dentro de mdulos.

Programacin Modular
La programacin modular es una generalizacin de la programacin procedimental. Aqu los procedimientos con una funcionalidad comn son agrupados en mdulos separados. Un programa por consiguiente, ya no consiste solamente de una seccin. Ahora est dividido en varias secciones ms pequeas que interactan a travs de llamadas a procedimientos y que integran el programa en su totalidad. Figura 4: Programacin Modular. El programa principal coordina las llamadas a procedimientos en mdulos separados y pasa los datos apropiados en forma de parmetros.

Cada mdulo puede contener sus propios datos. Esto permite que cada mdulo maneje un estado interno que es modificado por las llamadas a procedimientos de ese mdulo. Sin embargo, solamente hay un estado por mdulo y cada mdulo existe cuando ms una vez en todo el programa.

Tcnicas de Diseo Modular


Las siguientes tcnicas se derivan directamente de la Programacin Modular.

Mtodo Descendente (Top-Down)


Tambin conocido como de arriba a abajo consiste en establecer una serie de niveles de mayor a menor complejidad que den solucin al problema. Luego se crea una relacin entre las etapas de la estructuracin de forma que una etapa jerrquica y su inmediato inferior se relacionen mediante una interfaz claramente definida de entradas y salidas de informacin. El Top-Down es muy popular por ser metodolgico para la enseanza de la programacin, por favorecer la rpida creacin de una estructura de diseo inicial flexible y fcil de comprender y por ser muy til en la solucin de problemas complejos.

Mtodo Ascendente (Bottom-Up)


El diseo ascendente se refiere a la identificacin de aquellos procesos que necesitan computarizarse conforme vayan apareciendo, su anlisis como sistema y su codificacin, o bien, la adquisicin de paquetes de software para satisfacer el problema inmediato. Cuando la programacin se realiza internamente y se hace un enfoque ascendente, es difcil llegar a integrar los subsistemas al grado tal de que el desempeo global sea fluido. Los problemas de integracin entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programacin alcanza la fecha lmite para la integracin total del sistema. En esta fecha, ya se cuenta con muy poco tiempo, presupuesto o paciencia de los usuarios, como para corregir aquellas delicadas interfaces, que en un principio, se ignoran. Aunque cada subsistema parece ofrecer lo que se requiere, cuando se contempla al sistema como una entidad global, ste padece de ciertas limitaciones por haber tomado un enfoque ascendente.

Una de ellas es la duplicacin de esfuerzos para accesar el software y ms an al introducir los datos. Otro es que se introducen al sistema muchos datos carentes de valor. Un tercero y tal vez el ms serio inconveniente del enfoque ascendente, es que los objetivos globales de la organizacin no fueron considerados y en consecuencia no se satisfacen. Sobra decir que esta tcnica de diseo es la menos usada por sus mltiples inconvenientes.

Otras Tcnicas de Diseo


Las siguientes tcnicas de diseo pueden conjugarse con las tcnicas de diseo modular antes mencionadas, tanto para el diseo de los mdulos como para estructurar la rutina principal del programa.

Mtodo de la Lnea Recta


Este mtodo es excelente para disear programas pequeos, programas complejos o para utilizarse como complemento a la modularizacin. Consiste en estructurar el flujo del programa para el caso de la solucin ms simple y fcil del problema, sin tomar en cuenta casos especiales, validaciones ni decisiones que provoquen bifurcaciones. De esta manera se construye un diseo inicial fcil de comprender y verificar. Una vez completado este diseo inicial y comprobada su correctitud, se procede a agregar por pasos las rutas alternas que representan las diferentes condiciones del planteamiento, lo cual significa aadir flujos de control adicionales y se prueba iterativamente el programa con cada nueva bifurcacin que se aada para asegurar que se mantiene la correctitud. Cuando todas las condiciones se han integrado al diseo, se proceden a agregar uno a uno los casos especiales que se espera maneje el programa, probando tambin cada nueva adicin para continuar garantizando la fiabilidad de la estructura. Por ltimo se aaden las validaciones a los datos de entrada, las de los datos intermedios producidos a lo interno para utilizarse en la generacin de los datos de salida, y los datos de salida mismos, por supuesto. Estas validaciones se integran tambin de manera incremental, procurando no alterar el estado del diseo alcanzado en las operaciones anteriores. Al final de todo este proceso se obtendr un diseo final completo, confiable y seguro. Aunque el mtodo implica tiempo y esfuerzo adicional, es muy adecuado para principiantes y para la solucin de problemas complejos que requieran un diseo fino y bien organizado.

Enfoque E-P-S
Este enfoque se fundamenta en el mtodo de diseo Top-Down. Con este enfoque el programa se divide en 3 mdulos bien diferenciados: el de Entrada, el de Procesamiento y el de Salida. De ah su nombre. Todos los mdulos se desarrollan y prueban de manera independiente, lo que permite al programador concentrarse en las funciones especficas de cada uno y evitar la carga mental de pensar en la solucin total del problema y la ofuscacin en el diseo e implementacin del programa completo.

Programacin Orientada a Objetos (POO)


En contraste con las anteriores tcnicas de programacin, ahora tenemos una telaraa de objetos interactuantes, cada uno de los cules manteniendo su propio estado al interactuar con los dems mediante mensajes. Figura 3: Programacin Orientada a Objetos. Los objetos del programa interactan mandando mensajes unos a otros.

La POO resuelve problemas importantes de la programacin modular. Entre ellos tenemos los siguientes: Ahora los datos no deben crearse y destruirse explcitamente, sino de manera automtica Los datos y las operaciones no estn desacoplados, conduciendo a una estructura centrada en los datos en lugar de centrada en los procedimientos (o los algoritmos) Mayor proteccin y seguridad de los datos y operaciones de los objetos, tanto de accesos externos como internos

Aunque aparentemente la POO parece una tcnica ms elegante de programacin modular, no lo es. Sus caractersticas adicionales particulares a la orientacin a objetos hacen de la POO una tcnica novedosa de programacin, aplicable a problemas y entornos especficos.-

Potrebbero piacerti anche