Está en la página 1de 4

TEMA_8 ------------ Metodologa 3

1. Introduccin En este tema se ampla la metodologa de desarrollo para refinamientos sucesivos con la posibilidad de utilizar subprogramas como tcnica de abstraccin. 2.Operaciones abstractas El uso de subprogramas a los programas supone un primer nivel de abstraccin, por ejemplo, cuando hacemos uso de una funcin o procedimiento desde una librera que hace la funcin o procedimiento pero no sabemos nada de su cdigo. As pues en cualquier abstraccin (libreras, funciones, procedimientos, etc, ..), podemos distinguir dos partes: 1) La especificacin: Qu hace realmente? cabecera de la funcin o procedimiento. 2) La implementacin o realizacin: Cmo lo hace? Sera el algoritmo codificado. Ejemplo / * Devuelve el mximo de dos nmeros * / int maximo (int a, int b) { if (a> b) { return a; } else { return b; } } Especificacin

Implementacin

Si ahora utilizamos otro algoritmo para implementar la funcin mximo: / * Devuelve el mximo de dos nmeros * / int maximo (int a, int b) { int m = a; if (b> m) { m = b; } return m; } La especificacin es la misma de antes, por lo tanto una misma especificacin puede tener diferentes implementaciones, para esto muchas veces nos interesa ms saber lo que hace la funcin que cmo lo hace, ocultando al usuario la implementacin de la funcin. La especificacin formal de una funcin viene dada por: {Precondicin} Cabecera de la funcin. Conjunto de estados posibles que deben cumplir los parmetros de entrada de la funcin antes de ejecutarse. {Postcondicin} Estado en que se encontrar la variable de salida de la funcin una vez se haya ejecutado el cdigo de la funcin. Ejemplo: Especifica una funcin que devuelva el cubo de un numero entero. {Q a Z} fun cubo (a: entero) dev (c: entero) {R c = a3} Ejemplo: Especifica una funcin que nos devuelve el valor mximo de un vector.

3. Desarrollo haciendo uso de abstracciones Hay diferentes estrategias de desarrollar programas en uso de abstracciones: 3.1 Desarrollo descendente (Top-Down). La programacin descendente o "Top - Down" es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento. La metodologa descendente consiste en efectuar una relacin entre las sucesivas etapas de estructuracin de modo que existe una relacin entre ellas mediante entradas y salidas de informacin. El problema se descompone en varias estructuras jerrquicas, de forma que se pueda considerar cada estructura desde dos puntos de vista: Qu hace? y Cmo lo hace?

La utilizacin de la tcnica de diseo Top-Down tiene los siguientes objetivos bsicos: a) Simplificacin del problema y de los subprogramas de cada descomposicin. b) Las diferentes partes del problema pueden ser programadas de modo independiente e incluso por diferentes personas. c) El programa final queda estructurado en forma de bloque o mdulos lo que hace ms sencilla y fcil su lectura y mantenimiento. 3.2 Reutilizacin del cdigo La reutilizacin de cdigo se refiere al comportamiento y a las tcnicas que garantizan que una parte o la totalidad de un programa informtico existente se pueda utilizar en la construccin de un otro programa. De esta forma se aprovecha el trabajo anterior, economiza tiempo, y se reduce la redundancia. Los procedimientos y funciones, cuando ms genricos sean en su comportamiento, ms reutilizables son. Un procedimiento o funcin es reutilizable si podemos aplicarlo no slo al programa para el que est diseado, sino que tambin a otros programas en los que se requiere un procedimiento o funcin similar. 3.3 Desarrollo ascendente (Bottom-Up) El diseo ascendente se refiere a la identificacin de aquellos procesos que hay computarizado a medida que vayan apareciendo, su anlisis como sistema y su codificacin para resolver el problema inmediato. Cuando la programacin se realiza internamente y hace un enfoque ascendente, es difcil llegar a integrar los subsistemas. 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. 4. Programas robustos Cualquier programa debe ser: - Correcto. Los resultados que d son los esperados - Claro. Cualquier programador pueda entender como est estructurado. - Eficiente. Que consume los mnimos recursos en cuanto a tiempo y memoria. Se dice que un programa es robusto si controla sus operaciones aunque le introducimos datos incorrectos y errneas. 2

4.1 Programacin a la defensiva La programacin defensiva es una forma de diseo defensivo aplicada al diseo de programas que busca garantizar el comportamiento de todo elemento de una aplicacin ante cualquier situacin de uso por incorrecta o imprevisible que sta pueda parecer. En general, esto supone multiplicar las comprobaciones que se hacen en todos los mdulos programados, con la consiguiente penalizacin en carga de procesador, tiempo y aumento de la complejidad del cdigo. Las tcnicas de programacin defensiva se utilizan especialmente en componentes crticos, en los que un mal funcionamiento, ya sea por descuido o por un ataque malicioso, podra tener consecuencias graves. La programacin defensiva es un enfoque que busca mejorar el software y el cdigo fuente, en trminos de: a) Calidad, reduciendo el nmero de fallos de software y, en consecuencia, problemas. b) Haciendo el cdigo fuente comprensible - el cdigo fuente debe ser legible y comprensible, a prueba de una auditora de cdigo. c) Hacer que el software se comporte de una manera predecible a pesar de entradas o acciones de usuario inesperadas. 4.2 Tratamiento de excepciones Ante la posibilidad de errores con los datos que se opera a un programa, hay que considerar dos actividades diferentes: a) Deteccin de la situacin de error. b) Correccin de la situacin de error. En C +- la sentencia throw provoca una terminacin de un subprograma para excepcin: void operacion (argumentos) { ... .... accion1 if (error1) { throw excepcion1; / * Finaliza con una excepcin * / } ... accion2 if (error2) { throw excepcion2; / * Finaliza con una excepcin * / } ... } EJEMPLO: Programa que nos calcula el factorial de un nmero controlando los posibles errores.
int FactorialRobusto (int n) { int f = 1; if (n<0) { throw 0; } for (int k=2; k <= n; k++) { if (f> INT_MAX / k) { throw k; } f = f + k; }

return f; }

También podría gustarte