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?