Unidad II. Metodología para la construcción de programas Prof. Eliana Guzmán U. Semestre: A-2015
Introducción Resolver un problema con una computadora conduce a la escritura de un programa y a su ejecución. El proceso de diseñar un programa es esencialmente creativo, pero se pueden considerar una serie de fases o pasos comunes, que sirven de guía cuando se está aprendiendo a escribir programas.
Programación Es el proceso de escribir un programa, por lo que requiere conocer cuál es el conjunto de instrucciones del lenguaje de programación, que se esté empleando.
Programa Es un conjunto de instrucciones internas utilizadas para ejecutarse en una computadora y que producen un resultado concreto. Cuando un programa se ejecuta normalmente hay dos tipos de entrada a la computadora: el programa y los datos.
Instrucciones, sentencias o proposiciones: i Son los diferentes pasos o acciones de un programa o algoritmo, las cuales especifican ciertas instrucciones i que debe ejecutar la computadora. Las instrucciones básicas que una computadora es capaz de manipular y ejecutar, se pueden agrupar en cuatro grupos:
Tipos de instrucciones Instrucciones de entrada/salida. Instrucciones aritmético/lógicas: ejecutan este tipo de operaciones. Instrucciones de selección: permiten seleccionar de alternativas múltiples según una condición. Instrucciones de repetición: permiten la repetición de secuencias de instrucciones, una cantidad dada de veces.
Fases de resolución de un problema a través de un programa (ciclo de vida de un software) Análisis del problema. Diseño del algoritmo. Codificación. Compilación y Ejecución. Verificación y Depuración. Mantenimiento y Documentación.
Ciclodevidadeunsoftware Análisis del problema. Diseño del algoritmo. Codificación ió (implementación) ió Se implementa el algoritmo en código. Compilación y Ejecución. Verificación y Depuración. Mantenimiento y Documentación. El resultado de estas dos etapas, es el diseño detallado del algoritmo
Ciclodevidadeunsoftware 1. Análisis del problema: Esta fase requiere una clara definición, donde se exprese exactamente lo que debe hacer el programa y el resultado o solución deseada. Para definir bien un problema, es conveniente responder las siguientes i preguntas: Qué entradas se requieren? (tipo y cantidad) Qué método produce la salida deseada? d Cuál es la salida deseada? (tipo y cantidad)
Ciclodevidadeunsoftware Ejemplo 1: Calcular la superficie de un rectángulo. Entradas: Proceso: Salida: base altura Cálculo de la superficie: Superficie = base * altura Superficie
Ciclo de vida de un software Ejemplo 2: Calcular la superficie y la longitud de la circunferencia, de un círculo de radio r. Entrada: Radio del círculo: r Proceso: Cálculo de la superficie: πr 2 Cálculo de la longitud de la circunferencia: 2πr Superficie del círculo Salidas: Longitud de la circunferencia del círculo
Definición de algoritmo Antes de explicar la segunda fase, vamos a estudiar algunas definiciones de algoritmo: es un método para resolver un problema mediante una serie de pasos precisos, definidos y finitos. es un conjunto finito de instrucciones o pasos que sirven para ejecutar una tarea o resolver un problema. Preciso: indica el orden en que se ejecutan cada paso. Definido: si se sigue dos veces, se obtiene el mismo resultado. Finito: tiene un número determinado de pasos.
Definición de algoritmo Ejemplos de algoritmos son: Instrucciones para montar una bicicleta. Hacer una receta de cocina. Hacer la suma de dos enteros. Los algoritmos se pueden expresar por fórmulas, diagramas de flujo y pseudocódigo.
Ciclodevidadeunsoftware 2. Diseño del algoritmo Se determina cómo hace el programa la tarea solicitada. Los métodos más eficaces de diseño se basan en el conocido divide y vencerás. Es decir, la resolución de un problema complejo se realiza dividiendoidi d el problema en subproblemas, bl y a continuación dividir estos subproblemas en otros de nivel más bajo, hasta que pueda implementarse una solución en el computador. Este método se conoce como diseño descendente o modular.
Ciclodevidadeunsoftware Cada subprograma se resuelve mediante un módulo que tiene un solo punto de entrada y un solo punto de salida. Cualquier programa bien diseñado, consta de un programa principal que llama a los subprogramas. Los programas estructurados de esta forma, se dice que tienen un diseño modular, y el método de descomponer el programa en módulos más pequeños se llama programación modular.
Ciclodevidadeunsoftware Conclusión: el diseño del algoritmo es el proceso de convertir los resultados de la etapa de análisis del problema, en un diseño modular con refinamientos sucesivos, que permitan una posterior traducción a un lenguaje de programación.
Ciclodevidadeunsoftware Las dos herramientas más utilizadas comúnmente para diseñar algoritmos son: los diagramas de flujo y los pseudocódigos. a. Diagrama de flujo: es una representación gráfica de un algoritmo. Utiliza símbolos estándar que representan los pasos del algoritmo unidos por flechas denominadas líneas de flujo, que indican la secuencia en que se deben ejecutar. Los símbolos empleados se han establecido y los más utilizados son:
Ciclodevidadeunsoftware Línea de flujo Conector Proceso Llamada a subrutina Entrada/Salida Pantalla Terminal, representa el inicio y fin de un programa Decisión Impreso Teclado
Ciclo de vida de un software Ejemplo de Diagrama de flujo Inicio Leer (base, altura) superficie base * altura Escribir (superficie) Fin
Ciclodevidadeunsoftware b. Pseudocódigo: es un lenguaje de descripción de algoritmos. Su uso hace el paso de codificación final, relativamente fácil. Nació como un lenguaje similar al inglés y era un medio para representar básicamente las estructuras de control de programación estructurada, que se verán más adelante. El pseudocódigo no se puede ejecutar en una computadora.
Ciclodevidadeunsoftware Su ventaja radica que al utilizarlo, en la planificación del programa, el programador se puede concentrar en la lógica y en las estructuras de control, y no preocuparse por las reglas del lenguaje de programación. Es también más fácil corregir errores de la lógica de programación que si el programa está codificado. Puede traducirse fácilmente a lenguajes estructurados como el Pascal.
Ciclodevidadeunsoftware Ejemplo de un algoritmo escrito en Pseudocódigo: algoritmo superficie_de_un_rectangulo {declaración de variables y constantes} Inicio Leer(base, altura) superficie base * altura Escribir( La superficie del rectángulo es:, superficie) Fin
Ciclodevidadeunsoftware 3. Codificación de un programa Codificación es la escritura de la representación del algoritmo desarrollada en las etapas precedentes, usando un lenguaje de programación. En esta etapa se traduce el algoritmo y puede transcribirse en la computadora. Esta operación se realiza con el programa editor de texto, para obtener el programa fuente.
Ciclo de vida de un software Para realizar la conversión del algoritmo en programa, debe sustituir las palabras reservadas en español por sus homónimos en inglés, respetando la sintaxis del lenguaje de programación empleado.
Ciclodevidadeunsoftware PROGRAM Ejemplo1; USES CRT; VAR lado1,lado2, area: REAL; BEGIN {Este programa calcula el área de un rectángulo} ClrScr; WRITELN ('Escriba los lados del rectángulo'); READLN (lado1); READLN (lado2); area:=lado1*lado2; WRITELN ('AREA DEL RECTANGULO: ', area); END.
Ciclodevidadeunsoftware 4. Compilación y ejecución de un programa La compilación es el proceso de traducir programas fuentes en programas objeto (normalmente en código de máquina), haciendo uso de un compilador o interprete.
Ciclo de vida de un software Compiladores: es un programa intérprete que traduce un programa escrito en lenguaje de alto nivel, en un programa escrito en lenguaje de máquina, de forma que la computadora lo pueda comprender directamente.
Ciclo de vida de un software Intérpretes: es un traductor que toma un programa fuente y realiza la traducción y ejecución línea por línea. Prácticamente ya no se utilizan. Programa fuente Programa fuente Intérprete Compilador Traducción y ejecución línea a línea Programa objeto Intérprete Compilador
Ciclo de vida de un software Fases de la compilación: 1. Escribir el programa fuente utilizando el editor de texto del lenguaje y guardarlo en algún dispositivo de almacenamiento, por ejemplo el DD. 2. Cargar el programa fuente en memoria. 3. Compilar el programa (por ejemplo en TP: Alt+F9). 4. Verificar y corregir los errores de compilación. 5. Obtener el programa objeto. 6. El enlazador (linker) obtiene el programa ejecutable.exe. 7. Se ejecuta el programa y se obtienen las salidas (por ejemplo en TP: Ctrl+F9).
Ciclodevidadeunsoftware Si tras la compilación se presentan errores en el programa fuente (.pas), es preciso volver a editar el programa, corregir los errores y compilar de nuevo, este proceso se repite hasta que no se producen errores, obteniéndose el programa objeto (.psd) y el programa ejecutable (.exe).
Ciclodevidadeunsoftware Cuando se ejecuta un programa se pueden producir tres tipos de errores: 1. Errores de compilación: se producen normalmente por el uso incorrecto de las reglas de programación y suelen ser errores de sintaxis. Si existe un error de sintaxis, la computadora no puede entender la instrucción, no se obtendrá el programa objeto y el compilador imprimirá la lista de errores.
Ciclodevidadeunsoftware 2. Errores de ejecución: estos errores se producen por instrucciones que la computadora puede entender pero no ejecutar. Ejemplo típicos: división por cero, raíces cuadradas de números negativos. En este caso se detiene la ejecución del programa y se muestra un mensaje de error.
Ciclodevidadeunsoftware 3. Errores lógicos: se producen en la lógica del programa y la fuente del error suele ser el diseño del algoritmo. Estos errores son los más difíciles de detectar porque el programa compila y corre bien, pero no se obtienen los resultados correctos. En este caso debe volver a las etapas de análisis y diseño, modificar el algoritmo y cambiar el programa fuente, compilar y ejecutar una vez más.
Ciclodevidadeunsoftware 5. Verificación y depuración de un programa La verificación es el proceso de ejecución del programa con una amplia variedad de datos de entrada, llamados datos de test o prueba, que determinarán si el programa tiene errores. Se debe desarrollar una amplia gama de datos de prueba: valores normales de entrada, valores extremos de entrada que comprueben los límites del programa y valores de entrada que comprueben aspectos especiales del programa. La depuración es el proceso de encontrar los errores del programa y corregir o eliminar dichos errores.
Ciclo de vida de un software 6. Documentación y mantenimiento La documentación de un problema consta de la descripción de los pasos a dar en el proceso de resolución del mismo. Programas pobremente documentados son difíciles de leer, más difíciles de depurar y casi imposibles de mantener y modificar. La documentación puede ser interna y externa. La documentación interna es la contenida en líneas de comentario. La documentación externa incluye análisis, diagramas de flujo y/o pseudocódigo, manuales de usuario con instrucciones para ejecutar el programa y para interpretar t los resultados.
Ciclo de vida de un software La documentación es vital cuando se desea corregir posibles errores futuros o cambiar el programa. Tales cambios se denominan mantenimiento del programa. Después de cada cambio se debe actualizar la documentación. Es común usar las versiones de los programas 1.0, 1.1, 2.0.
Programación modular Es uno de los métodos de diseño más flexible y potente para mejorar la productividad de un programa. El programa se divide en módulos (partes independientes), cada una de las cuales ejecuta una única actividad o tarea y se codifican independientemente de otros módulos. Cada uno de estos módulos se analizan, codifican y ponen a punto por separado.
Programación modular Cada programa tiene un módulo denominado programa principal, que controla todo lo que sucede. Se transfiere el control a cada submódulo, de modo que ellos puedan ejecutar sus funciones y luego devuelve el control al programa principal p cuando haya completado sus tareas. Cada módulo debe tener solamente una tarea específica que ejecutar. Esta tarea puede ser entrada, salida, manipulación de datos, control de otros módulos o alguna combinación de éstos.
Programación modular Los módulos son independientes en el sentido que ningún módulo puede tener acceso directo a cualquier otro módulo, excepto el módulo al que llama y sus propios submódulos.
Programación modular
Programación estructurada Programación modular, programación descendente y programación estructurada, son términos que a menudo se utilizan como sinónimos aunque no significan lo mismo. La programación estructurada significa escribir un programa de acuerdo a las siguientes reglas: El programa tiene un diseño modular. Los módulos son diseñados de modo descendente. Cada módulo se codifica utilizando las tres estructuras de control básicas: secuenciales, decisión y repetición.
Programación estructurada La programación estructurada, es un conjunto de técnicas que: Aumentan considerablemente la productividad del programa reduciendo el tiempo requerido para escribir, verificar, depurar y mantener los programas. Utiliza una cantidad limitado de estructuras de control, que minimizan la complejidad de los programas y por consiguiente reducen los errores. Hace los programas más fáciles de escribir, verificar, leer y mantener. Los programas están dotados de una estructura.
Programación estructurada La programación estructurada es un conjunto de técnicas que incorporan: Recursos abstractos: descomponer una acción compleja en términos de acciones más simples que la computadora pueda ejecutar. Diseño descendente (top-down): es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento. Estructuras básicas de control: son métodos de especificar el orden en que las instrucciones de un algoritmo se ejecutan, este orden se denomina flujo de control. Las 3 estructuras básicas de control son: secuenciales, decisión y repetición.
A continuación se retoma el concepto de algoritmo y se explica con mas detalle
Concepto y característica de algoritmos Metodología de la programación: es la metodología necesaria para resolver problemas mediante programas. El eje central de esta metodología es el concepto de algoritmo: método para resolver un problema. Problema Diseño del algoritmo Programa de computadora
Concepto y característica de algoritmos Los pasos para la resolución de un problema son: Diseño del algoritmo: describe la secuencia ordenada de pasos, sin ambigüedades, que conducen a la solución de un problema dado. Convertir el algoritmo a un programa usando un lenguaje de programación. Ejecución y validación del programa por la computadora.
Características de un algoritmo Preciso: indicando el orden exacto de realización de cada paso. Definido: si se sigue el algoritmo dos veces se debe obtener el mismo resultado. Finito: it debe tener una cantidad d limitada it de pasos.
Ejemplo 1: Realizar la suma de todos los números pares entre 2 y 1000. El problema consiste en sumar 2 + 4 + 6 + + 1000. Algoritmo: 1. Inicio 2. Establecer suma en cero 3. Establecer número en dos 4. Sumar número a suma. El resultado será el nuevo valor de la suma (suma). 5. Incrementar número en 2 unidades 6. Si número <= 1000 regresar al paso 4, en caso contrario escribir el lúli último valor de suma y terminar el proceso. 7. Fin
Ejemplo 2: Un socio solicita el ingreso a un club. Si está solvente, puede entrar sino se le impide la entrada. Algoritmo 1. Inicio 2. Solicitar it su número de acción 3. Examinar en la base de datos 4. Si el socio está solvente, dejarlo entrar; en caso contrario no dejarlo entrar. 5. Fin
Diseño del algoritmo La información proporcionada al algoritmo constituyen su entrada y la información producida por el algoritmo constituye su salida. Método de descomponer: divide y vencerás. Por ejemplo, en el problema de encontrar la superficie y longitud de un círculo se puede dividir idi en cuatro problemas más simples o subproblemas:
Ejemplo Ejemplo: Calcular la superficie y la longitud de la circunferencia, de un círculo de radio r. Entrada: Radio del círculo Proceso: Cálculo de la superficie (πr2) Cálculo de la circunferencia (2 πr) Salidas: Superficie del círculo Longitud de la circunferencia del círculo
Diseño del algoritmo
Diseño del algoritmo Normalmente los pasos diseñados en el primer esbozo del algoritmo son incompletos e indicarán solo unos pocos pasos (un máximo de 12 aproximadamente). Tras esta primera descripción, estos pasos se amplían en una descripción más detallada con pasos más específicos. Este proceso se denomina refinamiento del algoritmo. Para problemas complejos se necesitan con frecuencia diferentes niveles de refinamiento, antes de que se pueda obtener un algoritmo claro, preciso y completo.
En el ejemplo: Diseño del algoritmo
Diseño del algoritmo Las ventajas del diseño descendente son: El problema se comprende más fácilmente al dividirse en partes más simples denominadas módulos. Las modificaciones i en los módulos son más fáciles. La comprobación del problema es más sencilla.
Diseño del algoritmo En resumen el diseño de un algoritmo se descompone en: Diseño descendente. Refinamiento por casos. Uso de las herramientas de programación: diagrama de flujo y/o pseudocódigo.