Lenguajes de Programación I - Tipos de Datos

Anuncio
Tipos de Datos
Clasificación de los Tipos
Lenguajes de Programación I
Tipos de Datos
Ernesto Hernández-Novich
<[email protected]>
c 2006-2010
Copyright Ortogonalidad
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
Tipos de Datos
El computador sólo manipula secuencias de bits.
Los lenguajes de programación ofrecen la noción de tipo
para las expresiones y objetos:
Establace un contexto implícito de operaciones.
Limitar el conjunto de operaciones disponibles en un
programa semánticamente válido.
Sistema de Tipos
Mecanismo para definir tipos y asociarlos con las
construcciones del lenguaje.
Provee reglas
Equivalencia de tipos.
Compatibilidad de tipos.
Inferencia de tipos.
Tipos de Datos
Clasificación de los Tipos
Utilidad de los Tipos
Mejorar la legibilidad de los programas.
Permiten declarar la intención de uso de los objetos
El compilador o interpretador puede tomar mejores
decisiones.
Permiten detectar usos incorrectos.
Ortogonalidad
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
Verificación de Tipos
El proceso que garantiza que el programa obedece las
reglas del Sistema de Tipos se llama verificación de tipos
(type checking).
Lenguaje de Verificación Fuerte (Strongly Typed) es aquel
que prohibe operaciones sobre tipos que no lo permitan
(Ada, Java).
Lenguaje de Verificación Fuerte Estática (Statically Typed)
es aquel de Verificación Fuerte y además puede hacer
toda la verificación a tiempo de compilación (Haskell).
Lenguaje de Verificación Dinámica (Dynamically Typed) es
aquel que realiza las verificaciones a tiempo de ejecución
(Lisp, Perl).
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
¿Qué es un tipo?
Desde el punto de vista
Denotacional es un conjunto de valores.
Constructivo es uno de
Tipos primitivos (builtins) provistos por el lenguaje (también
llamados predefinidos o básicos).
Tipos compuestos (composite) construidos a partir de los
primitivos usando constructores de tipos.
De la Abstracción es una interfaz que consta de un
conjunto de operaciones con semántica bien definida y
consistente.
Un programador suele percibirlo como una mezcla de los
tres puntos de vista.
Tipos de Datos
Clasificación de los Tipos
Clasificación de los Tipos
Simples
Predefinidos.
Booleanos.
Caracteres.
Numéricos.
Enumeración.
Sub-rango.
Compuestos
Registros y Registros Variantes (Uniones).
Arreglos y Listas.
Conjuntos.
Apuntadores (Tipos Recursivos).
Otros.
Ortogonalidad
Tipos de Datos
Clasificación de los Tipos
Tipos Predefinidos
Los booleanos (también llamados lógicos).
true y false.
En algunos lenguajes no son más que un byte.
Los caracteres individuales o como cadenas.
Tradicionalmente, un byte codificado en ASCII.
Modernamente, multibyte codificado en Unicode.
Ortogonalidad
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
Tipos Numéricos
Enteros con o sin signo (C/C++, C#).
Números de precisión fija (fixed point) (Ada).
Números racionales (Scheme, Haskell).
Números en punto flotante (floating point).
Números complejos (Fortran, Lisp, Scheme, C99).
En algunos lenguajes se deja la decisión de precisión a la
implantación particular ocasionando problemas de
portabilidad.
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
Enumeración
Un conjunto de elementos nombrados.
type dia = (dom, lun, mar, mie, jue, vie, sab)
Los valores están ordenados haciendo válidas
Las compraciones, e.g. mar < mie.
El empleo de funciones sucesor y predecesor.
Usarlos en una iteración
for hoy := lun to vie do ...
Aparecieron en Pascal como un mecanismo para mejorar
la legibilidad de los programas.
Disponibles en C pero como un caso de uso de enteros.
enum dia { dom, lun, mar, mie, jue, vie, sab };
Suelen representarse con un rango consecutivo de
enteros comenzando por cero.
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
Sub-rango
Es un conjunto de valores contiguos tomados de un tipo
base discreto (llamado tipo padre).
type calificacion = 1..5;
dia_habil = lun..vie;
Aparecieron en Pascal como un mecanismo para mejorar
la legibilidad de los programas.
Pueden utilizarse en una iteración
type minusculas = ’a’..’z’;
...
for letra := ’a’ to ’z’ do ...
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
Registros y Registros Variantes
Los registros son una colección de campos (fields) cada
uno de los cuales pertenece a un tipo más simple.
Corresponden a las tuplas de la matemática, construidas
como el producto cartesiano de los tipos de los campos.
Los registros variantes o uniones son registros tales que
en un momento dado sólo uno de sus campos (o
colecciones de campos) es válida en un momento dado.
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
Arreglos y Listas
El arreglo es probablemente el tipo de datos compuestos
más utilizado.
Puede considerarse como una función
Su dominio es el tipo de los índices.
Su rango es el tipo de los componentes.
Los arreglos de caracteres suelen llamarse cadenas
(strings) y ofrecen operaciones especiales.
Las listas son similares, pero no existe el concepto de
índice.
Longitude de arreglo vs. longitud de lista.
Listas de Asociación (Lisp, hashes en Perl).
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
Apuntadores
Los apuntadores son l-values.
Su valor es una referencia a un objeto del tipo base del
apuntador.
Generalmente se implantan como direcciones de memoria.
Son utilizados para construir tipos recursivos.
Algunos lenguajes (Haskell) proveen mecanismos para
construir tipos recursivos sin utilizar apuntadores.
Tipos de Datos
Clasificación de los Tipos
Ortogonalidad
Ortogonalidad
En la construcción de tipos
¿Puede usarse cualquier combinación de tipos en la
construcción?
¿Cuál es el tipo de una instrucción? ¿De un procedimiento
que no retorna valores?
¿Cuál es el tipo para referirse a una función?
Descargar