Tipos de Datos

Clasificación de los Tipos

Ortogonalidad

Lenguajes de Programación I
Tipos de Datos

Ernesto Hernández-Novich <emhn@usb.ve>

Copyright (c) 2006

Tipos de Datos

Clasificación de los Tipos

Ortogonalidad

Tipos de Datos

Los computadores sólo manipulan secuencias de bits. Los lenguajes de programación ofrecen la noción de tipo para las expresiones y objetos:
Para proveer un contexto implícito de operaciones. Para 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. Reglas de equivalencia de tipos. Reglas de compatibilidad de tipos. Reglas de inferencia de tipos.

Tipos de Datos

Clasificación de los Tipos

Ortogonalidad

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.

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

Ortogonalidad

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.

Tipos de Datos

Clasificación de los Tipos

Ortogonalidad

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.

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?

Sign up to vote on this title
UsefulNot useful