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
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:
- 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 (ver Apéndice figura
3)
Objeto Real: | |
Sistema: Conjunto de
| Base: Información
|
Medio Exterior: Sitios o |
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.
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 < palabra > ® < byte2 < números > ® < entero > < entero > ® < byte8 < entero largo > ® < byte | < decimal > ® < byte 8 < separador decimal > ® , < vector > ® entero½ palabra < matrices < 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 La operación suma | PSEUDOCÓDIGO
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 | ||||
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 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
= igualdad /= Inigualdad > mayor que >= mayor que o igual que < menor que <= menor o igual que | Los operadores lógicos and or xor or exclusiva de 2 not and then circuito corto y oper. or else circuito corto u oper. |
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
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
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.
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.
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:
- 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.
FIGURA 1 Evolución de Ada 95
FIGURA 3 Esquema general
- 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
Tamaño y | Consideraciones de Hardware y |
Pequeño y Complejo | HARDWARE |
Mediano y moderadamente complejo | HARDWARE
SOFTWARE:
|
Grande y muy complejo | HARDWARE
SOFTWARE:
|
Muy grande e inmensamente complejo ejemplo Sistemas (un sistema de guía de | HARDWARE
SOFTWARE:
|
Tabla 1: Relaciones de Tamaño y
Complejidad para seleccionar el hardware y
Software
Proyecto de Tamaño y | Consideraciones del proceso de |
Pequeño y no Complejo | • comprar un producto • Si no, se debe desarrollar uno para • Usar un lenguaje de 4ta o 5ta • Si no, utilizar un recurso existente o • Esperar que el software permanezca |
Mediano y moderadamente complejo | • Incluir proyectos pequeños que pueda crecer • Consultar planes de organizaciónes • Considerar COSTOS • Si no, usar practicas de ingenieria |
Grande y muy complejo | • Incluir proyectos medianos que pueda crecer • Considerar COSTOS • Usar buenas y solidas practicas de • Consultar planes de organizaciónes • Elegir el lenguaje apropiado usando la • Elegir el producto |
Muy grande e inmensamente complejo | • Incluir proyectos grandes que pueda crecer • Considerar COSTOS de los productos satisfaciendo alguna de las partes • Usar buenas y solidas practicas de • Consultar planes de organizaciónes • Elegir el lenguaje apropiado usando la • Elegir el producto apropiado • Control immense complexity from the • Considerar definir separaradamente |
TABLA 2: Relaciones
de Tamaño y Complejidad para Desarrollar
Procesos
| 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 | 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 | 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 | 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