|
| |
Teoría de los lenguajes de programación
Resumen: Formulación de la Tarea. Descripción del lenguaje ADA. Los elementos teóricos de Sistemas de Computación. Modelo del Sistema de Programación. Forma general. Estructura Funcional (Algoritmos). Estructura Informática (Estructura de datos). Hardware. Software. Personal (programadores). Usuarios y mercado del Sistema de programación
Publicación enviada por Esteban Tibaldi
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:
- 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:
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.
Acciones de un algoritmo F(x):
Parte en la que se resuelve el problema usando los datos de entrada.
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
|
Objeto Real: |
Sistema:
Conjunto de propiedades de un
objeto real realizando una sola función.
- Algoritmos
:
Estructura externa o funcional o algorítmica.
- Procedimiento:
Estructura interna o en forma de
procedimiento.
|
Base:
Información estática de datos y archivos.
- Hardware
- Software
- Propiedades Físicas
- 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:
- Debe ser preciso e indicar el orden
de realización de cada paso
- Debe estar definido (si se repite
n veces los pasos se debe obtener siempre el mismo resultado)
- Debe ser finito (debe tener un
número finito de pasos)
- Es independiente del lenguaje de
programación que se utilice
- La definición de un algoritmo debe describir
tres parte Entrada, Proceso, Salida.
- La programación es adaptar el algoritmo al
ordenador.
- El algoritmo es independiente según donde lo
implemente.
El algoritmo trata de resolver
problemas mediante programas.
FASES:
- Análisis preliminar o evaluación del
problema
: Estudiar el
problema en general y ver que parte nos interesa.
- 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:
- 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.
- 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.
|
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.
- HARDWARE:
Dispositivos electrónicos que proporcionan capacidad de cálculo y
dispositivos electromagnéticos. Que proporcionan una función externa.
- PERSONAS:
Usuarios y operadores del hardware y software.
- BASE DE DATOS:
Una gran colección de información organizada a
la que se accede por medio del software.
- 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
- 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:
- 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.
- 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.
- 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).
- 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:
- 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.
- Explícitas
.
Apararecen en el texto del programa, como la variable i del ejemplo
anterior. Sintácticamente son declarative_item’s. Toman dos formas:
- 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.
- 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:
- Un identificador de la entidad
- 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:
- Cuerpo de un subprograma (subprogram_body)
- Cuerpo de un paquete (package_body)
- Cuerpo de una tarea (task_body)
- Cuerpo de una entrada de un objeto protegido
(entry_body)
- 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.
- Lewis, T.G. y Smith, M.Z.:
Estructura de Datos. Paraninfo, Madrid, 1985.
- Terrance, W Pratt, Marvin V.
Zelbwitz: "Lenguajes de Programación: Diseño e implementación",
Prentice Hall, Hispanamericana,U.S.A.
Manuales:
- o Tutorial de ADA95, Web-
Pages http://www.swcp.com. .
Manual: Cyclic Redundancy
Checks in Ada95
- 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.
- Este libro ha sido escrito
por uno del equipo de creación del Ada
- Para Ada95 ver: "Annotated
Ada Reference Manual"
- Documento ISO/IEC
8652:1995(E)
- 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.
- Guidelines for choosing a
computer language: support for the visionary organization, 2nd
edition by patricia k. Lawlis,c.j. kemp systems, inc.
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 Dell P120 Scaner
Station Scanner
- 32 MB RAM
- 5 GB Hard Drive
- 15-inch high
resolution color display
SOFTWARE:
- GNAT
es el compilador de Ada de GNU
- GDB
es el depurador de GNU
- S.O. Windows 98
- MS Office 97
(Word, Access, Excel, &Powerpoint)
- Netscape Navigator
Gold 3.01
- McAfee Virus ScanNT
|
|
Mediano
y
moderadamente
complejo |
HARDWARE |
|
- 6 Dell P166 Workstations
- 64 MB RAM
- 5.0 GB Hard Drive
- 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
- 64 MB RAM
- 8.0 GB storage
- 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
- 128 MB RAM
- 30.0 GB Hard Drive
- 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
- 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@speedy.com.ar
Compartir 
Publicación enviada por Esteban Tibaldi
Contactar mailto:pandres@speedy.com.ar
Código ISPN de la Publicación EpZVVyAAAkkosnnkkn
Publicado Saturday 31 de January de 2004
Ultimas Publicaciones en ilustrados.com
ilustrados.com nace con el fin difundir el conocimiento publicando trabajos de investigación, monografias, tesis, presentaciones powerpoint y afines. Publicar trabajos en ilustrados.com ha alcanzado prestigio y reconocimiento internacional siendo cada vez más el número de académicos, empresas, investigadores, científicos que consultan las publicaciones de nuestro portal.
|