Monografias.com > Computación > Programación
Descargar Imprimir Comentar Ver trabajos relacionados

Teoría de los lenguajes de programación




Enviado por pandres



    1. Formulación de la
    Tarea

    2.
    Descripción del lenguaje ADA

    3. Los elementos teóricos de
    Sistemas de Computación

    4. Modelo del
    Sistema de
    Programación
    5. Forma general
    6. Estructura
    Funcional (Algoritmos
    7. Estructura
    Informática (Estructura de
    datos)
    8. Hardware
    9. Software
    10. Personal
    (programadores)
    11. Usuarios y mercado del
    Sistema de
    programación
    12. Conclusión
    13. Bibliografía
    14. Apéndice A
    15. Apéndice B

    Formulación
    de la tarea

    El estudio practico presente consta del análisis y síntesis
    del sistema de programa en
    lenguaje ADA.
    En el primer punto realizamos una descripción detallada del lenguaje
    elegido, en el segundo punto se trata de enfocar en forma general
    y abstracta las herramientas
    necesarias para un sistema de computación, tal es así que en el
    punto tres se explica la construcción, también en forma
    general, del sistema de programación y en los puntos subsiguientes
    se describe las estructuras
    funcionales e informáticas dinámicamente. Luego se
    obtiene una sistesis del personal de
    programación en los estados de análisis y diseño,
    ademas el hardware y software requerido. En el
    punto nueve se muestra el
    sistema de programación dentro del mercado actual y
    por ultimo una conclusión del sistema explicado
    anteriormente en lenguaje ADA, con el fin de servir de consulta y
    apoyo para la elección del lenguaje para un sistema en
    particular.

    Descripción del
    lenguaje de
    programación ada

    Es el ultimo intento de obtener un único lenguaje
    para todo tipo de aplicaciones e incluye los últimos
    avances en técnicas
    de programación.

    Su diseño
    fue encargado por el Departamento de Defensa de Estados Unidos a
    la empresa
    Honeywell-Bull después de una selección
    rigurosa entre varias propuestas realizadas sobre una serie de
    requerimientos del lenguaje y de haber evaluado negativamente
    veintitrés lenguajes existentes. De estos, se
    seleccionaron como base para la creación del nuevo
    lenguaje el PASCAL, el ALGOL
    y el PL/I, aunque incluía importantes extensiones
    semánticas y sintácticas, incluyendo la
    ejecución simultánea de tareas.

    La estandarización del lenguaje se publico en
    1983 con el nombre de ADA, en honor a la primera programadora de
    la historia, Augusta
    Ada Byron.

    Es un lenguaje estructurado parecido al PASCAL, destinado
    a controlar mecanismos en "tiempo real" (o
    sea una velocidad
    compatible con las necesidades reales), pero de gran complejidad.
    Admite una programación "orientada a objetos" y un sistema
    de alta modularidad de tipo hipertexto.

    El ADA es un lenguaje grande que es relativamente
    difícil de compilar porque hace muchas comprobaciones en
    tiempo de
    compilación. Se ha estimado que un compilador de Ada
    completamente validado requiere cerca de 50 años de horas
    hombre para
    escribirlo y ponerlo a punto.

    Características del
    Ada:

    1. Legibilidad: programas
      fáciles de leer (libertad de
      formatos de escritura).
    • Tipado fuerte: todo objeto tiene componentes de
      valor
      definido (es mucho mas fuerte que Pascal).
    • Capaz de construir grandes programas:
      compilación separada de los distintos paquetes
      (módulos).
    • programación estructurada
    • programación concurrente
    • Manejo de excepciones: ideal para la
      programación en tiempo real.
    • Abstracción de datos.
    • Unidades genéricas: que se pueden agrandar
      todo lo que queramos con nuevas funciones.
    • Alta transportabilidad de los programas entre
      distintas plataformas: UNIX, OS/2,
      Win32.

    El lenguaje ha
    ido evolucionando hasta que en el año 1995 surgió
    la revisión llamada Ada9X (o Ada95). En el Ada95 se
    añadieron nuevas sentencias y la programación
    Orientada a Objeto. (Ver Apéndice A Figura 1 Evolución de Ada 95)

    Los elementos
    teóricos de sistemas de
    computación

    SISTEMA: Conjunto de partes
    interrelacionadas para lograr un objetivo en
    común, llamado objeto
    real.

    CONCEPTO DE PROGRAMA:

    Un programa es un conjunto de instrucciones que al ser
    ejecutadas resuelven un problema.

    La computadora se
    utiliza para procesar en forma automática y a gran
    velocidad
    estas instrucciones.

    Para procesar la información está el hardware (microprocesador,
    RAM,…), y el
    software (que
    sirve para manejar el hardware).

    Un programa tiene 3 partes:

    1. Entrada de datos X:
      Normalmente se va a ejecutar a través de instrucciones
      de lectura, y
      en lo que se le pide al usuario la información que el programa va a
      necesitar para ejecutarse y se hace a través de
      lecturas.
    2. Acciones de un algoritmo
      F(x): Parte en la que se resuelve el problema usando los
      datos de entrada.
    3. Salida Y: Mostrar en un dispositivo de salida
      los resultados de las acciones
      anteriormente realizadas. Son acciones de
      escritura.

    En la parte de las acciones a ejecutar se
    distinguirán dos partes:

    • Declaración de variables.
    • Instrucciones del programa.

    ESQUEMA GENERAL (ver Apéndice figura
    3)

    Objeto Real:

    Sistema: Conjunto de
    propiedades de un objeto real realizando una sola función.

    1. Algoritmos: Estructura externa o
      funcional o algorítmica.
    2. Procedimiento: Estructura interna o en
      forma de procedimiento.

    Base: Información
    estática de datos y
    archivos.

    1. Hardware
    2. Software
    3. Propiedades Físicas
    4. Personal

    Medio Exterior: Sitios o
    condiciones con los que se relacionan y conecta el
    sistema.

    ALGORITMOS

    ¿Qué es un algoritmo?:

    Es una formula para resolver un problema. Es un conjunto
    de acciones o secuencia de operaciones que
    ejecutadas en un determinado orden resuelven el problema. Existen
    n algoritmos,
    hay que coger el más efectivo.

    Es una secuencia ordenada de pasos – sin
    ambigüedades -, repetible, que es solución de un
    determinado problema.

    Las características fundamentales que debe
    cumplir todo algoritmo son:

    1. Debe ser preciso e indicar el orden de
      realización de cada paso
    2. Debe estar definido (si se repite n veces
      los pasos se debe obtener siempre el mismo
      resultado)
    3. Debe ser finito (debe tener un número
      finito de pasos)
    4. Es independiente del lenguaje de
      programación que se utilice
    1. La definición de un algoritmo debe describir
      tres parte Entrada, Proceso,
      Salida.
    2. La programación es adaptar el algoritmo al
      ordenador.
    3. El algoritmo es independiente según donde lo
      implemente.

    El algoritmo trata de resolver problemas
    mediante programas.

    FASES:

    1. Análisis preliminar o evaluación del problema:
      Estudiar el problema en general y ver que parte nos
      interesa.
    2. Definición o análisis del
      problema
      : El objetivo de
      ésta fase es comprender el problema para lo cual como
      resultado tenemos que obtener la especificación de las
      entradas y salidas del problema. Tiene que quedar claro que
      entra y que sale, las posibles condiciones o restricciones,

    3. Diseño del algoritmo:
    Diseñar la solución. Una vez comprendido el
    problema se trata de determinar que pasos o acciones tenemos
    que realizar para resolverlo.

    Como criterios a seguir a la hora de dar la
    solución algorítmica hay que tener en
    cuenta:

    1. Si el problema es bastante complicado lo mejor es
      dividirlo en partes más pequeñas e intentar
      dividirlo en partes más pequeñas e intentar
      resolverlas por separado. Esta metodología de "divide y vencerás"
      también se conoce con el nombre de diseño
      descendente.
    2. Las ventajas de aplicar esto son:
    • Al dividir el problema en módulos o partes se
      comprende más fácilmente.
    • Al hacer modificaciones es más fácil
      sobre un módulo en particular que en todo el
      algoritmo.
    • En cuanto a los resultados, se probarán mucho
      mejor comprobando si cada módulo da el resultado
      correcto que si intentamos probar de un golpe todo el programa
      porque si se produce un error sabemos en que módulo ha
      sido.

    Una segunda filosofía a la hora de diseñar
    algoritmos es
    el refinamiento por pasos, y es partir de una idea general e ir
    concretando cada vez más esa descripción hasta que
    tengamos algo tan concreto para
    resolver. Pasamos de lo más complejo a lo más
    simple.

    La representación de los
    algoritmos:

    Una vez que tenemos la solución hay que
    implementarla con alguna representación. Las
    representaciones más usadas son los flujogramas,
    los diagramas NS y el
    pseudocódigo.

    4. Resolución en computadora: Implantación del
    algoritmo en un lenguaje de programación.

    5. Ejecución del programa, pruebas y
    mantenimiento:
    Ver si el programa hace
    lo que queríamos (dentro de procedimientos)

    PROCEDIMIENTOS

    Son los pasos que definen el empleo
    especifico de cada elemento del sistema o el contexto
    procedimental en que reside el sistema. Los sistemas basados
    en computadoras
    Intentan poner orden a un desarrollo de
    sistemas e intentan poner al software en su contexto por lo tanto
    establece enlaces que unen al software con los elementos de un
    sistema basado en computadoras.
    El papel del
    ingeniero de sistemas es definir los elementos de un sistema
    especifico basado en computadora en el contexto de la
    jerarquía global de sistemas. Por lo tanto examinaremos
    las tareas que constituyen los sistemas de computación.

    En el proceso cada
    elemento se implementa especificando los componentes
    técnicos que dan funcionalidad necesaria a un elemento en
    el contexto software, un componente podría ser un programa
    de computadora, un componente de programa reutilizable, un
    modulo, una clase u objeto o incluso una sentencia de lenguaje de
    programación.

    Llflf

    Sintaxis y Semántica

    • La sintaxis de un lenguaje define como se pueden
      poner juntos símbolos, palabras reservadas, e
      identificadores para hacer un programa
      válido.
    • La semántica de un constructor de un
      lenguaje es el significado del constructor; ella define su
      papel en
      un programa.
    • Un programa sintácticamente correcto no
      implica que sea lógicamente (semánticamente)
      correcto.
    • Los programas son más fáciles de
      construir y codificar cuando están constituidos por
      componentes separados.
    • Un componente software puede considerarse como
      cualquier elemento de software que transforma una entrada en
      una salida.

    En el Apéndice A (figura 7) se muestra la
    sintaxis completa de una compilación en notación
    BNF, extraída tal cual del manual de
    referencia del lenguaje Ada —recordemos que en la
    notación BNF [X] significa cero o una ocurrencia de X, {X}
    significa cero o más ocurrencias de X y * significa
    cualquier secuencia de
    caracteres—:

    Gramática

    < bit > ® < 0 >½ < 1
    >

    < byte > ® < bit >

    < caracter
    > ® < byte >

    < palabra > ® < byte2
    >

    < números > ® < entero >
    ½ < entero largo > ½ < decimal
    >

    < entero > ® < byte8
    >

    < entero largo > ® < byte
    16 >

    < decimal > ® < byte 8
    > < coma > < byte 8 > < coma
    > ® < separador decimal >

    < separador decimal > ® ,

    < vector > ® entero½ palabra
    ½

    < matrices
    > ® < vector >

    < estructura > ® < palabra*
    >

    < programa > ® < estructura
    >

    < sistema > ® < programa
    >

    BASE

    SOFTWARE: Programas de computadoras, estructuras
    de datos y su documentación que sirven para ser
    efectivo el método
    lógico, procedimiento o
    control
    requerido.

    1. HARDWARE: Dispositivos electrónicos que
      proporcionan capacidad de cálculo
      y dispositivos electromagnéticos. Que proporcionan una
      función externa.
    2. PERSONAS: Usuarios y operadores del hardware y
      software.
    3. BASE DE DATOS: Una gran colección de
      información organizada a la que se accede por medio del
      software.
    4. DOCUMENTACIÓN: Manuales,
      formularios y
      otra información descriptiva que retrata el empleo y/o
      operación del sistema.

    Modelo del sistema
    de programación

    El modelo del
    sistema de programación en Ada se detalla en las
    siguientes partes en la estructura funcional (algoritmos en Ada,
    estructura informática (estructura de
    datos en lenguaje Ada) y los componentes orientados y
    explicados del hardware, software, usuarios, personal y el
    mercado del sistema de programación enunciado, con sus
    respectivas características.

    Algoritmos: Estructura externa o funcional o
    algorítmica.

    Ejemplo: Se ingresan dos números enteros,
    obtener su suma.

    ANÁLISIS

    ¿Qué ingresa?

    Dos números enteros

    ¿Qué sale?

    Otro número entero

    ¿Qué vincula la entrada con la
    salida?

    La operación suma

    PSEUDOCÓDIGO

    1. Inicio

    Leo A (entero)

    Leo B (entero)

    Obtengo C como suma de A y B

    Imprimo C

    Fin

    DIAGRAMA N¾ S

    Inicio

    Leo A

    Leo B

    C ¬ A + B

    Imprimo C

    Fin

    CÓDIGO EN ADA95

    Package Body Sumas is

    A, B, C : Integer;

    begin {* Comienzo del programa *}

    put('Ingrese el primer valor
    ');

    get(A);

    put('Ingrese el segundo valor ');

    get(B);

    C := A + B;

    put ('El resultado es = ', C:6);

    end Sumas. {* Fin del programa *}

    Procedimiento: Estructura interna o en forma de
    procedimiento.

    La estructura formal de un programa Ada viene
    dado por:

    1. Un programa es un conjunto de compilaciones.
      El concepto de
      compilación no está especificado por el lenguaje
      Ada, pero suele ser un fichero fuente.
    2. Una compilación es una secuencia de
      unidades de compilación. Por ejemplo, una
      compilación con seis unidades de compilación
      puede ser un fichero con cuatro procedimientos
      y dos paquetes. El número de unidades de
      compilación en una compilación puede estar
      limitado por la implementación. Por ejemplo, el
      compilador GNAT únicamente permite sólo una
      unidad de compilación por cada
      compilación.
    3. Una unidad de compilación puede ser
      bien una subunidad —luego hablaremos de ella— o
      bien una unidad de biblioteca.
      (Ver Apéndice A figura 5).
    4. Una unidad de biblioteca es la
      declaración o cuerpo de un procedimiento o de un
      paquete. (Ver Apéndice A figura 6)).

    ¿Cuál es la diferencia entre una biblioteca Ada y,
    por ejemplo, una biblioteca C? Los compiladores de
    otros lenguajes distintos a Ada simplemente toman código
    fuente y producen código objeto. En la compilación
    de un procedimiento en C se puede utilizar una biblioteca, por
    ejemplo la biblioteca de matemáticas: (Ver Apéndice A figura
    4))

    gcc Mi_Proc.c -o Mi_Proc.o -lm

    En este caso, Mi_Proc.c usa dicha biblioteca, pero, tras
    la compilación, Mi_Proc.o no se incorpora a la misma. Tal
    y como indica la Fig. 2, los compiladores de
    Ada, en contraste, toman el fuente y la biblioteca y producen
    código objeto y una biblioteca actualizada con dicho
    código objeto. La biblioteca Ada "recuerda" las
    compilaciones que se realizan en el sistema y lo hace de la
    siguiente forma: Como ahora veremos, un programa Ada está
    compuesto por unidades de biblioteca. Cuando una unidad de
    biblioteca es compilada con éxito,
    pasa a incorporarse a la biblioteca Ada.

    El concepto de
    incorporación no está definido por el lenguaje Ada,
    de modo que toma diferentes matices en una y otra
    implementación del lenguaje. Por ejemplo, en la
    implementación de Ada de GNU, denominada GNAT, la
    biblioteca se implementa sobre un sistema de ficheros.

    La compilación de un fichero que contiene un
    procedimiento ADA produce un fichero objeto y una
    colección de ficheros de enlace al resto de la biblioteca,
    todos ellos en el mismo directorio. El compilador puede tener
    ahora dos vistas diferentes de la biblioteca Ada, una con
    el procedimiento incorporado y otra sin ella.  

    Dependencia

    Lenguajes como Basic no permiten programar sistemas
    grandes porque no contemplan la compilación de
    módulos por separado. En contraste, lenguajes como Ada y C
    tienen compilación separada. Esto significa que el
    programa principal y una subrutina pueden escribirse por
    separado, en ficheros fuente diferentes. La ventaja de la
    compilación separada es el desarrollo
    modular. La compilación de C, además de separada,
    es independiente.

    Ada, en contraste, proporciona a la vez una
    compilación separada y
    dependiente.

    Cuando una unidad ha sido compilada con éxito,
    diremos que se ha incorporado a la biblioteca del
    lenguaje.

    Unidades hijas

    Un programa se contruye a partir de unidades de
    biblioteca.

    Como puede apreciarse en ella, el padre de todos los
    nodos de esta jerarquía es el paquete Standard. A sus
    hijos se les denomina unidades de biblioteca raíz. Una
    unidad de biblioteca raíz, junto con sus descendientes
    forman un subsistema. Antes de realizar ninguna
    compilación, la biblioteca Ada consiste en la denominada
    biblioteca predefinida.

    Subunidades

    La mayoría de las unidades de la biblioteca Ada
    son especificaciones y cuerpos de paquetes. A estos
    últimos nos referimos ahora. En la implementación
    de un paquete pueden aparecer, de nuevo, elementos como
    procedimientos, objetos protegidos, tareas o paquetes, todos
    ellos con su respectiva especificación en su caso y,
    siempre, el cuerpo. Pues bien, el cuerpo de cualquiera de
    estos elementos puede ser extraído de la unidad de
    compilación y compilado como una unidad de
    compilación separada. A esta unidad segregada se le llama
    subunidad. Sólo un paquete puede tener
    subunidades.

    MEDIO EXTERIOR:

    Ejemplo

    El Medio exterior que influyo en el proyecto para la
    creación de Ada 95 fue el Estado del Gobierno de
    EEUU, este insto a la creación de este lenguaje de
    programación porque tenia la necesidad de concretar un
    nuevo sistema de defensa moderno e inviolable.

    Para esto en el mercado una empresa se
    encargo de desarrollar este nuevo sistema.

    Competidores: La empresa
    encargada para desarrollar este nuevo sistema tuvo que decidirse
    entre el lenguaje Ada y el C++. Decidiéndose al final por
    Ada, la causa de esto se puede observar en la tabla 2 y 3 del
    Apéndice B.

    Estructura
    funcional (algoritmos)

    Estructuras de
    control

    Repetitivas

    selectivas

    loop

    <…>

    end loop

    ;

    while

    <BOOLEAN expression>

     

    loop

    <…>

    end loop

    ;

     for

    <loop index>

    in

    <range>

    loop

    <…>

    end loop

    ;

    if

    <condition>

                 

    then

    <…>

    end if

    ;

    case

    <selector>

                

    is

       <…>

    end case

    ;

    1 Declaración

    Hay dos clases de declaraciones:

    1. Implícitas. Se supone que ocurren en un
      lugar del texto como
      consecuencia de las semánticas de otra construcción, como por ejemplo una
      cláusula de contexto.
    2. Explícitas. Apararecen en el texto del
      programa, como la variable i del ejemplo anterior.
      Sintácticamente son declarative_item’s. Toman dos
      formas:
    3. Las denominadas declaraciones básicas como las
      declaraciones de tipo, de variables
      (objetos), excepciones o las especificaciones de procedimientos
      y paquetes. Sintácticamente
      basic_declaration_item.
    4. Los cuerpos de los procedimientos y de los paquetes.
      Sintácticamente body.

    Ámbito de una
    declaración

    1.1 Vista de una entidad

    Todas las declaraciones contienen una definición
    de vista de una entidad. Una vista consiste en:

    1. Un identificador de la entidad
    2. Características específicas de la vista
      que afectan al uso de la entidad a través de esa
      vista

    1.2 Parte declarativa

    Una secuencia de declaraciones forma una parte
    declarativa.
    Su sintaxis es la que sigue:

    declarative_part ::= {declarative_item}

    Cinco construcciones del lenguaje Ada tienen asociada
    una parte declarativa:

    1. Cuerpo de un subprograma
      (subprogram_body)
    2. Cuerpo de un paquete (package_body)
    3. Cuerpo de una tarea (task_body)
    4. Cuerpo de una entrada de un objeto protegido
      (entry_body)
    5. Bloque (block_statement)

    Reglas de visibilidad : I : Integer := I;
    –Ilegal

    Declare

    I, K : Integer;

    begin

    declare

    I : Integer;

    begin

    … — Aquí no es visible

    — el objeto I externo

    end;

    end;

    procedure Q
    is

    I : Integer := 0;

    procedure R is

    K : Integer := I;

    I : Integer := 0;

    J : Integer := Q.I;

    begin

    end R;

    begin

    end Q;

    PROGRAMACIÓN DE SISTEMAS GRANDES

    Los sistemas empotrados suelen ser grandes y complejos(
    bien un sistema de guía de misiles, un automóvil o
    una central nuclear ), formados por subsistemas relacionados,
    pero relativamente independientes.

    Algunos lenguajes ignoran el hecho de que los programas
    se construyen por partes, cada una de ellas compilada por
    separado y todas ellas enlazadas en una aplicación final.
    El resultado se convierte en aplicaciones monolíticas
    difíciles de mantener. Otros lenguajes, en contraste,
    parten del concepto de módulo y proporcionan mecanismos de
    encapsulamiento y abstracción que ayudan a programar
    sistemas grandes, ya que el trabajo del
    equipo de programación y posterior mantenimiento
    del sistema se ve facilitado. Uno de estos lenguajes es Ada
    95.

    Está fuertemente fundamentado en la disciplina de
    la Ingeniería del Software por lo que es el
    lenguaje más apropiado en la programación de
    sistemas empotrados industriales grandes.

    Aspectos de Ada dirigidos a la programación de
    estos sistemas:

    2 Tipos abstractos de datos

    Su implementación es de nuevo desconocida para el
    programador, esta vez no porque desconozca la arquitectura del
    computador subyacente, sino porque es encapsulado en
    un módulo que no permite el acceso directo a los detalles
    de su implementación. En su lugar, se proporciona al
    programador operaciones sobre
    el tipo que son invocaciones a entradas del módulo que lo
    encapsula. En esta sección estudiamos cómo Ada
    proporciona al programador tipos abstractos de datos.
     

    2.1 Paquetes

    Un paquete permite agrupar declaraciones y
    subprogramas relacionados. Por ejemplo, consideremos un
    procedimiento y una función sencillos:

    procedure Double(Number : in Integer;
    Answer : out Integer);

    function Twice(Number : in Integer)
    return Integer;

    Podríamos bien compilarlos individualmente o bien
    insertarlos en un paquete y compilar este. En este último
    caso, esta sería la especificación del
    paquete, que contiene la interface al mismo y al que hemos
    llamado Simple_Math:

    package Simple_Math is

      procedure Double(Number : in
    Integer; Answer : out Integer);

      function Twice(Number : in
    Integer) return Integer;

    end Simple_Math;

    El cuerpo del paquete debe contener la
    implementación de todos los procedimientos y funciones
    declarados en la especificación del paquete:

    2.2 Tipos privados

    El buffer puede ser una estructura de datos con tres
    campos. Un vector de caracteres Data suficientemente grande, el
    puntero Finish que marca la
    posición donde acaba la cadena y el puntero Start que
    marca la
    posición del ítem que puede ser retirado por el
    consumidor.
    En Ada, el buffer puede ser:

    type Buffer is

      record

        Data : String(1..80);

        Start : Integer;

        Finish : Integer;

      end record;

    3.- Subprogramas y funciones

    3.1.- Tipos de parámetros

    Se distinguen tres tipos de
    parámetros:

    Entrada: in será un parámetro por
    referencia
    Salida: out el procedimiento devolverá
    información
    Entrada/Salida: in out parámetro por variable,
    pasaremos y sacaremos información

    3.1.2.- Procedimientos

    En los procedimientos podemos utilizar los tres tipos de
    parámetros anteriores. Su definición será la
    siguiente:

    procedure Nombre(X, Y, …: in|out| in
    out
    tipo; ….); — Definición

    procedure Nombre(X, Y, …: in|out| in
    out
    tipo; ….) is — Declaración
    — declaración de variables locales

    begin

    Sentencias;

    end Nombre;

    3.1.3.- Funciones

    Las funciones devuelven un único valor y
    sólo se les puede introducir parámetros por
    referencia (in). Su declaración es:

    function Nombre(X, Y, ..: tipo; …)
    return tipo;

    Y su cuerpo es igual que el del procedimiento, cambiando
    la palabra procedure por function y
    añadiendo un return.

    El uso de las funciones es especial cuando queremos
    declarar operadores, podemos crear toda una serie de operadores
    para nuestros tipos de datos.
    Ejemplo:

    type Humano is (Varon,
    Hembra);

    subtype Adulto is Humano;

    subtype Ninno is Humano; — Un
    poco absurdo pero más comprensible para el
    ejemplo
    Definimos el operador suma:
    function "+"(Uno, Otro: Adulto) return
    Ninno;

    Definamos ahora lo siguiente:

    declare — Sentencia para declarar un bloque
    más interno

    Persona1: Humano:= Varon;

    Persona2: Humano:= Hembra;

    Resultado: Ninno;

    begin

    Resultado:= Persona1 + Persona2;

    end;

    con lo cual en resultado tendríamos la
    respuesta.

    3.2.- Excepciones

    Una excepción es un "aviso" que se produce en
    tiempo de ejecución. Existen dos tipos básicos de
    excepciones:

    a) Las controladas por el usuario

    b) Las predefinidas por la implementación, como
    son las de error numérico, falta de memoria y
    similares.
    El programador tiene que saber dónde se pueden producir
    los errores, por ejemplo en una entrada de datos el usuario
    podría entrar un dato incorrecto. Para esto tenemos dos
    posibles formas de actuación:

    a) Realizar un bucle de validación de
    datos

    b) Preguntar al programa si se ha producido un
    error.

    subtype NUMERO:is Intger range
    1..10;

    procedure EntradaDatos(N: out NUMERO)
    is

    begin

    GET(N);

    exception when CONSTRAINT_ERROR
    =>

    EntradaDatos(N);

    end EntradaDatos;

    Si el usuario introduce un número fuera de rango
    se producirá una excepción y nosotros
    reaccionaremos pidiéndole de nuevo la entrada.

    3.3-Definición de
    tareas

    El mecanismo de Ada a la hora de definir las tareas es
    el siguiente:

    task TAREA is — especificación, donde se
    define el interfaz a otras tareas

    end TAREA;
    task body TAREA is — cuerpo de la
    tarea

    end TAREA;

    Si la tarea no requiere un interface a otras tareas, la
    especificación queda:

    task Tarea;

    Cada tarea se convertirá en una thread de la
    tarea principal , en sistemas que nos son multithread (como
    Linux) se hace
    una simulación
    de threads.

    4.- Planificación de tareas

    Podemos asignar prioridades a nuestras tareas si la
    implementación del compilador de Ada nos los permite.
    Estas prioridades se especifican en un pragma. Su
    declaración es la siguiente:

    task TAREA is

    pragma PRIORITY(7);

    end;

    El nivel de prioridad será una expresión
    estática del tipo PRIORITY (subtipo de
    INTEGER), el rango de este subtipo dependerá de la
    implementación del compilador, podemos preguntarlo con
    PRIORITY?FIRST y PRIORITY?LAST, que dan la prioridad
    más baja y la más alta..

    5.- Parada de tareas

    Hay varias razones por las que las tareas se quedan
    detenidas como paradas en las colas de los puntos de entrada o
    terminación de una tarea dependiente. Otra razón es
    que se pare con la sentencia delay. Delay parará a
    la tarea que la llame al menos la duración en segundos que
    se le indique. Esta duración es del tipo coma fija
    DURATION, el mínimo valor será de unos 20
    milisegundos (mirar DURATION?SMALL) y la máxima
    será de un día (86400 segundos), para duraciones
    mayores de un día se tendrá que meter a la
    instrucción delay en un bucle. Ejemplo:

    Definimos las siguientes constantes:

    SEGUNDOS: constant := 1.0;

    MINUTOS: constant := 60.0;

    HORAS: constant := 3600.0;

    Para luego poder
    utilizar …

    delay 14*HORAS+20*MINUTOS;

    Para construcciones más complicadas en la que
    intervienen una fecha en concreto
    habrá que utilizar el paquete estándar CALENDAR que
    nos dará todo lo necesario para el manejo de
    fechas.

    6.- Selección de
    citas

    La sentencia select se utiliza para seleccionar
    entre las posibles citas que posee una tarea , esta sentencia se
    utiliza de la siguiente manera:

    select

    accept A(…) do

    or – – los or pueden ser
    múltiples

    accept B(…) do

    end select;

    De esta forma aceptamos simultáneamente
    llamadas a dos puntos de entrada. Para controlar más la
    selección de las citas pondremos condiciones de entrada
    a cada una.

    7.- El tipo de tarea

    Ada permite definir una tarea como si fuera un tipo de
    datos abstracto o como una clase, esto nos da una mayor
    flexibilidad de uso de las tareas y si tenemos varias tareas
    similares nos ahorramos definirlas varias veces. La forma de
    declararlo es:

    task type TAREA is

    entry ENTRADA(…);

    end TAREA;
    task body TAREA is

    end TAREA;

    8.- Terminación de las
    tareas

    |Las tareas llegarán a su fin cuando alcancen su
    end final, aunque existen otras formas para precipitar su
    muerte. La
    sentencia terminate nos sirve para matar a la tarea que la
    llama cuando ya no es necesaria.

    La otra sentencia usada para la terminación
    "incondicional" de tareas es abort.

    La sintaxis de la llamada abort es:

    abort X, VECTORT(4), R.all; — El all
    indica matar a todas las tareas que dependan de R

    Podremos siempre consultar el estado de
    una tarea por medio de dos atributos que son TAREA?TERMINATED que
    será cierta si terminó la tarea y TAREA?CALLABLE
    que será cierto a menos que la tarea se haya terminado o
    completado.

    9 Reusabilidad

    En la búsqueda de la reusabilidad del software se
    han dado dos pasos importantes. Uno es la programación
    orientada a objetos y el otro es el uso de unidades
    genéricas. La respuesta de los diseñadores de Ada a
    las unidades genéricas son los paquetes con
    parámetros genéricos o simplemente
    "genéricos". Un genérico es una plantilla que
    manipula tipos parámetro que después instancia el
    programador.

    Estructura informática (estructura de
    datos)

    • Una estructura de datos es una
      colección de datos que pueden ser caracterizados por su
      organización y las operaciones que se
      definen en ella.

    Dentro de ellas encontramos distintos tipos, los
    tipos de datos
    más frecuentes en los diferentes lenguajes son:

    1 Tipos y subtipos de datos

    Un rasgo muy característico de Ada es su gran
    soporte para la definición de los tipos de datos. Los
    tipos de datos en Ada son:

    Escalares

    Lógicos

    No escalares

    Decimales

    Elementales

    Otros def. por el usuario

    Reales

    Acceso (es decir punteros)

    Discretos

    Enteros

    Punto flotante

    Acceso a objetos

    Enumerados

    Enteros con signo

    Punto fijo

    Acceso a subprogramas

    Carácter

    Enteros sin signo

    Ordinarios

    Compuestos

    Clase

    Tarea

    Registro

    Otros def. por el usuario

     

    Cadenas de caracteres

    Protegido

    Matrices (array)

    Para declarar estos tipos de datos nos valemos de las
    sentencias type y subtype:

    1.1.- Atributos de los tipos

    Los atributos son las características de forma de
    cada tipo de datos, dependiendo de su naturaleza
    tendremos distintos atributos. Supongamos que E es un subtipo
    escalar definido:

    type E is range 1900..1999;

    E?First nos devolverá el extremo inferior:
    1900
    E?Last nos dará el extremo superior: 1999
    E?Range será la distancia entre los extremos:
    99

    .. y así hasta un total de 12 atributos
    predefinidos, en estos atributos encontraremos las funciones
    típicas a la hora de manejar cadenas de caracteres,
    caracteres sueltos y mucho más.

    Si el tipo fuera no escalar tendríamos otros
    atributos diferentes que nos mostrarían la
    precisión y los valores
    máximos y mínimos representables. Si fuera un tipo
    puntero los atributos tendrían que ver con el tipo de
    acceso ( acceso a dirección o a contenido). Los atributos se
    definen como funciones en los paquetes estándar de los
    compiladores de Ada.

    • 2. Operadores
    • Operadores booleanas

    =   igualdad

    /=  Inigualdad

    > mayor que

    >= mayor que o igual que

    <   menor que

    <=  menor o igual que

    Los operadores lógicos
        

    and     
    operacion logica y

    or      
    operacion logica o

    xor    or exclusiva de 2
    valores

    not      
    inversion del valor

    and then circuito corto y oper.

    or else circuito corto u oper.

    Hardware

    La mayoría de los ordenadores disponibles para el uso
    común, utiliza hoy una palabra de 32 dígitos
    binarios (Ada utiliza 32 bits), así que se espera que la
    mayoría de los ordenadores utilice un sistema de 32
    dígitos binarios. Por esa razón, importa la talla
    de la palabra, 32 dígitos binarios serán asumidos y
    los resultados de la ejecución reflejarán esa
    talla.

    Manipulación de registros de
    entrada y salida:

    ADA proporciona al programador facilidades para elegir la
    forma en que se implementan sobre el hardware los tipos de datos.
    Estas facilidades se conocen como cláusulas de
    representación

    Una vez que se define el tipo de la forma usual, su
    implementación por defecto puede modificarse incluyendo en
    el código estas cláusulas de
    representación

    Existen tres tipos de cláusulas:

    • Cláusula de definición de atributo.
      Permite establecer varios atributos de un objeto, tarea o
      subprograma. Por ejemplo, el tamaño en bits de los
      objetos, el alineamiento en memoria, el
      máximo número de octetos disponibles para una
      tarea o la dirección de un objeto.
    • Cláusula de representación de
      enumeración
      . Especifica los valores
      internos de los literales de un tipo enumeración
    • Cláusula de representación de
      estructura
      . Permite asignar, en términos de bits, el
      orden, el desplazamiento y el tamaño a los componentes
      de un una estructura dentro de unidades de
      almacenamiento como palabras o bytes. Los bits en el
      registro se
      numeran desde cero.

    Ver Apéndice B tabla 1 Relaciones
    de Tamaño y Complejidad para seleccionar el hardware y
    Software

    Software

    ADA soluciono el desorden de software que existió en
    los años 70. Transformándolo en un lenguaje bien
    previsto para el uso en sistemas en tiempo real embutidos, dando
    una solución al problema de la programación.
    UNIX presenta una
    implementación del POSIX/UNIX95 de algoritmos en ADA, lo
    cual provee de técnicas muy útiles para mejorar
    la
    organización jerárquica.

    Ver Apéndice B tabla 1 Relaciones de
    Tamaño y Complejidad para seleccionar el hardware y
    Software

    Personal
    (programadores).

    Este lenguaje se enfoca especialmente para dos grupos de
    programadores, de ésos con maestría en el FORTRAN,
    y de ésos con maestría en un lenguaje estructurado
    moderno tal como PASCAL, C, o C++, El primer grupo consiste
    probablemente en los programadores maduros, los que han estado en la
    industria por
    muchos años y con experiencia usando el FORTRAN. El
    segundo grupo
    consistiría en esos programadores que tienen experiencia
    con un lenguaje estructurado moderno, tal como PASCAL, C, y C++ y
    entender ya el concepto del tipo de los datos, y además
    con muchos años de experiencia. El leng. Ada es un
    agregado a la lista hace aproximadamente once años, debido
    a la talla y la complejidad es requisito indispensable todos los
    conocimientos mencionados.

    Usuarios y mercado del sistema de
    programación

    El Ada 95 es una actualización de la ISO al
    lenguaje de programación de Ada para incorporar el
    último conocimiento
    del desarrollo del software lógica
    en el lenguaje.

    El lenguaje tiene un número razonable de compiladores
    capaces existentes para el uso en los ordenadores centrales,
    así como las minicomputadoras, e incluso los
    microordenadores.

    Un compilador de Ada tiene un trabajo grande que hacer y se
    justifica su validación al mercado. Por lo tanto tres
    compañías han desarrollado los compiladores de Ada
    completamente validados que se ejecutan bajo MS-DOS y/o
    Windows en una
    PC. Aunque algunos de éstos se ejecutarán en una PC
    mínima, una PC relativamente de gran alcance se recomienda
    para el uso con cualquier compilador de Ada.

    Los sistemas empotrados (sistemas industriales, computadores
    de misiles …), utilizan este lenguaje.

    Un uso común de este, se da entre parcioneros
    industriales en los grandes proyectos, por
    ejemplo en la industria
    Aereoespacial. Cabe destacar que este lenguaje esta totalmente
    estandarizado.

    Conclusión

    Es un lenguaje moderno de propósito general. Por su
    misma naturaleza, el
    ADA es un lenguaje grande que es relativamente difícil de
    compilar porque hace muchos chequeos en tiempo de
    compilación, incorpora muchos de los principios
    modernos de la tecnología de
    dotación lógica.

    Por ejemplo, el concepto de la información que oculta
    se diseña en el lenguaje, más bien que se pone en
    ejecución como técnica de programación.
    Diseñaron para desarrollar sistemas de software
    lógica grandes, y es aplicable en programas que poseen
    millones de líneas de código de fuente.

    El ADA está especialmente bien satisfecho para el uso
    en un ambiente del
    equipo. Como su principal inconveniente presenta su gran
    extensión. Tiene la ventaja que se adaptan a los sistemas
    incrustados y operar concurrentemente gracias a su alto poder.
    Observando el Apéndice en la figura 5 queda claro, que Ada
    presenta el mejor promedio, ante todas las características
    que se deben tomar en cuenta, para el desarrollo de un sistema de
    programacion.

    Bibliografia

     Libros:

    Ravi Sethi: "Lenguajes de
    Programación: Conceptos y Contructores." Addison-
    Wesley Iberoamericana, U.S.A, 1992.

    1. Lewis, T.G. y Smith, M.Z.: Estructura de Datos. Paraninfo,
      Madrid,
      1985.
    2. Terrance, W Pratt, Marvin V. Zelbwitz: "Lenguajes de
      Programación: Diseño e
      implementación", Prentice Hall,
      Hispanamericana,U.S.A.

    Manuales:

    1. o Tutorial de ADA95, Web– Pages
      http://www.swcp.com. .
    2. Manual: Cyclic Redundancy Checks in Ada95
    1. Para Ada83 ver: "Programación en Ada" de JPG
      Barnes, Ediciones Díaz de Santos S.A. Primera
      edición inglesa en Octubre de 1983.
    2. Este libro ha
      sido escrito por uno del equipo de creación del
      Ada
    3. Para Ada95 ver: "Annotated Ada Reference Manual"
    4. Documento ISO/IEC
      8652:1995(E)
    5. Es el documento oficial de la versión del Ada 95,
      publicado en el 25 de Noviembre de 1994, en es se incluye
      tanto la descripción del lenguaje como la de las
      librerías estándares con anotaciones para el
      programador de Ada como para el constructor de compilador de
      Ada.
    6. Guidelines for choosing a computer language: support for
      the visionary organization, 2nd edition by
      patricia k. Lawlis,c.j. kemp systems, inc.

    Apéndice A

    FIGURA 1 Evolución de Ada 95

    FIGURA 3 Esquema general

    1. FIGURA 4 Biblioteca Ada
      frente a biblioteca C

    (Para ver el gráfico faltante haga click en el
    menú superior "Bajar Trabajo")

    FIGURA 5  Estructura de un programa
    Ada.

    FIGURA 6 Unidades
    de Biblioteca

    DECLARACION DE ENTIDADES INDICADORES DE
    CONTROL DE FD
    INDICADORES DE
    FLUJO DE DATOS

    (<name>) – type declaration ——>* – guarded
    entry o-*-*-*->

    :<name>: – object declaration T—–> – timed
    call on entry <-*-*-*-o

    <<name>> – exception declaration C—–>
    – conditional call on entry <-*-*-*->

    |<name>| – subprogram T—–>* – timed call on
    guarded entry

    /<name>/ – task entry C—–>* – conditional
    call on guarded entry

    |<name]>| – subprogram with parameters ——>
    – caller-callee (subprograms, tasks)

    /<name]>/ – task entry with parameters

    IMPORT DECLARACIONES EXPORT DECLARACIONES

    ——> <name> – package/subprogram reference (
    ) – type

    —–>> <name> – virtual package reference :
    : – object

    < > – exception

    | | – subprogram

    / / – task entry

    PAQUETE, SUBPROGRAMA O CUERPO DE LA TAREA

    gi – generic instantiation (not supported)

    1 – single entry / O

    2 – selective wait /

    3 – serial entries —

    4 – entry family Notacion Grafica de Ada

    FIGURA 7 BNF

    Apéndice
    B

    Tamaño y
    Complejidad

    Consideraciones de Hardware y
    Software

    Pequeño y
    no

    Complejo

    HARDWARE

      1. 32 MB RAM
      2. 5 GB Hard Drive
      3. 15-inch high resolution color display

      SOFTWARE:

    1. 1 Dell P120 Scaner Station Scanner
    2. GNAT es el compilador de Ada de
      GNU
    3. GDB es el depurador de GNU
    4. S.O. Windows 98
    5. MS Office
      97
      (Word,
      Access, Excel,
      &Powerpoint)
    6. Netscape Navigator Gold 3.01
    7. McAfee Virus
      ScanNT

    Mediano

    y

    moderadamente

    complejo

    HARDWARE

    • 6 Dell P166 Workstations
    1. 64 MB RAM
    2. 5.0 GB Hard Drive
    3. 15-inch high resolution color
      display

    SOFTWARE:

    • GNAT es el compilador de Ada de
      GNU
    • GDB es el depurador de GNU
    • S.O. Unix
    • Emacs es un editor extensible y
      programable, con una interfaz de usuario gráfica,
      y especialmente orientada a las necesidades del
      programador.
    • LATEX es un sistema para la
      composición de documentos, basado en TEX.
    • xfig es una herramienta de dibujo
      orientada a objetos
    • McAfee Virus
      ScanNT

    Grande

    y

    muy complejo

    HARDWARE

    • 7 PowerMac 7200/120
    1. 64 MB RAM
    2. 8.0 GB storage
    3. 15-inch high resolution color
      display

    SOFTWARE:

    • GNAT es el compilador de Ada de
      GNU
    • GDB es el depurador de GNU
    • S.O. Solaris-SPARC.
    • Emacs es un editor extensible y
      programable, con una interfaz de usuario gráfica,
      y especialmente orientada a las necesidades del
      programador.
    • LATEX es un sistema para la
      composición de documentos, basado en TEX.
    • xfig es una herramienta de dibujo
      orientada a objetos

    Muy grande

    e

    inmensamente

    complejo

    ejemplo

    Sistemas
    empotrados

    (un sistema de guía de
    misiles, o una central nuclear ),

    HARDWARE

    • 24 Dell PIII Workstations
    1. 128 MB RAM
    2. 30.0 GB Hard Drive
    3. 15-inch high resolution color
      display

    SOFTWARE:

    • GNAT es el compilador de Ada de
      GNU
    • GDB es el depurador de GNU
    • S.O. GNU/Linux-i386
    • Emacs es un editor extensible y
      programable, con una interfaz de usuario gráfica,
      y especialmente orientada a las necesidades del
      programador.
    • LATEX es un sistema para la
      composición de documentos, basado en
      TEX.
    • xfig es una herramienta de dibujo
      orientada a objetos
    • Make es una herramienta para automatizar
      el proceso de compilación
    • POSIX/UNIX95
    • LaTeX2HTML es un programa para convertir
      documentos escritos para LATEX a
      HTML

    Tabla 1: Relaciones de Tamaño y
    Complejidad para seleccionar el hardware y
    Software

    Proyecto de
    Software

    Tamaño y
    Complejidad

    Consideraciones del proceso de
    desarrollo

    Pequeño y no Complejo

    • comprar un producto
    comercial existente.

    • Si no, se debe desarrollar uno para
    este.

    • Usar un lenguaje de 4ta o 5ta
    generación para este tipo de
    aplicaciónes.

    • Si no, utilizar un recurso existente o
    comprar un medio de desarrollo barato

    • Esperar que el software permanezca
    independiente y se convierta en obsoleto dentro de alguno
    año

    Mediano

    y

    moderadamente

    complejo

    • Incluir proyectos pequeños que pueda crecer
    en grandes proyectos

    • Consultar planes de organizaciónes
    de negocio para asegurarse la compatibilidad de las
    decisiones de software.

    • Considerar COSTOS
    de los productos

    • Si no, usar practicas de ingenieria
    descriptas abajo para grandes sistemas.

    Grande

    y

    muy complejo

    • Incluir proyectos medianos que pueda crecer
    en grandes proyectos

    • Considerar COSTOS
    de los productos satisfaciendo alguna de las partes
    que el sistema requiere

    • Usar buenas y solidas practicas de
    ingenieria

    • Consultar planes de organizaciónes
    de negocio

    • Elegir el lenguaje apropiado usando la
    Tabla 3

    • Elegir el producto
    apropiado

    Muy grande

    e

    inmensamente

    complejo

    • Incluir proyectos grandes que pueda crecer
    en muy grandes proyectos

    • Considerar COSTOS de los productos satisfaciendo alguna de las partes
    que el sistema requiere

    • Usar buenas y solidas practicas de
    ingenieria

    • Consultar planes de organizaciónes
    de negocio

    • Elegir el lenguaje apropiado usando la
    Tabla 3

    • Elegir el producto apropiado

    • Control immense complexity from the
    outset

    • Considerar definir separaradamente
    subsistemas donde cada función es un sistema
    independiente

    TABLA 2: Relaciones
    de Tamaño y Complejidad para Desarrollar
    Procesos

    1. Language

    4GL

    3

    G

    L

    2GL

    Características

    de los

    Lenguajes

    o

    5GL

    A

    d

    a

    9

    5

    C

    C

    +

    +

    C

    O

    B

    O

    L

    F

    O

    R

    T

    R

    A

    N

    J

    a

    v

    a

    S

    m

    a

    l

    l

    t

    a

    l

    k

    A

    s

    s

    e

    m

    b

    l

    e

    r

    Claridad del código
    fuente

    5

    9

    5

    6

    7

    5

    8

    9

    1

    Complejidad de manejo (arquitectura de soporte)

    2

    9

    5

    6

    2

    4

    7

    6

    2

    Soporte de Concurrencia

    0

    8

    0

    0

    0

    0

    7

    2

    2

    Soporte de sistemas Distribuidos

    0

    5

    0

    0

    0

    0

    7

    0

    0

    Mantenimiento

    5

    9

    2

    7

    2

    2

    9

    7

    0

    Soporte de lenguajes Mixtos

    0

    8

    5

    7

    0

    5

    5

    3

    0

    Soporte de programación orientado a
    objetos

    0

    10

    0

    10

    0

    0

    10

    10

    0

    Portabilidad

    1

    8

    5

    7

    3

    3

    9

    3

    1

    Soporte de tiempo-Real

    0

    7

    7

    7

    0

    5

    0

    0

    5

    Confianza

    3

    9

    1

    5

    3

    1

    8

    3

    0

    Reusabilidad

    1

    8

    3

    8

    3

    3

    8

    8

    1

    Seguridad

    0

    6

    0

    3

    0

    0

    4

    0

    0

    Estandarización

    1

    10

    5

    5

    5

    5

    8

    3

    0

    Soporte para métodos de ingeniería modernos

    3

    9

    1

    7

    1

    1

    9

    7

    0

    Puntaje promedio de los
    lenguajes

    1,5

    8,2

    2,8

    5,6

    1,8

    2,4

    7,1

    4,35

    0,8

    TABLA 3: Puntajes de SASEA
    Características de los Lenguajes

    Trabajo enviado y realizado por:
    Esteban Tibaldi
    Elizabeth Ojeda
    Andrés D. Pasqua
    pandres[arroba]speedy.com.ar

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter