Vista previa del material en texto
Universidad José Antonio Páez Facultad de Ingeniería Carrera de Ingeniería en Computación Programación estructurada: Se llama programación estructurada a la aplicación de los métodos básicos de descomposición de problemas, para establecer una estructura jerárquica fácilmente utilizable, a través de un proceso progresivo Es un método de construcción y diseño de programar en el que participan características como la modificación y la facilidad en uso La programación estructurada se basa en 3 técnicas básicas: Diseño descendente.- consiste en dividir el problema y hacer la segmentación por paso en los diferentes niveléis el programa es complejo se divide en subprocesos. Recursos abstractos.- consiste en el proceso de realización de los diferentes pasos hasta encontrar la solución de un problema. Estructura básica de control.- consiste en que el programa cuenta con un único punto de entrada y diferentes tipos de salida. La programación estructurada es una teoría de programación que consiste en construir programas de fácil comprensión. La programación estructurada es especialmente útil, cuando se necesitan realizar correcciones o modificaciones después de haber concluido un programa o aplicación. Al haberse utilizado la programación estructurada, es mucho más sencillo entender la codi ficación del programa, que se habrá hecho en diferentes secciones. La programación estructurada se basa en una metodología de desarrollo de programas llamada refinamientos sucesivos: Se plantea una operación como un todo y se divide en segmentos más sencillos o de menor complejidad. Una vez terminado todos los segmentos del programa, se procede a unificar las aplicaciones realizadas por el pool de programadores. Si se ha utilizado adecuadamente la programación estructurada, esta integración debe ser sencilla y no presentar problemas al integrar la misma, y de presentar algún problema, será rápidamente detectable para su corrección. La representación gráfica de la programación estructurada se realiza a través de diagramas de flujo o flow chart, el cual representa el programa con sus entradas, procesos y salidas. La programación estructurada propone segregar los procesos en estructuras lo más simple posibles, las cuales se conocen como secuencia, selección e interacción. Ellas están disponibles en todos los lenguajes modernos de programación imperativa en forma de sentencias. Combinando esquemas sencillos se pueden llegar a construir sistemas amplios y complejos pero de fácil entendimiento. Ventajas: - El programa se puede segmentar en varios partes - Se puede detectar (si se hizo bien los segmentos) rápidamente los errores - A partir de esquemas sencillos se puede construir un sistema amplio y complejo pero amigable Desventajas: - Si se hacen mal los esquemas no se podrán detectar los errores - Tener un buen conocimiento de lo que se quiere hacer en el diagrama de flujo. Introducción Programación Modular Se presenta históricamente como una evolución de la programación estructurada para solucionar problemas de programación más grandes y complejos de lo que ésta puede resolver. Al aplicar la programación modular, un problema complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros subproblemas más simples. Esto debe hacerse hasta obtener subproblemas lo suficientemente simples como para poder ser resueltos fácilmente con algún lenguaje de programación. Ésta técnica se llama refinamiento sucesivo, divide y vencerás ó análisis descendente (Top-Down). Un módulo es cada una de las partes de un programa que resuelve uno de los subproblemas en que se divide el problema complejo original. Cada uno de estos módulos tiene una tarea bien definida y algunos necesitan de otros para poder operar. En caso de que un módulo necesite de otro, puede comunicarse con éste mediante una interfaz de comunicación que también debe estar bien definida. Si bien un módulo puede entenderse como una parte de un programa en cualquiera de sus formas y variados contextos, en la práctica se los suele tomar como sinónimos de procedimientos y funciones. Pero no necesaria ni estrictamente un módulo es una función o un procedimiento, ya que el mismo puede contener muchos de ellos, no debe confundirse el término "modulo" (en el sentido de programación modular) con términos como "función" o "procedimiento", propios del lenguaje que lo soporte. La programación modular es uno de los métodos de diseño más flexibles y potentes para mejorar la productividad de un programa. En programación modular el programa se divide en módulos (partes independientes), cada una de las cuales ejecuta una única función o actividad y se codifican independientemente de otros módulos. Cada uno de estos módulos se analiza, codifica y pone a punto por separado. Cada programa contiene un módulo denominado programa principal que controla todo lo que sucede; se transfiere el control a los submódulos o subprogramas. Estos ejecutan su función y una vez completada su tarea, devuelven el control al módulo principal. Definición: La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible y manejable. DESCOMPOSICION MODULAR El diseño modular propone dividir el sistema en partes diferenciadas y definir sus interfaces, sus ventajas: claridad, reducción de costos y reutilización. Los pasos a seguir son: Identificar los módulos Describir cada módulo Describir las relaciones entre módulos Una descomposición modular debe poseer ciertas cualidades mínimas para que se pueda considerar suficiente válida. a) Independencia funcional b) Acoplamiento c) Cohesión d) Comprensibilidad e) Adaptabilidad a) Independencia funcional Cada módulo debe realizar una función concreta o un conjunto de funciones afines. Es recomendable reducir las relaciones entre módulos al mínimo. Para medir la independencia funcional hay dos criterios: acoplamiento y cohesión b) Acoplamiento El acoplamiento es una medida de la interconexión entre módulos en la estructura del programa. Podemos graduarla en un amplio espectro, pero por lo general se tiende a que el acoplamiento sea lo menor posible, esto es a reducir las interconexiones entre los distintos módulos en que se estructure nuestra aplicación. El grado de acoplamiento mide la interrelación entre dos módulos, según el tipo de conexión y la complejidad de la interfase: FUERTE - Por contenido, cuando desde un módulo se puede cambiar datos locales de otro. - Común, se emplea una zona común de datos a la que tienen acceso varios módulos. MODERADO - De control, la zona común es un dispositivo externo al que están ligados los módulos, esto implica que un cambio en el formato de datos los afecta a todos. - Por etiqueta, en intercambio de datos se realiza mediante una referencia a la estructura completa de datos (vector, pila, árbol, grafo,…) DÉBIL - De datos, viene dado por los datos que intercambian los módulos. Es el mejor. - Sin acoplamiento directo, es el acoplamiento que no existe. c) Cohesión Un módulo coherente ejecuta una tarea sencilla en un procedimiento y requiere poca interacción con procedimientos que se ejecutan en otras partes de un programa. Podemos decir que un módulo coherente es aquel que intenta realizar solamente una cosa. Para que el número de módulos no sea demasiado elevado y complique el diseño se tratan de agrupar elementos afines y relacionados en un mismo módulo. ALTA . Cohesión abstraccional, se logra cuando se diseña el módulo como tipo abstracto de datos o como una clase de objetos . Cohesión funcional, el módulo realiza una función concreta y específica MEDIA . Cohesión secuencial, los elementos del módulo trabajan de forma secuencial . Cohesión de comunicación, elementos que operan con el mismo conjunto de datosde entrada o de salida . Cohesión temporal, se agrupan elementos que se ejecutan en el mismo momento. Ej. Arrancar o parar dispositivos BAJA . Cohesión lógica, se agrupan elementos que realizan funciones similares. . Cohesión coincidental, es la peor y se produce cuando los elementos de un módulo no guardan relación alguna La descripción del comportamiento de un módulo permite establecer el grado de cohesión: - Si es una frase compuesta y contiene más de un verbo la cohesión será MEDIA - Si contiene expresiones secuenciales (primero, entonces, cuando…), será temporal o secuencial - Si la descripción no se refiere a algo específico (Ej. Todos los errores), cohesión lógica - Si aparece “inicializar”, “preparar”, “configurar”, probablemente sea temporal. d) Comprensibilidad Para facilitar los cambios, el mantenimiento y la reutilización de módulos es necesario que cada uno sea comprensible de forma aislada. Para ello es bueno que posea independencia funcional, pero además es deseable: Identificación, el nombre debe ser adecuado y descriptivo Documentación, debe aclarar todos los detalles de diseño e implementación que no queden de manifiesto en el propio código SIMPLICIDAD, las soluciones sencillas son siempre las mejores. e) Adaptabilidad La adaptación de un sistema resulta más difícil cuando no hay independencia funcional, es decir, con alto acoplamiento y baja cohesión, y cuando el diseño es poco comprensible. Factores para facilitar la adaptabilidad: Previsión, es necesario prever que aspectos del sistema pueden ser susceptibles de cambios en el futuro, y poner estos elementos en módulos independientes, de manera que su modificación afecte al menor número de módulos posibles Accesibilidad, debe resultar sencillo el acceso a los documentos de especificación, diseño, e implementación para obtener un conocimiento suficiente del sistema antes de proceder a su adaptación Consistencia, después de cualquier adaptación se debe mantener la consistencia del sistema, incluidos los documentos afectados