Programación

Diseño de programas. Algoritmos. Elementos básicos del programa. Instrucciones. Lenguaje en Pascal. Cohesión y acoplamiento

  • Enviado por: Elmatis
  • Idioma: castellano
  • País: Argentina Argentina
  • 30 páginas
publicidad
cursos destacados
Desarrollo Web en PHP desde formularios hasta bots
Desarrollo Web en PHP desde formularios hasta bots
Curso completo de PHP. Desde la introducción a completos bots que son capaces de rastrear otras páginas y todo en PHO.
Ver más información

Aprende PHP+MySQL sin dolor
Aprende PHP+MySQL sin dolor
Con PHP se han hecho poderosos imperios, como Yahoo y Facebook. Comenzaremos desde lo básico, conociendo la...
Ver más información

publicidad

Unidad I:

Programación:

Concepto: Es el proceso de planificar un conjunto de actividades o tareas que se van a realizar a partir que se produce el planteo del problema hasta obtener una solución instalada en la computadora. El concepto de programa almacenado en memoria fue introducido por Jon Von Newman en 1946 lo que hizo más flexibles a los programas de computadora.

Fases de Diseño de Programas y Puesta a punto:

Fases de Diseño:

  • Análisis: Es el momento en que se analiza la situación y se determina cual es el problema a resolver. También es el momento de analizar cuales serán los datos de entrada y que datos se desean obtener como salida como así también los vínculos que los relacionan sin darle demasiada importancia al proceso de transformación de los datos, es decir se lo ve como una caja negra donde entra información y salen los resultados.

  • Algoritmo: Es el proceso de considerar y desarrollar una secuencia lógica de pasos para resolver el problema.

  • Prueba de Algoritmo: Es el seguimiento de la secuencia de pasos lógicos del algoritmo para ver si realmente resuelven el problema.

  • Codificación: Es la conversión del algoritmo en un programa a través de un lenguaje de programación especifico.

  • Edición, Ejecución y Prueba: Es el proceso de introducir o cargar el programa en memoria, ejecutarlo y probar los resultados que arroja corrigiendo hasta la puesta a punto final del mismo.

  • Uso y Mantenimiento: Es el periodo de uso del programa durante su vida útil. En este periodo con seguridad surgirán con el uso nuevos errores no advertidos en etapas anteriores los cuales deberán ser corregidos, como así también se le realizaran cambios estructurales si es necesario como ser agregarle nuevas funciones o cambiar la estructura del mismo según los requerimientos del usuario con el fin de maximizar la optimización del mismo hasta el final de su vida útil.

  • Puesta a punto:

    Concepto: Es el conjunto de tareas necesarias para implementar el programa en la computadora. Comprende las siguientes fases:

  • Fase de Edición: Es el proceso de escribir el programa con un editor de texto para que quede almacenado en la memoria de la PC. A este se lo llama “Código Fuente”.

  • Fase de Traducción: Se traduce el programa que esta en un lenguaje de alto nivel a un lenguaje de bajo nivel entendible para la computadora. De esta manera se obtiene el programa objeto o ejecutable.

  • Fase de Montaje: Consiste en enlazar objetos previamente compilados (linkeditacion) es decir el uso de librerías.

  • Fase de ejecución: Uso del programa ya cargado en memoria para verificar si sus resultados son correctos.

  • Programa

    Concepto: Es un conjunto ordenado de sentencias o instrucciones que le dicen a la computadora las tareas o acciones a realizar para resolver un problema planteado de antemano.

    Partes constitutivas de un programa:

    Entrada de Datos: Es el proceso de introducir información en la memoria de la computadora. Para ello se debe realizar una lista de todas las entradas requeridas por el programa coma si también la fuente y formato de procedencia y la frecuencia con que serán requeridas cada una de ellas. El programador deberá prevenir situaciones en las que un dato o un conjunto de datos sean requeridos por el programa sin antes haber sido introducido en memoria.

    Algoritmos de Resolución / Codificación: Consta de dos pasos:

  • Diseño del modelo de resolución del problema: Se establece el modelo proceso para la resolución del problema para lo cual se tendrá en cuanta los datos de entrada y los resultados que se desean obtener.

  • Algoritmo de Resolución del Problema: Suele expresarse previamente a la codificación en el lenguaje de programación. Estos pueden ser:

    • Pseudocodigo.

    • Diagrama de Flujo.

    • Diagrama Estructurado o N - S (Nassi _ Shneiderman).

    • Salida de Resultados: Es el proceso de la obtención de los datos ya transformados. Estos deben ser previstos por el programador tanto en tipo y formato como así también en los tiempos de salida de los mismos. Estos pueden ser:

      • Salida por pantalla o en papel impreso.

      • Grabación en disco o cinta.

      • Diseño de Presentación (tablas, gráficos, listas, informes).

      • Frecuencia de Salida.

      Tipos de Programas:

      Lineales o Secuenciales: En este tipo de programas las instrucciones se ejecutan una a continuación de la otra, es decir en una secuencia preestablecida sin la posibilidad de saltos condicionales o incondicionales.

      Cíclicos: En estos tipos de programas un conjunto de instrucciones se ejecuta (repite) un determinado numero de veces hasta que se cumpla una condición.

      Alternativos: En estos tipos de programas se ejecuta un determinado grupo de instrucciones entre n grupo de instrucciones distintas entre si. La ejecución de uno de ellos resulta de la evaluación de una condición o del estado de alguna variable.

      Para n = 2

      Elementos Básicos de un Programa:

      Son aquellos que combinados adecuadamente nos permiten construir un programa. Estos son:

    • Palabras Reservadas: Constituyen las instrucciones intrínsecas al lenguaje de programación y son la parte fundamental de su sintaxis. No pueden ser elegidos como identificadores o nombres de variables.

    • Constantes: Representan a un elemento fijo de dato, es decir que su valor no puede cambiar durante la ejecución de un programa.

    • Variables: Representan a elementos variables de datos, es decir que su contenido puede cambiar durante la ejecución de un programa.

    • Expresiones: Son combinaciones de constantes, variables, símbolos de operación, operadores, y su valor es el resultante de la resolución de dichas operaciones. Estas pueden ser:

    • Según su tipo:

      • Simples : están formadas por un elemento que va precedido por un operador lunario o el operador lógico not Ej.: -A, Not (B).

      • Compuestas: Están formadas por dos o mas elementos combinados con uno o mas operadores Ej.: A + B, B + sin (C) * 2.

      Según el resultado que se obtiene:

        • Aritméticas: Ej. 5 + 8 13

        • Logicas: Pueden ser:

    • Relacionales Ej. A > B V

    • Lógicas : Eje A And B F

    • Sentencias de Asignación: Sirven para asignar el valor de una expresión a una variable.

    • Elementos Auxiliares de un Programa:

    • Contadores: Un contador es un campo de memoria que esta destinado a contener los diferentes valores que se van incrementado o decrementando en cada iteración. Es decir que el campo controla las sucesivas sumas paralelas que se van realizando en la ejecución de las sucesivas repeticiones = C + N Donde N es una cantidad Constante.

    • Acumuladores: Un Acumulador o totalizador es un campo de memoria cuya misión es almacenar cantidades variables resultantes de sumas sucesivas. S = S + N Donde N es una cantidad Variable.

    • Interruptores o Conmutadores: A veces llamados centinelas, banderas (flags), es un campo de memoria (variable) que toman diversos valores a lo largo de la ejecución del programa y permite comunicar información de una parte a otra del mismo, es decir varias la secuencia de ejecución de un programa, dependiente del valor que tenga en un determinado momento. Los dos únicos valores que pueden tomar un interruptor son: 1 o 0, V o F, Encendido o Apagado.

    • Tipos de Instrucciones:

    • Entrada /Salida: Permiten la transferencia de información desde los periféricos de entrada a la memoria de la computadora y viceversa. El proceso de introducción de datos en la memoria se denomina lectura o carga de datos y el proceso de extracción de los mismos de la memoria a un dispositivo periférico de salida se denomina escritura, grabación o conservación, impresión, etc.

    • Asignación: Permiten asignar a una variable (la que se encuentra a la izquierda del operador de asignación) el valor de una expresión (que se encuentra a la derecha del operador de asignación).

    • Movimiento: Las instrucciones de movimiento tienen el mismo sentido que las de asignación y permiten transferir la información o contenido de un campo o posición de memoria a otro, manteniendo siempre intacta la información en su primera posición ( emisor) y variando el contenido de la segunda posición (receptor).

    • Aritméticas: realizan el calculo de operaciones aritméticas tales como sumas, restar, multiplicar, dividir o funciones como seno, coseno, tangente, etc.

    • Lógicas y de Relación: Este tipo de operaciones se realizan con operadores de relación (>, <,= <>, etc.) y operadores lógicos o Boléanos (and, or, not, etc.).

    • Bifurcación o Transferencia de Control: Permiten variar (romper) la secuencia de ejecución de un programa al saltar (bifurcar) a otra parte del mismo. Ltiplicar, dividir o funciones como senoas bifurcaciones pueden ser con salto adelante en la secuencia normal del programa o salto hacia atrás. En cuanto a las condiciones a cumplir son incondicionales y condicionales. Las incondicionales se realizan siempre que se ejecute la instrucción, mientras que las condicionales solo se realizan al cumplirse una determinada tarea.

    • Especiales: Estas instrucciones varían según cada lenguaje pero en general las mas importantes son: edición, impresión, conversión, ordenación, declarativas, modificación de direcciones, comunicación de Entrada/Salida, Graficas.

    • Estructura General de un Lenguaje en Pascal:

      Program identificador { cabecera del programa }

      Uses identificadores

      Label lista de etiquetas { sección de etiquetas }

      const.

      Definiciones de constantes

      Type

      Declaración de tipos de datos definidos por el usuario

      Var.

      Declaración de variables globales

      Procedure

      Definiciones de procedimientos

      Function

      Definición de funciones

      Begin { cuerpo del programa }

      Sentencias

      End.

      UNIDAD II:

      Paradigmas de la Programación:

      Los lenguajes y métodos de diseño son la guía para producir el diseño de un sistema. Un método de diseño es la forma de producir el diseño de un sistema. Los métodos más usados son: “Estructurado”, Diseño Descendente o “Top Down “y Diseño “Orientado a Objetos”. No obstante estas metodologías de diseño, dentro de los lenguajes de programación es común encontrar los llamados paradigmas de programación. Los lenguajes que soportan un paradigma especifico de computación se puede clasificar en orientado al paradigma de computación.

      Los lenguajes de programación convencionales son una abstracción de la arquitectura de la computadora subyacente. El modelo abstracto consiste en la ejecución secuencia paso por paso, de las instrucciones que cambian el estado de la computación vía la modificación del almacén de valores. Los lenguajes convencionales basados en el modelo computacional Von Newman se llaman imperativos.

      Paradigmas de programación (Conceptos).

      Un paradigma de programación es un modelo que engloba a ciertos lenguajes que comparten:

      • Elementos Estructurales ¿con que se confeccionan los programas?

      • Elementos metodológicos: ¿como se confecciona un programa?

      Consideramos los siguientes paradigmas (en general):

      Programación Imperativa: Es la mas antigua (Maquina de Von Neumann).Un programa es una secuencia de acciones que se realizan en orden. Existen herramientas para modificar el orden de ejecución de las acciones.

      Programación Declarativa:

      • Programación Funcional: definición de una serie de funciones.

      • Programación Lógica: definición de hechos y relaciones lógicas entre estos. No se indica el orden en el que se computa una función o se deriva un nuevo hecho.

      Programación Orientada a Objetos: Un programa consiste en una colección de objetos que intercambian mensajes. Cada objeto es una entidad que agrupa una cierta información (estado) y un conjunto de mecanismos para manipularlas (métodos).

      Caso Particular: Programación Orientada a Eventos: Los lenguajes visuales orientada al evento y con manejo de componentes dan al usuario que no cuenta con mucha experiencia en desarrollo, la posibilidad de construir sus propias aplicaciones utilizando interfaces grafica sobre la base de ocurrencia de eventos. Para soportar este tipo de desarrollo interactúan dos tipos de herramientas, una que permite realizar diseños gráficos y un lenguaje de alto nivel que permite codificar los eventos. Con dichas herramientas es posible desarrollar cualquier tipo de aplicaciones basadas en el entorno.

      Los paradigmas pueden ser considerados como patrones de pensamientos para la resolución de problemas, estos se clasifican en:

      Programación Estructurada: En la programación estructurada se pueden conjuntas secuencias de declaraciones e instrucciones en un mismo lugar, las que después pueden ser usadas por el programa principal desde cualquier punto. La secuencia se conoce como subrutina, procedimiento o función dependiendo del lenguaje que se trate. Se dice que se hace una llamada para invocar al procedimiento. Después de que la secuencia es procesada, el control del flujo regresa al programa principal justo después de donde se hizo la llamada.

      En resumen la programación estructurada consiste en dividir un programa en pequeñas piezas llamadas procedimientos y cada procedimiento es ejecutado o llamado por el programa principal desde diferentes lugares de este para resolver un problema.

      El paradigma original de este tipo de programación es “Buscar los procedimientos que se desean; Usar los mejores algoritmos existentes”

      Programación Modular: La programación modular permite agrupar procedimientos, que tienen una funcionalidad común, en módulos separados. Por lo tanto, un programa ya no consiste de una sola parte. El programa ahora se divide en varias partes más pequeñas que interactúan a través de interfaces y llamadas a procedimientos.

      Cada modulo puede contener sus propios datos. Esto permite que cada modulo maneje un estado interno el cual es modificado por las llamadas a sus procedimientos. Sin embargo hay un único estado por modulo y cada modulo existe a lo mas que una vez en todo programa. Típicamente requiero escribir dos archivos: la interfaz, donde se hacen todas las declaraciones de datos y funciones y la implementación. La interfaz describe lo que esta disponible del modulo sin importar los detalles. De esta manera se esconde la información de la implementación. Este es un principio fundamental de la ingeniería de software.

      El paradigma de la programación modular es: “Buscar los modulo que se requieran; particionar al programa de tal manera que los datos se escondan dentro de los módulos”.

      Programación orientada a objetos: Describen los lenguajes que soportan a objetos en interacción. Un objeto es un grupo de procedimientos que comparten un estado. El termino de orientado a objetos fue utilizado originalmente para distinguir aquellos lenguajes basados en objetos que soportaban clases de objetos y la herencia de atributos de un objeto padre por parte de sus hijos.

      El paradigma de la programación orientada a objetos es: “Buscar las clases que se desean; proveer de un conjunto completo de operaciones para cada clase; especializar usando herencia”.

      Paradigmas declarativos: Un lenguaje declarativo es uno en el que un programa especifica una relación o función. El intérprete o compilador para el lenguaje en particular administra la memoria por nosotros. Los tres paradigmas declarativos provienen de las matemáticas: la lógica, la teoría de funciones y el cálculo relacional.

      Paradigmas de programación lógica: La programación lógica esta basada en un subconjunto del calculo de predicados, incluyendo instrucciones escritas en forma conocidas como cláusulas de Horn. Este paradigma puede deducir nuevos hechos a partir de otros hechos conocidos. Un sistema de cláusulas de Horn permite un método particularmente mecánico de demostración llamado resolución.

      Paradigmas funcionales: Como su nombre lo dice operan solamente a través de funciones. Cada función devuelve un solo valor, dada una lista de parámetros. No se permiten asignaciones globales, llamados efectos colaterales. La programación funcional proporciona la capacidad para que un programa se modifique así mismo, es decir que pueda aprender.

      Paradigmas de la programación distribuida: La programación concurrente ha sido dividida en dos amplias categorías, sistemas acoplados en forma débil o fuerte. El término distribuido se refiere por lo general a lenguajes para sistemas acoplados debidamente que soportan un grupo de programadores trabajando en un programa particular de manera simultánea y comunicándose a través de paso de mensajes mediante un canal de comunicación. Un sistema acoplado fuertemente permite que más de un proceso de ejecución tenga acceso a la misma ubicación de memoria. Un lenguaje acoplado con el sistema debe sincronizar el uso compartido de la memoria, de modo que solo un proceso escriba una variable compartida a la vez, y de modo que un proceso pueda esperar hasta que ciertas condiciones se satisfagan por completo antes de continuar la ejecución. La memoria compartida tiene la ventaja de la velocidad, por que no se necesita pasar mensajes.

      Paradigmas estructurados en bloques: Se refiere a los ámbitos anidados, es decir los bloques pueden estar anidados dentro de otros bloques y pueden contener sus propias variables. La RAM representa una pila con una referencia al bloque que este actualmente activo en la parte superior.

      Paradigmas del lenguaje de base de datos: Las propiedades que los distinguen de los lenguajes diseñados para tratar con bases de datos son la persistencia y la administración de cambios. Un sistema de administración de base de datos incluye un lenguaje de definición de datos (DDL) para describir una nueva colección de hechos, o datos y un lenguaje de manipulación de datos (DML) para la interacción con las bases de datos existentes.

      Programación Estructurada:

      Conceptos Básicos:

      Los primitivos propósitos de la programación estructurada dirigían sus esfuerzos a buscar modos de minimizar la probabilidad de error en el proceso de programación. Uno de los objetivos de la programación estructurada es la minimización del error humano. Podríamos por ello enunciar la programación estructurada (PE) como una técnica de construcción de programas que utilizan al máximo los recursos del lenguaje, limita el conjunto de estructuras aplicables a leer y presenta una serie de reglas que coordinan adecuadamente el desarrollo de las diferentes fases de la programación.

      La programación estructurada utiliza en su diseño los siguientes conceptos o principios fundamentales recogidos esencialmente en la definición anterior:

      • Estructuras básicas

      • Recursos abstractos

      • Diseño descendente “arriba-abajo” (Top-down)

      Programa Propio:

      Un Programa es considerado propio si cumple con las características siguientes:

    • Posee un solo punto de entrada y un solo punto de salida para facilitar el control del programa.

    • Si existen caminos que se pueden seguir desde la entrada hasta la salida y que pasen por todos los puntos del programa.

    • Si todas sus instrucciones son ejecutables y no existen lazos o bucles infinitos.

    • Tener un programa con una estructura clara se basa en tres principios fundamentales (Principios fundamentales de la Programación Estructurada).

      Principios Fundamentales de la Programación Estructurada:

      La Programación Estructurada se considera una técnica de programación sin saltos condicionales ni incondicionales. Un programa estructurado debe ser leído desde un principio hasta el fin de la secuencia normal de lectura y sin interrupciones. Los principios fundamentales de la Programación Estructurada son:

      Estructuras básicas de Control:

      Secuencial: En esta estructura una instrucción se ejecuta una a continuación de otra sin posibilidad de saltos condicionales o incondicionales.

      Alternativas o Selectivas:

      Permite elegir entre distintas alternativas o acciones a seguir dependiendo del valor que asuma la evaluación de una condición. El punto donde se toma o evalúa una decisión se denomina PUNTO DE DECISION y esta representado por un rombo en un diagrama de flujo.

    • Alternativa Simple: (Condicional) Realiza la ejecución condicional de una acción, es decir que se evalúa la condición y si la condición se cumple, se ejecuta la acción.

    • Si {Condición} Entonces

      {Acción}

      Fin _ si

    • Alternativa Doble: (Alternativa) Permite evaluar en tiempo de ejecución una condición boleaba para poder elegir entre dos alternativas posibles y distintas. Recordar que los valores resultantes de le evaluación de una condición son mutuamente excluyentes. Es verdadera o es falsa.

    • Si {Condición} Entonces

      {Acción 1}

      Si_no

      {Acción 2}

      Fin _ si

    • Alternativa Múltiple: (Selectiva) Permite asociar un conjunto de condiciones a un conjunto de acciones que se excluyen mutuamente, es decir que permite elegir entre “n” alternativas posibles y distintas

    • Según {Variable}

      {Condición-1}: {Acción 1}

      {Condición-2}: {Acción 2}

      {Condición-3}: {Acción 3}

      .

      .

      .

      {Condición-n}: {Acción n}

      Si_no

      {Acción x}

      Fin _ según

      Estructuras Repetitivas:

      Permite repetir la ejecución de una acción o un grupo de acciones un numero determinado de veces, el que puede ser 0, 1 o mas veces. En consecuencia un lazo o bucle es un conjunto de acciones que se van a repetir. Se especifica claramente que se debe repetir un numero de veces, sin embargo ese numero de veces a repetir puede ser conocido o no. Si es conocido significa que necesitamos información adicional y si no se conoce el numero de veces, entonces esta determinado por la evaluación de una condición.

    • Estructura Para: (For) Se emplea cuando por lo general el número de repeticiones es conocido de antemano y por lo general ese número no suele ser grande.

    • Para {Variable} de valor i hasta valor f incremento inc hacer

      {Acciones}

      Fin _ para

    • Estructura Mientras: (While) Esta Estructura determina la repetición de un grupo de instrucciones. Muestra la condición en forma inicial dado que se evalúa dicha condición antes de repetir la o las instrucciones asociadas. Es necesario que el valor de la evaluación de la condición cambia al menos una vez para evitar un lazo infinito.

    • Mientras {Condicion} Hacer

      {Acciones}

      Fin _ mientras

    • Estructura Repetir: (Repeat) Esta Estructura determina la repetición de un grupo de instrucciones. Muestra la condición al finalizar un conjunto de instrucciones donde esta es evaluada para determinar si se continúan repitiendo las instrucciones asociadas. Es necesario que dicha condición cambie al menos una vez para evitar un lazo o bucle infinito.

    • Repetir

      {Acciones}

      Hasta que {Condición}

      Recursos Abstractos:

      La estructuración debe cumplir el uso de recursos abstractos. El proceso de realización de diferentes pasos hasta encontrar la solución de un problema es un proceso abstracto.

      Diseñar o concebir un problema en términos abstractos consiste en no tener en cuenta la maquina que lo va a resolver como así también el lenguaje de programación que se va a utilizar. Esto lleva consigo la obtención de un conjunto de acciones que se han de realizar para obtener una solución. Al considerar un algoritmo y los cálculos que incluyen se hace abstracción de los valores específicos.

      Diseño de Programas Estructurados:

      La realización del diseño estructurado de un programa se basa en la aplicación de los siguientes conceptos:

      • Ir de lo general a lo particular, descendiendo en la estructura del programa y en su nivel del detalle.

      • De la definición inicial del programa se pasa a un esquema del algoritmo descrito en pseudocódigo.

      • Independencia inicial del lenguaje.

      • Diseño por niveles, dejando los detalles para niveles posteriores. Verificar en cada nivel el esquema correcto.

      • Finalizar con un trabajo de precomposición del algoritmo completo.

      Metodología Descendente “Arriba-Abajo” (Top-Down).

      Consiste en establecer una serie de niveles de menor a mayor complejidad (arriba-abajo) que den solución al problema. En esencia consiste en efectuar una relación entre las etapas de la estructura de forma que una etapa jerárquica y su inmediatamente inferior se relacionen mediante entradas y salidas de información.

      Un programa estructurado tiene una representación en forma de árbol.

      El diseño se basa en la realización de diferentes niveles. El primer nivel resuelve totalmente el problema y el segundo y sucesivos niveles son “refinamientos sucesivos” del primero (stepwise) y se sigue siempre la metodología de recursos abstractos. Si el diseño y planteamiento es correcto nunca será preciso volver atrás ya que los niveles anteriores al que se este situado en un momento dado ya habrán resuelto el problema en su totalidad.

      UNIDAD III:

      Programación Modular:

      El concepto básico de la programación modular es muy simple, consiste en dividir un programa en módulos. En realidad es un método de diseño que tiende a dividir el problema de forma lógica, en partes perfectamente diferenciadas que pueden ser analizadas programadas y puestas a punto independientemente. La división de un problema en módulos o programas independientes, exige otro modulo que controle y relacione a todos los demás, es el denominado modulo base o principal del problema.

      Realmente la programación modular es un intento para diseñar programas de forma tal que cualquier función lógica pueda ser intercambiada sin afectar otras partes del programa.

      Ventajas de la programación modular:

    • Un programa modular es más fácil de escribir y depurar (ejecutar, probar y poner a punto). Se puede profundizar en las pruebas parciales de cada modulo mucho mas de lo que se hace un programa mayor.

    • Un programa modular es fácil de mantener y modificar.

    • Un programa modular es fácil de controlar. El desglose de un problema en módulos permite encomendar los módulos mas complejos a los programadores mas experimentados y los mas sencillos a los programadores mas noveles.

    • Posibilita el uso repetitivo de las rutinas en el mismo o en diferentes programas.

    • Inconvenientes de la programación modular:

    • No se dispone de algoritmos formales de modularidad, por lo que a veces los programadores no tienen claras las ideas de los módulos.

    • La programación modular requiere más memoria y tiempo de ejecución.

    • Objetivos de la programación modular:

      • Disminuir la complejidad

      • Aumentar la claridad y la fiabilidad

      • Disminuir el coste

      • Aumentar el control del proyecto

      • Facilitar la ampliación del programa mediante nuevos módulos.

      • Facilitar las modificaciones y correcciones al quedar automáticamente localizadas en un modulo

      Concepto de modulo:

      Un modulo esta constituido por una o varias instrucciones físicamente contiguas y lógicamente encadenadas, las cuales se pueden referenciar mediante un nombre y pueden ser llamadas desde diferentes puntos de un programa.

      Un modulo puede ser:

      • Un programa

      • Una función

      • Una subrutina (o procedimiento).

      Convocatoria de Módulos:

      Se convoca un modulo con la llamada CALL, seguido con el nombre del Modulo

      Esquema de Funcionamiento:

      *

      *

      *

      * *

      *

      * Orden de Transferencia de Control.

      Descripción:

    • Comienza con la ejecución de la primera instrucción del Programa principal.

    • Se continua ejecutando cada una de las instrucciones del modulo principal hasta que se encuentra una llamada a un subprograma.

    • Esta llamada implica una orden al procesador para que tr4ansfiera el control de la ejecución del programa a la primera instrucción del modulo llamado.

    • La ejecución continua dentro del modulo llamado hasta que encuentra una orden de retorno o fin logico. Luego se transfiera el control de ejecución del programa a la instrucción siguiente a la orden de llamada al subprograma.

    • Si un subprograma llama a su vez a otro subprograma se produce una inversión en el carácter del modulo dado que pasa a ser llamador y el otro el subprograma llamado. Como es de suponer, se vuelve a transferir el control del programa y se repite el proceso.

    • Subprogramas:

      Un medio de solucionar problemas es dividir el programa en partes que pueden ser desarrolladas por separado y eventualmente integrarse en una unidad. Tales partes independientes se llaman módulos o subprogramas.

      Un subprograma puede ejecutar las mismas acciones que un programa, es decir aceptar datos, ejecutar cálculos y devolver o proporcionar resultados. Sin embargo un subprograma es utilizado por el programa para un fin específico. El subprograma recibe datos del programa y le devuelve resultados. Se dice que el programa llama o invoca al subprograma, este ejecuta una tarea y a continuación retorna o devuelve el control al programa desde donde fue hecha la llamada. Un subprograma puede tener también a su vez uno o varios subprogramas que se suelen conocer como subprogramas anidados o bien niveles jerárquicos...

      El subprograma esta constituido por un grupo de instrucciones que no forman parte del programa principal. Sin embargo, aunque cada subprograma es funcionalmente independiente (incluso ensamblado o compilado) no funciona nunca solo, debe siempre ser llamado por el programa principal y dejara de actuar cuando haya terminado su función y el control retorne al programa principal.

      Existen dos tipos de subprogramas:

      • Procedimientos o subrutinas: Especifican cálculos que ejecutaran acciones en lugar de producir valores. Las subrutinas o procedimientos devuelven diferentes valores.

      • Funciones: especifican cálculos que producirán valores necesarios para evaluar expresiones. Las funciones devuelven un valor

      Parámetros de un Subprograma:

      En general los subprogramas reciben información a través de parámetros formales

      (O variables falsas). Cada invocación de un subprograma proporciona información por medio de parámetros actuales. Los parámetros actuales o efectivos especifican los valores actuales utilizados para parámetros formales en la definición de subprograma

      Entrada Resultados

      Tipos de Objetos:

      Los diferentes objetos que manipulan un programa, ya sea constantes, variables, tablas, archivos, subprograma, etc., se clasifican según su ámbito de aplicación, es decir en que porción del programa y o subprogramas sus valores son conocidos y por lo tanto pueden ser utilizados.

      Objetos Globales y Locales:

      Son objetos globales los declarados en el programa principal, cuyo ámbito se extiende al mismo y a todos los subprogramas que lo componen.

      Son objetos locales a un subprograma, los declarados en dicho subprograma y cuyo ámbito de aplicación, esta restringido a ese subprograma y a todos los subprogramas en los declarados.

      Pasó de Parámetros:

      Como ya se dijo, el proceso de emisión y recepción de datos y resultados, mediante variables de enlace, se denomina paso de parámetros.

      Un parámetro puede ser de dos tipos:

    • Actuales o Reales: Son los datos y variables enviados en cada llamada al subprograma por el programa o subprograma llamador. Ej.:

    • Nombre_proc (pa1,pa2,pa3,…..,pan);

    • Fingidos, Formales o Ficticios: Son las variables locales de un subprograma utilizada para la recepción y el envió de datos. Ej:

    • Procedure Nombre_proc (pf1,pf2,pf3,…..pfn);

      El paso de parámetros puede realizarse de dos manera diferente:

    • Paso por Valor: Para suministrar datos de entrada al subprograma.

    • Paso por Referencia: Para entrada y Salida de datos o solo Salida

    • Un parámetros actual pasado por valor, es un dato o una variable global que contiene un valor y que es una entrada para el subprograma llamador. En el caso de ser una variable su contenido no puede ser modificado por el subprograma, dado que solamente se copia el contenido de la variable en el parámetro formal correspondiente cuyo valor luego será utilizado por el subprograma.

      El parámetro actual pasado por referencia, es una variable del programa o subprograma llamador y que puede contener o no un valor.

      El subprograma llameo coloca un resultado en esa variable el cual queda a disposición del programa llamador una vez concluida la ejecución del subprograma llamado.

      Es de destacar que desde el punto de vista físico en el paso por valor no se proporciona la variable al subprograma, sino solamente su contenido evitando de esa manera su modificación.

      En el paso por referencia se proporciona la dirección o referencia de la variable por lo cual el subprograma la utiliza como propia modificando su contenido si fuese necesario para dejar en ella los resultados que va a devolver. La utilización de parámetros por referencia, supone el ahorro de memoria puesto que la variable local o formal correspondiente no existe físicamente, sino que se asocia a la variable global correspondiente en cada llamada. Sin embargo supone el riesgo de modificar por error el contenido de una variable global sin desearlo.

      Cohesión y Acoplamiento:

      Cohesión:

      “La cohesión es la medida cualitativa de cuan estrechamente relacionados están los elementos internos de un modulo.”

      Cohesión Casual (la peor):

      La cohesión casual ocurre cuando existe poca o ninguna relación entre los elementos de un modulo. Es muy difícil encontrar módulos puramente casuales. Dificultan las modificaciones y mantenimiento de un programa.

      Cohesión Lógica (Sigue a la peor):

      Los elementos de un modulo están lógicamente asociados si puede pensarse en ellos como pertenecientes a la misma clase lógica de funciones, es decir aquellas que pueden pensarse como juntas lógicamente. Por ejemplo un modulo que agrupe elementos de procesamiento que caen en la clase de “entradas”. La cohesión lógica es mas fuerte que la casual debido a que represente un mínimo de asociación entre el problema y los elementos del modulo pero un modelo lógicamente cohesivo no realiza una función especifica sino que abarca una serie de funciones.

      Cohesión Temporal (de moderada a pobre):

      Significa que todos los elementos de procesamiento de una colección ocurren en el mismo periodo de tiempo durante la ejecución del sistema .Existen conexiones entre la cohesión lógica y temporal pero la última es más fuerte ya que involucra al factor tiempo. Ejemplo un modulo que agrupe rutinas de inicialización de variables, apertura de archivos, etc.

      Cohesión de procedimiento (moderada):

      Se da cuando elementos de procesamiento relacionados proceduralmente son elementos de una unidad procedural común. Una unidad procedural común puede ser un proceso de iteración (loop) y de decisión, o una secuencia lineal de pasos. Este nivel de cohesión comúnmente se tiene como resultado de derivar una estructura modular a partir de modelos de procedimiento como ser diagramas de flujo.

      Cohesión de comunicación (de moderada a buena):

      Es el menor nivel en el cual encontramos relación entre los elementos de procesamiento que es intrínsecamente dependiente del problema. Significa que todos los elementos operan sobre el mismo conjunto de datos de entrada o de salida. Ejemplos típicos pueden ser un modulo que imprima o grabe un archivo de transacciones o un modelo que reciba datos de diferentes fuentes y los transforme y ensamble en una línea de impresión.

      Cohesión secuencial:

      En ella los datos de salida (resultados) de un elemento de procesamiento sirven como datos de entrada al siguiente elemento de procesamiento. Este es claramente un principio asociativo relacionado con el dominio del problema.

      Cohesión funcional (la mejor):

      Es aquella que no es secuencial, por comunicación, por procedimiento, temporal, lógica o casual. En un modulo completamente funcional cada elemento de procesamiento es parte integral y esencial para la realización de una función simple. Por ejemplo un modulo que realiza una función matemática será puramente funcional.

      “Cualquier modulo rara vez verifica un solo principio asociativo. Sus elementos pueden estar relacionados por una mezcla de los siete niveles de cohesión.

      La cohesión de un modulo es aproximada al nivel mas alto de cohesión que es aplicable a todos los elementos de procesamiento dentro del modulo”.

      Acoplamiento:

      “El acoplamiento es un concepto abstracto que nos indica el grado de interdependencia entre módulos”

      Niveles de Acoplamientos y Tipos:

      (-) Bajo

      Datos

      Marcas o Estampados

      Control

      Externo

      Común

      Contenido

      (+)Alto

      Acoplamiento de Datos:

      Ocurre cuando dos o mas módulos comparten el mismo elemento de datos no global.

      Acoplamiento de Marcas o Estampados:

      Ocurre cuando dos o más módulos comparten la misma estructura de datos no global.

      Es decir que esos módulos comparten todo un conjunto de datos.

      V es un Vector que es cargado

      V

      B es el menor valor del Vector V

      Acoplamiento de Control:

      Ocurre cuando un modulo le pasa a otro una bandera o interruptor booleano con el objetivo de controlar una lógica interna del modulo llamado. Es decir que la información transferida es únicamente dato de tipo bandera

      B: Tipo Booleano

      B

      Acoplamiento Externo:

      Se da cuando dos o más módulos se refieren al mismo elemento de datos globales

      Acoplamiento Común:

      Se da Cuando dos o más módulos se refieren a la misma estructura de datos Global.

      Acoplamiento de Contenido:

      Se da cuando un modulo puede transferir el control de ejecución a la mitad de otro modulo.

      Criterios de modularizacion:

      La división de un programa en módulos debe cumplir los siguientes criterios:

    • Cada modulo debe corresponder a una función lógica perfectamente diferenciada.

    • El tamaño de cada modulo es variable. Deben ser pequeños para que sean claros y de poca complejidad. Las normas varían según las situaciones. IBM considera que un modulo no debe superar el modulo de 50 instrucciones en PL/I. Como norma general practica se puede considerar el tamaño máximo de un modulo como una pagina de listado de impresora.

    • Evitar variables externas.

    • Procurar no utilizar demasiados niveles de modularizacion para evitar complejidad de la red.

    • Estructura de caja negra para cada modulo (la salida debe ser función exclusiva de la entrada).

    • Las técnicas de programación modular no aportan nuevos conceptos desde el punto de vista de proceso de la información sino más bien un método o filosofía para la descomposición idónea de un problema en problemas o módulos más sencillos.

      “Todo programa modular debe presentar máxima cohesión y mínimo acoplamiento”

      UNIDAD IV:

      Documentación de Programas:

      Un programa de computadora necesita siempre de una documentación cuya entidad será proporcional al volumen del mismo.

      Existen tres grupos de personas que necesitan conocer la documentación del programa: programadores, operadores y usuarios. Los requerimientos necesarios para cada uno de ellos suelen ser diferentes en función de las misiones de cada grupo:

      • Programadores: Manual de mantenimiento del programa.

      • Operadores: Manual del operador. El operador es la persona encargada de correr el programa, introduciendo datos y extrayendo resultados.

      • Usuarios: Manual del usuario. El usuario es la persona de una organización que explota el programa, conociendo su función, las entradas requeridas, el proceso a ejecutar y la salida que produce.

      En entornos interactivos como el caso de Turbo pascal, las misiones del usuario y operador suelen ser las mismas, así pues, la documentación del programa se pueden reducir a:

      • Manual del Usuario.

      • Manual de mantenimiento.

      El manual de mantenimiento es la documentación requerida para mantener un programa durante su ciclo de vida. Se divide en dos categorías:

      • Documentación interna.

      • Documentación externa.

      Documentación Interna:

      Esta documentación cubre los aspectos del programa relativos a la sintaxis del lenguaje. Esta documentación esta contenida en los comentarios, encerrados entre llaves o bien paréntesis / asteriscos. Algunos tópicos a considerar son:

      • Cabecera del programa (nombre del programador, fecha de la versión actual, breve descripción del programa).

      • Nombres significativos para describir identificadores.

      • Comentarios relativos a la función del programa como en todo, así como los módulos que comprenden el programa.

      • Claridad de estilo y formato [una sentencia por línea, identacion (sangrado)], líneas en blanco para separar módulos (procedimientos, funciones, unidades, etc.).

      • Comentarios significativos.

      “La documentación interna consiste en un prologo estándar para cada unidad de programa y unidad de compilación, los aspectos autodocumentados del código fuente y los comentarios internos intercalados en la porción ejecutable del código”.

      Formato característico de los prólogos de subprogramas y unidades de compilación:

      • Nombre del autor:

      • Fecha de Compilación:

      • Función(es) realizada(s):

      • Algoritmos empleados;

      • Autor/fecha/propósito de la modificación:

      • Parámetros y modos:

      • aseveración de entrada:

      • aseveración de salida:

      • Variables globales:

      • Efectos colaterales:

      • Estructuras de datos principales:

      • Rutinas que invocan:

      • Rutinas invocadas:

      • Restricciones de tiempo:

      • Manejo de excepciones:

      • Suposiciones:

      Convenciones sobre comentarios:

        • Minimícese la necesidad de comentarios inmensos en el código al usar:

      • Prologo estándar

      • Estructuras de programación estructurada

      • Buen estilo de programación

      • Nombres descriptivos del dominio del problema para tipos de datos definidos por el usuario, variables, parámetros formales literales de enumeración, subprogramas, archivos, etc.

      • Características de autodocumentacion del lenguaje de implementación, como excepciones definidas por el usuario, tipos de datos definidos por el usuario, encapsulado de datos, etc.

        • Adjúntese comentarios a los bloques de código que:

      • Realicen manipulaciones de datos importantes

      • Simulen construcciones de control estructuradas que manejen instrucciones goto

      • Realicen manejo de excepciones

        • Úsese la terminología del domino del problema en los comentarios

        • Empléese líneas en blanco, delimitadores y sangrado para realizar los comentarios

        • Colóquense los comentarios a la extrema derecha para documentar cambios y revisiones

        • No se manejen comentarios largos y confusos para aclarar un código oscuro y complejo. Rescríbase el código.

        • Siempre es necesario asegurarse que el código y los comentarios correspondan con el otro, así como con los requisitos y especificaciones de diseño

      Documentación externa:

      Documentación ajena al programa fuente, que se suele incluir en un manual que acompaña al programa. La documentación externa debe incluir:

      • Listado actual del programa fuente, mapas de memoria, referencias cruzadas, etc.

      • Especificación del programa: documento que define el propósito y modo de funcionamiento del programa.

      • Diagrama de estructura que representa la organización jerárquica de los módulos que comprende el programa.

      • Explicaciones de formulas complejas.

      • Especificaciones de los datos a procesar: archivos externos incluyendo el formato de las estructuras de los registros, campos, etc.

      • Formatos de pantallas utilizados para interactuar con los usuarios.

      • Cualquier indicación especial que pueda servir a los programadores que deben mantener el programa.

      Manual del Usuario:

      El manual del usuario debe cubrir al menos los puntos:

      • Ordenes necesarias para cargar al programa en memoria desde el almacenamiento secundario (disco) y arrancar su funcionamiento.

      • Nombres de los archivos externos a lo que accede el programa

      • Formato de todos los mensajes de error o informes.

      • Opciones en el funcionamiento del programa.

      • Descripción detallada de la función realizada por el programa.

      • Descripción detallada, preferiblemente con ejemplos, de cualquier salida producida por el programa.

      Un buen estilo de Codificación:

      Estas normas son una guía de estilo para la codificación de programas. La experiencia ha demostrado que estas normas son beneficiosas para reducir errores semánticas y demandan cierta consistencia en la elección de nombres y la organización. Adicionalmente tienen por objeto asegurar la uniformidad de código entre los distintos programadores.

      Comentarios:

      La legibilidad de los programas aumenta considerablemente utilizando comentarios. Un comentario es un texto explicativo más o menos largo, situado en el programa e ignorado por el compilador. Los comentarios no se consideran (son invisibles) en la fase de compilación y ejecución, pero de importancia primordial en la fase de análisis, puesta a punto y mantenimiento.

      Los comentarios son una parte importante de la documentación de un programa, ya que ayudan al programador y a otras personas a la comprensión del programa.

      Información sobre la historia de las versiones:

      Siempre es recomendable crear un encabezado al comienzo de cada archivo, en el cual se incluyan detalles tales como la fecha de creación, el autor, la versión del programa y una descripción general del contenido. Este bloque debe aparecer como un comentario

      Deshabilitar código con comentarios:

      Esta técnica se usa generalmente para diferenciar una sección del programa que no funciona correctamente. Una vez que hayamos solucionado el error simplemente borramos los marcadores de comentario y el código vuelve a estar activo nuevamente.

      Cadenas de Documentación:

      Todos los lenguajes permiten utilizar comentarios para documentar que realiza una función o un modulo, pero unos pocos van un paso mas allá y permiten documentar las funciones de un modo tal que el mismo lenguaje puede proveer una ayuda interactiva en la fase de programación. Esto se realiza mediante una cadena de documentación.

      Sangrado:

      Esto es fuente de acalorados debates en los círculos de programación y parecería que cada programador tiene su propia idea acerca de cual es le mejor manera de tabular el código. Se han realizado estudios que demuestran que al menos hay ciertos factores que realmente son importantes para una mayor legibilidad del programa y exceden un criterio simplemente estético.

      Los nombres de las variables:

      En general es recomendable que el nombre de la variable refleje claramente el contenido que almacena. Esto implica una lucha entre lo comprensible y lo sencillo. En general la mejor opción es utilizar nombre breve pero sensato. Un nombre muy largo se vuelve confuso y es difícil utilizarlo con consistencia a lo largo del programa. Cada variable local, con la excepción de las que tiene nombres realmente autoexplicativos y los aburridos contadores de bucle, deben ser comentados cuando se declaran. Todas las variables globales deben ser comentadas sin excepción. Se debe realizar las especificaciones algebraicas de aquellos tipos que se definan por el programador.

      Funciones y Procedimientos:

      Comienzan con una descripción de su propósito obligatorio a no ser que sea obvio donde se especifican las variables de entrada el proceso y el resultado que devuelve. Los nombres de los parámetros deben ser explícitos. Para funciones muy genéricas nombres cortos pueden ser apropiados la función o el procedimiento realiza algún tipo de operación que puede dar un error el valor devuelto debe ser el código de error producido o 0 en caso satisfactorio. Los datos se devuelven a través de referencias.

      Convenciones de nombres:

      Las siguientes reglas especifican cuando utilizar letras mayúsculas o minúsculas en los identificadores:

    • Todos los nombres de variables y funciones y todos los miembros de estructuras van en minúsculas (pueden tener mayúsculas en el medio para identificar la separación de palabras dentro del identificador).

    • Todos los nombres de tipos, tipos abstractos de datos y clases deben empezar por mayúscula seguido de minúscula (pueden tener mayúsculas en el medio para identificar la separación de palabras dentro del identificador).

    • Para el nombre se deben utilizar únicamente las letras de la `a' a la `z' y este debe ser lo mas clarificador posible.

    • Identacion y espacios en blanco:

        • Utilizar tabuladores fijados a tamaño constante (por ejemplo cada 3 columnas).

        • Utilizar líneas en blando libremente para separar partes lógicas distintas de una función.

        • Utilizar espacios en blando alrededor de cada operador binario.

        • Dejar espacios en blanco después (y no antes) de cada coma y punto y coma, pero no después de un nombre de función.

        • Todas las líneas deben encajar en 80 columnas. Si hay que romper una instrucción, añade un nivel de identacion para la continuación. Si es posible comenzar la línea identada con un operador.

        • Sangrar continuamente los diferentes niveles de código.

      Codificación es Pascal:

      En Pascal, los comentarios se encierran bien entre llaves o paréntesis acompañados por un asterisco. De hecho directivas de compilador también son comentarios.

      Uso de Mayúsculas:

      El compilador de Pascal no distingue entre mayúsculas y minúsculas. En general esto es bueno, ya que en otros lenguajes se producen muchos errores por grafía de mayúsculas incorrecta. Sin embargo esto conlleva algunas desventajas útiles. En primer lugar, usted debe ser conciente de que las dos formas de una letra son equivalentes y no utilizarlas para referirse a elementos distintos. En segundo lugar debería intentar ser coherente en el uso de mayúsculas y minúsculas, para hacer el código más legible.

      Otro de los elementos que el compilador ignorar completamente son los espacios, las líneas nuevas y los espacios de tabulador. A estos elementos se les llama “espacios en blanco”. Un espacio en blanco solo sirve para hacer el código más legible. No afecta a la compilación.

      Pascal le deja escribir una instrucción en varias líneas de código, extendiendo una instrucción larga en dos o más líneas. La desventaja de permitir esto es que debe acordarse de añadir un punto y como al final de cada instrucción o mas exactamente acordarse de separar las instrucciones entre si.

      Impresión Bonita:

      La última sugerencia sobre el uso de espacio s en blanco se refiere al típico estilo de formato en Pascal llamado “Impresión Bonita” (pretty-printing). Esta regla es simple cada vez que necesite escribir una instrucción compuesta, haga una sangría de dos espacio a la derecha del resto de dicha instrucción. Una instrucción compuesta dentro de otra instrucción compuesta llevara una sangría de cuatro espacios y así sucesivamente.

      Resaltado Sintáctico:

      Para hacer mas fácil el leer y escribir código pascal, el editor delphi tiene una cualidad llamada resaltado sintáctico. Dependiendo de la función en pascal de las palabras que usted introduce a través del editor, son representadas con distintos colores. Por defecto las palabras clave están en legra negrita, cadena de texto y comentarios están en color.

      DIRECTRICES DE DOCUMENTACION:

      La programación por computadora incluye el código fuente de un sistema y todos los documentos de apoyo generados durante el análisis, diseño, instrumentación, pruebas y mantenimiento del sistema. La documentación interna incluye prólogos estándar para unidades de compilación y subprogramas, los aspectos autodocumentados del código fuente, y los comentarios internos, incrustados en el código fuente. Las notas de cada unidad proporcionan mecanismos para organizar las actividades del trabajo y esfuerzos de documentación de cada programador. Esta sección describe algunos aspectos de los documentos de apoyo, el uso de notas de cada unidad del programa y algunos principios generales para la documentación interna del código fuente.

      Documentos de apoyo:

      Las especificaciones de requisitos, documentos de diseño, planes de prueba, manuales de usuario, instrucciones de instalación y los reportes de mantenimiento son ejemplos de documentos de apoyo. Estos documentos son los productos que resultan del desarrollo y mantenimiento sistemático de la programación. Las herramientas, técnicas y notaciones para generar y dar mantenimiento a estos documentos se analizan en todo este texto.

      Un enfoque sistemático al desarrollo de la programación garantiza que los documentos de apoyo se desarrollen de una manera ordenada y que esos documentos se encuentren disponibles cuando se necesiten. En el enfoque adecuado para el desarrollo de la programación, la preparación de documentos de apoyo normalmente se difiere hasta que se termine la instrumentación del sistema. Debido a restricciones de tiempo y falta de motivación, los documentos que se generan de esta manera normalmente son inadecuados para soportar actividades de prueba, entrenamiento, modificaciones y mantenimiento.

      Los documentos de apoyo de calidad inferior a la estándar que no están disponibles cuando se necesitan, son una fuerte indicación de problemas con el proceso empleado en el desarrollo y mantenimiento de la programación. Estos documentos deben desarrollarse como un producto natural paralelo al proceso de desarrollo. Las necesidades y restricciones del cliente se registran en la especificación de requisitos, los requisitos proporcionan el marco de trabajo para el diseño estructural, el diseño detallado se desarrolla a partir del diseño estructural, el código fuente se desarrolla a partir de los diseños estructurales y detallados. Los planes de prueba, manuales de usuario, programas de entrenamiento, instrucciones de instalación y procedimientos de mantenimiento evolucionan a través de todo el ciclo de desarrollo. La calidad, duración y utilidad de los documentos de apoyo son las principales medidas de la salud y bondad de un proyecto de programación.

      Notas de unidad de programa:

      Una unidad de programa es una unidad de código fuente que es desarrollada y/o mantenida por una persona; esa persona es la responsable de la unidad. En un sistema bien diseñado, una unidad de programa es un subprograma o grupo de subprogramas que cumplen una función bien definida o forman un subsistema bien definido. Una unidad de programa también es lo suficientemente pequeño y modular que puede se probada totalmente en forma aislada por el programador que la desarrolla o modifica. Las notas de cada unidad de programa son utilizadas por cada programador para organizar sus actividades de trabajo y para conservar la documentación de sus unidades de programa.

      Un cuaderno e notas de cada unidad de programa (también conocido como carpeta de desarrollo de unidad) constan de una portada y varias secciones. La portada es la tabla de contenidos y la hoja de avisos de terminación de los diversos logros asociados con la unidad del programa. La figura ilustra la portada de un cuaderno de notas de cada unidad de programa. El mantenimiento del cuaderno de notas es responsabilidad del programador asignado a la unidad de programa. El cuaderno de notas permanece con la unidad de programa durante todo su tiempo de vida y pasa de programador a programador a medida que se van transfiriendo las responsabilidades.

      Las secciones dentro de un cuaderno de notas de la unidad corresponden a las diversas fases del ciclo de vida de la unidad. La portada se usa para registrar las fechas proyectada y real de los logros y el aviso de terminación hecho por un revisor indica la culminación satisfactoria de una fase de ciclo de vida. Los revisores normalmente son líderes de grupo o administradores de proyecto que tienen la responsabilidad del sistema total o de un subsistema significativo.

      La sección de requisitos de un cuaderno de notas de unidad contiene solo las especificaciones concernientes de esa unidad de programa particular. Tanto la versión inicial como se convino con el cliente, como las copias de las modificaciones subsecuentes a los requisitos se conservan en el cuaderno de notas

      Las secciones de diseño estructural y detallado del cuaderno de notas contienen los papeles de trabajo y las especificaciones de diseño finales. Los papeles de trabajo deben organizarse para indicar porque se eligieron diversas alternativas y otras se rechazaron. Esta información puede ser valiosa para guiar las modificaciones subsecuentes.

      El plan de pruebas de la unidad contiene una descripción del enfoque que será utilizado en la prueba de la unidad, la configuración de prueba, los casos de prueba actuales, los resultados esperados para cada caso de prueba y los criterios de terminación de las pruebas de la unidad. El plan de pruebas de la unidad se desarrolla junto con el diseño e instrumentación de la unidad.

      La sección que contiene el código fuente de la unidad tiene un listado de la versión actual de la unidad y listados de las versiones previas significativas. No se espera que se conserven todas las corridas sintácticas y de depuración, sino los listados de las primeras versiones que existieron previas a las modificaciones significativas, particularmente en la fase de mantenimiento del ciclo de vida.

      La sección de resultados de las pruebas contiene los resultados de las corridas de prueba y un análisis de ellos en términos de los resultados esperados. De nuevo no deben conservarse todas las corridas de depuración, sino solo las corridas de prueba significativas (tanto las exitosas como las que no lo son).

      Los reportes de problemas se llenan después de que el sistema cae bajo control de la configuración. En algún punto del ciclo de vida (normalmente durante las pruebas de aceptación, o en la liberación del producto) un sistema cae bajo control de la configuración y cualesquiera modificaciones subsecuentes deben ser revisadas y aprobadas por una junta de control de cambios. Los reportes de problemas son el mecanismo que se usa ordinariamente para iniciar un cambio. El reporte de problemas puede describir una situación de error o una modificación deseada. Una copia de cada reporte de problemas y su disposición deben mantenerse en el cuaderno de notas de unidad de las unidades afectadas. Pasado el tiempo los reportes de problemas mostraran la historia de las unidades. En algunos casos la revisión de los reportes de problemas revelaran los errores recurrentes en ciertas unidades o colecciones de unidades. A veces es recomendable rescribir las unidades problemáticas en vez de continuar reparándolas.

      Unidad VI

      Programación Orientada a Objetos:

      Un programa escrito con un lenguaje orientado a objetos es un conjunto de objetos que interactúan entre si mandándose mensajes.

      Los elementos que interactúan en la POO son:

      • Objetos: Son el elementos fundamental de la POO, son entidades que poseen un estado interno y un comportamiento, es lo equivalente a un dato abstracto. Un objeto puede ser cualquier entidad del mundo real por Ej.: Automóviles en una simulación de tráfico, Componentes electrónicos en un programa de diseño de circuitos, etc.

      • Mensajes: Es una petición de un objeto a otro para que este se comporte de una determinada manera, ejecutando uno de sus métodos.

      • Métodos : es un programa que esta asociado un objeto determinado cuya ejecución solo puede desencadenarse a través de un mensaje recibido por este o por sus descendientes

      • Clases: Es un tipo definido por el usuario que determina las estructuras de datos y las operaciones asociadas con ese tipo. Cada objeto pertenece a una clase y recibe de ella su funcionalidad. Es el primer nivel de abstracción de datos: definimos estructuras, comportamientos y tenemos ocultamiento. Un objeto es una caja negra cuya parte interna permanece oculta. La información contenida en el objeto solo puede ser accedida por la ejecución de los métodos correspondientes.

      Instancia de Clases:

      Cada vez que se construye un objeto se esta creando una instancia de esa clase. Una instancia es un objeto individualizado por los valores que tomen sus atributos. Es otro aspecto de la abstracción de datos.

      Herencia:

      El segundo nivel de abstracción consiste en agrupar las clases en jerarquías de clases

      (Definiendo Sub y Súper clases), de forma tal que una clase A herede todas las propiedades de su superclase B (suponiendo que tiene una). Solo se necesita definir los atributos y comportamiento que especializan la definición, el resto se Hereda.

      Tipos de Herencia:

      • Simple : Cada clase puede tener una sola Súper-Clase ( Esquema de Árbol)

      • Múltiple: Una clase puede heredar de varias Súper-Clases.

      • Estricta: Una Sub-Clase no puede redefinir en forma contradictoria atributos definidos en la Súper-Clase.

      • No Estricta: Alguna Sub-Clase no quiere heredar algún atributo de la Súper-Clase.

      Polimorfismo:

      Es la capacidad que tienen los objetos de distintas clases de responder a mensajes con el mismo nombre.

      Ventajas de la POO:

      • Mas natural

      • Modularidad

      • Extensibilidad

      • Reusabilidad

      - 29 -

      F

      I

      I

      I

      I

      Teorema de la Estructura :(Jacopini - Bohm)

      Cualquier programa propio solo puede ser escrito utilizando las tres estructuras básicas de control (selectivas, Secuénciales y repetitivas).

      Modulo C

      Return

      Modulo B

      CALL C

      Return

      I

      Modulo A

      Return

      Program Principal

      CALL A

      CALL B

      Modulo A

      Modulo 1

      Modulo 2

      Modulo 2

      Modulo 1

      Modulo 2

      Modulo 1

      B

      Modulo D

      Modulo E

      Modulo C

      Modulo B

      Modulo A

      Modulo D

      Modulo E

      Modulo C

      Modulo B

      Modulo A

      Modulo 2

      Modulo 1

      Objeto A

      (Objeto Emisor)

      Objeto B

      (Objeto Receptor)

      Ejecuta el Método Correspondiente

      Envía un Mensaje

      Resultados de la ejecución del método