Вы находитесь на странице: 1из 14

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

Lenguajes de Programación I Tipos de Datos Ernesto Hernández-Novich <emhn@usb.ve> Copyright (c) 2006

Tipos de Datos

Tipos de Datos

Clasificación de los Tipos

Ortogonalidad

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.

del lenguaje. Reglas de equivalencia de tipos . Reglas de compatibilidad de tipos . Reglas de

Tipos de Datos

Clasificación de los Tipos

Utilidad de los Tipos

Ortogonalidad

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.

de uso de los objetos El compilador o interpretador puede tomar mejores decisiones. Permiten detectar usos

Tipos de Datos

Verificación de Tipos

Clasificación de los Tipos

Ortogonalidad

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).

Dinámica ( Dynamically Typed ) es aquel que realiza las verificaciones a tiempo de ejecución (Lisp,

Tipos de Datos

¿Qué es un tipo?

Clasificación de los Tipos

Desde el punto de vista

Denotacional es un conjunto de valores. Constructivo es uno de

Ortogonalidad

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.

con semántica bien definida y consistente. Un programador suele percibirlo como una mezcla de los tres

Tipos de Datos

Clasificación de los Tipos

Clasificación de los Tipos

Ortogonalidad

Simples

Predefinidos.

Booleanos.

Caracteres.

Numéricos.

Enumeración.

Sub-rango.

Compuestos

Registros y Registros Variantes (Uniones). Arreglos y Listas. Conjuntos. Apuntadores (Tipos Recursivos). Otros.

Compuestos Registros y Registros Variantes (Uniones). Arreglos y Listas. Conjuntos. Apuntadores (Tipos Recursivos). Otros.

Tipos de Datos

Tipos Predefinidos

Clasificación de los Tipos

Ortogonalidad

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.

o como cadenas . Tradicionalmente, un byte codificado en ASCII. Modernamente, multibyte codificado en Unicode.

Tipos de Datos

Tipos Numéricos

Clasificación de los Tipos

Ortogonalidad

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.

algunos lenguajes se deja la decisión de precisión a la implantación particular ocasionando problemas de portabilidad.

Tipos de Datos

Enumeración

Clasificación de los Tipos

Ortogonalidad

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.

dia { dom, lun, mar, mie, jue, vie, sab }; Suelen representarse con un rango consecutivo

Tipos de Datos

Sub-rango

Clasificación de los Tipos

Ortogonalidad

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

los programas. Pueden utilizarse en una iteración type minusculas = ’a’ ’z’; for letra := ’a’

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.

registros tales que en un momento dado sólo uno de sus campos (o colecciones de campos)

Tipos de Datos

Arreglos y Listas

Clasificación de los Tipos

Ortogonalidad

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).

existe el concepto de índice. Longitude de arreglo vs. longitud de lista. Listas de Asociación (Lisp,

Tipos de Datos

Apuntadores

Clasificación de los Tipos

Ortogonalidad

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 recursivos. Algunos lenguajes (Haskell) proveen mecanismos para construir tipos recursivos sin utilizar apuntadores.

Tipos de Datos

Ortogonalidad

En la construcción de tipos

Clasificación de los Tipos

Ortogonalidad

¿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?

tipo de una instrucción? ¿De un procedimiento que no retorna valores? ¿Cuál es el tipo para