Lenguaje (Ada)
Enviado por marcos071996 • 29 de Abril de 2014 • Ensayo • 3.863 Palabras (16 Páginas) • 226 Visitas
Lenguaje (Ada)
Características
• La sintaxis, inspirada en Pascal, es bastante legible incluso para personas que no conozcan el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura).
• Es indiferente el uso de mayúsculas y minúsculas en los identificadores y palabras claves, es decir es un lenguaje case-insensitive.
• En Ada, todo el programa es un único procedimiento, que puede contener subprogramas (procedimientos o funciones).
• Cada sentencia se cierra con end qué_cerramos. Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen.
• El operador de asignación es :=, el de igualdad =. A los programadores de C y similares les puede confundir este rasgo inspirado en Pascal.
• La sintaxis de atributos predefinidos es Objeto'Atributo (o Tipo'Atributo) (nota: esto sólo aplica a atributos predefinidos por el lenguaje, ya que no es el concepto de atributo típico de OOP).
• Se distingue entre "procedimientos" (subrutinas que no devuelven ningún valor pero pueden modificar sus parámetros) y "funciones" (subrutinas que devuelven un valor y no modifican los parámetros). Muchos lenguajes de programación no hacen esta distinción. Las funciones de Ada favorecen la seguridad al reducir los posibles efectos colaterales, pues no pueden tener parámetros in out.
Sintaxis
La declaración básica de un array es la siguiente:
array (Tipo_Índice) of Tipo_Elemento
Este array consiste en un elemento de tipo Tipo_Elemento por cada posible valor de Tipo_Índice. Por ejemplo, si quisieramos contar las ocurrencias de cada letra en un texto nos definiríamos un array de este tipo:
type Contador_Caracteres is array (Character) of Natural;
Nota: usamos Natural como tipo de elemento puesto que los valores negativos de Integer no tienen sentido en una cuenta. Es conveniente usar el subtipo entero más adecuado en cada caso, puesto que así nos beneficiamos de la comprobación de rango y podemos descubrir errores fácilmente.
Con subrango conocido
A menudo no necesitamos un array con todos los valores posibles del tipo del índice. En este caso definimos un subtipo del tipo índice con el rango necesitado.
subtype Subtipo_Índice is Tipo_Índice range Primero ... Último;
array (Subtipo_Índice) of Tipo_Elemento;
Ten en cuenta que si First y Last son literales numéricos, esto implica que el tipo índice base es el Integer.
Si en el ejemplo anterior, sólo deseásemos contar letras mayúsculas desechando otros caracteres, podríamos definir el tipo array de este modo:
type Contador_Caracteres is array (Character range 'A' .. 'Z') of Natural;
Con elementos aliased
Los programadores de C/C++ dan por hecho que todo elemento de un array tiene una dirección propia en memoria (de hecho el nombre del array es un puntero sobre el que se puede operar).
En Ada, esto no es siempre así. Veamos este ejemplo:
type Día_De_Mes is range 1 .. 31;
type Día_Con_Cita is array (Día_De_Mes) of Boolean;
pragma Pack (Día_Con_Cita);
Uso de arrays
Para acceder a los elementos de un array se usan el nombre del objeto array seguido del índice entre paréntesis.
Se puede acceder a una rodaja (slice) de un array usando (x .. y).
Vector_A (1 .. 3) := Vector_B (4 .. 6);
El operador "&" permite concatenar arrays:
Nombre_Completo := Nombre & ' ' & Apellidos;
Tipos De Datos
Tipos de datos primitivos
Variables y Constantes
• Cualquier objeto de datos puede ser definido como variable o como constante.
• Cualquier declaración que empiece con la palabra constant es una constante y se deberá asignar un valor, el cual no se podrá cambiar en la ejecución.
• Si se omite la palabra constant, la misma declaración define un tipo de dato variable, a la cual se le debe asignar un valor inicial y el cual se podrá cambiar en la ejecución.
Ejemplo:
MaxSize constant integer := 500;
CurrentSize integer := 0;
Tipos de Datos Numericos
• Enteros, punto-flotante, punto-fijo y los tipos de datos basicos.
• Declaraciones son similares que en Pascal usando los atributos range (para enteros) y digits (para flotantes) los cuales especifican el rango de valores que podra tomar el tipo de dato.
Ejemplo:
type DayOfYear is range 1..366; -- un valor entero de 1 a 366
MyBirhtday: DayOfYear := 219; -- MyBirthday inicializada a 219
type Result is digits 7 -- flotante de 7 digitos
Anwer: Result :=3.17; -- varible de 7 digitos.
Los tipos Integer y float estan predefinidos en el paquete estandar como:
type integer is range implementation defined;
type float is digits implementation defined;
Enumeraciones
• Enumeraciones deben de definirse usando un estilo como Pascal de definición e implementación.
Ejemplo:
type class is (Fresh, Soph, Junior, Senior);
La representación en la ejecución usa el número de posición para cada valor de la literal, empezando con 0 para el primer valor listado, 1 para el segundo, etc.
Tipos Caracter y Boleano
• Estas son definidas en el paquete estandar para ser enumeraciones especificas.
Tipo de Dato Apuntador
• Un tipo apuntador llamado access, junto con una función primitiva new, crean un nuevo objeto y regresa un apuntador a este , el cual debe ser asignado a una varible del tipo access.
• Una variable no puede ser directamente declarada como access en vez de esto se hace lo siguiente:
type acces_typename is access typename;
y la variable deber ser declarada como un tipo de dato definido.
• Todas las variables del tipo acces tienen el valor NULL por default.
• Un bloque de almacenamiento puede ser solicitado para cualquier tipo de dato usando la sentencia:
for acces_typename use expresion;
Donde expresión es el tamaño del bloque
...