Tipos de Datos (Data Types). Agenda Tipos de Datos Propósito de los tipos Reglas para Corroborar...

Post on 28-Jan-2016

226 views 3 download

Transcript of Tipos de Datos (Data Types). Agenda Tipos de Datos Propósito de los tipos Reglas para Corroborar...

Tipos de Datos(Data Types)

Agenda• Tipos de Datos• Propósito de los tipos• Reglas para Corroborar Tipos• Sistemas de Tipos en un Lenguaje• ¿Qué es un Tipo?• Clasificación de los Tipos• Tipos Predefinidos• Enumeración• Subrangos• Unión, Apuntadores y Tipos Recursivos• Tipos Compuestos y Ortogonalidad• Equivalencia de Tipos• Equivalencia Estructural• Nombres Equivalentes• Tipo de Conversión y Cast• Tipo de Compatibilidad y Coerción

Tipos de Datos

• Los computadores manipulan secuencias de bits.

• Los lenguajes de programación que poseen tipos de datos aumentan el nivel de abstracción desde bits a datos.

• La mayoría de los programas manipulan los datos más generales:– Números, cadena de caracteres, listas…

Propósito de los Tipos (I)

1. Los tipos proveen un contexto implícito.

2. Lenguajes de alto nivel tienen sistemas de datos.

3. Los tipos proveen un conjunto de operaciones semánticamente validas.

4. Un sistema de tipo consiste de:• Un mecanismo para definir tipos y asociaciones

entre ellas, con constructores del lenguaje.• Un conjunto de reglas para corroborar tipos.

Propósito de los Tipos (II)

• Mejora la legibilidad.

• Ayuda a conseguir errores.

Permiten declarar la “intención de uso” de los objetos (variables, parámetros, etc.)

Permiten al procesador del lenguaje (compilador ointerpretador) tomar decisiones.

Permiten detección de usos incorrectos de los objetos(aplicación de operaciones inadecuadas).

Reglas para Corroborar Tipos

Equivalencia: donde dos valores tienen el mismo tipo

Compatibilidad: donde un valor puede ser usado en un contexto dado.

Inferencia: son los tipos de expresiones basadas en partes.

Sistema de Tipo en un Lenguaje

• Los tipos corroboran si el proceso de aseguramiento que un programa obedece las reglas de compatibilidad de tipos entre las cuales se encuentran:

Lenguajes

Fuertemente Tipeado: Si las reglas del lenguaje permiten verificar que toda posible aplicación de operación a objetos sea adecuada.22

Estáticamente Tipeados: es lo mismo que fuertemente tipeado, sólo que adicionalmente todas las verificacionespueden ser hechas antes de la ejecución de los programas,o sea, a tiempo de compilación.

Dinámicamente tipeados: algunos lenguajes hacen el Chequeo a tiempo de ejecución.

¿Qué es un Tipo?

• Declaración: introduce nombres, alcances.• Definición: describe un tipo de valores para el

cual el nombre esta limitado.• 3 puntos de vista:

– Denotacional: el tipo es un conjunto de valores.– Constructivo: es un predefinido (built-in) o un tipo

compuesto.– Basado en Abstracción: un tipo es una interfaz

que define un conjunto de operaciones consistentes.

Clasificación de los Tipos

Simples

Compuestos

• Predefinidos

• Enumeración

• Subrango

• Enteros• Reales• Booleanos• Caracteres

• Arreglos • Registros• Uniones o Registros Variantes • Apuntadores y Tipos Recursivos• Otros

Tipos Predefinidos

• La mayoría de los lenguajes soporta enteros y flotantes.– El rango de valores depende de la implementación.

• No todos los lenguajes soportan otros tipos numéricos– Números complejos, racionales, de punto fijo, etc.

• Algunos lenguajes distinguen los tipos numéricos dependiendo de su precisión.– Simples Vs. De precisión doble.

Enumeración

• Mejora la legibilidad de los programas y el chequeo de errores.

• La primera vez fue introducida en Pascal

Ej. type diaSemana = (lunes, martes...domingo);

Otros lenguajes usan constantes para definir la enumeración

• C dispone de una característica similar

Ej. enum diaSemana {lunes, martes…domingo};

Subrangos

• Mejora la lectura de los programas y el chequeo de errores.

• La primera vez fue introducida en PascalEj. type test_score = 0..100;

type minuscula = ‘a’..’z’;

• Ellos definen un orden, por tanto pueden ser usados en enumeraciones de ciclos controlados.

Unión, Apuntadores y Tipos Recursivos

Unión: Toma un tipo u otro. En C struct { int i char c;}

Apuntadores: en Java el uso de apuntadores es implícito

Tipos Recursivos: árboles y listas (Haskell)

data ArbolBinario = vacio Nodo int AB AB

data color = rojo azul negro

Tipos Compuestos y Ortogonalidad

• Los tipos compuestos son creados aplicando un constructor a uno o más tipos simples.

Ej. Records, listas, archivos, conjuntos, cadenas de caracteres, arreglos…

• La ortogonalidad es una propiedad importante en el diseño de sistema de tipo.

• Mientras más un lenguaje soporte ortogonalidad, tendrá más flexibilidad en los tipos compuestos.

Equivalencia de Tipos

La equivalencia es definida de dos maneras principalmente:- Equivalencia estructural- Nombres equivalentes

Definición: noción de que 2 tipos sean exactamente el mismo.

Dos tipos son estructuralmente equivalentes si ellos tienen tipos de estructuras idénticas (deben poseer los mismos componentes)

En nombres equivalentes cada definición introduce un nuevo tipo

Equivalencia Estructural (I)type T1 = record

a,b : integer end;

type T2 = recorda : integerb : integer

end;

type T3 = recordb : integera : integer

end;

Indique cual de lo siguiente fragmentos de código son equivalente?

Respuesta: T1 y T2 son equivalentes, pero, T2 y T3 en ML no lo son,

en otros lenguajes si es equivalente.

Equivalencia Estructural (II)type student = record

name, address : stringage : integer

type school = recordname, address : stringage : integer

x : studentsy : school

x := y; ¿Esta asignación sería considerada un error?

Respuesta: probablemente si, aunque los tipos son estructuralmente equivalentes.

Nombres Equivalentes (I)

En líneas generales: diferentes nombres tipos diferentes

TYPE stack_element = INTEGER;MODULE stack;IMPORT stack_element;EXPORT push, pop;PROCEDURE push (elem : stack_element);….PROCEDURE pop () : stack_element;….VAR x : stack_elementX = pop +1;

En este ejemplo stack_element y integer podrían ser equivalentes

Nombres Equivalentes (II)

Variantes - Estricta- Relajada (loose)

La cantidad de lenguajes que usan loose ha aumentado (Pascal)Ada – permite a los programadores decidir entre cual alias escoger un tipo derivado o un subtipo

subtype stack_element is integer;type celsius_temp is new real;type fahrenheit_temp is new real;

Los subtipo son equivalentes a el tipo de sus padres y a sus hermanos tipos

Los tipos derivados son nuevos tipos

Tipo de Conversión y Cast (I)

- Los tipos pueden ser estructuralmente equivalentes, pero el lenguaje usa nombres equivalentes

- Los tipos tienen diferentes conjunto de valores, pero la misma representación.

- Los tipos tienen diferentes representaciones

a:=expra + bF (arg1, arg2, …, argN)

Asuma que el tipo que provee y el tipo esperado es requerido para ser el mismo

Necesita usar un cast (conversión explicita)

Tipo de Conversión y Cast (II)

Ejemplo (Ada):

n : integer;r : real;t : test_score; -- 0..100c : celsius_temp; -- realt : test_score(n) -- el chequeo es a tiempo de ejecuciónn : integer (t); -- nadar : real (n); -- conversiónn : integer (r); -- conversión y chequeor : real (c); -- nadac: celsius_temp (r) -- nada

Tipo de Conversión y Cast (III)

type peso = realtype altura = realvar p : peso

a : altura

p := a Xp := (peso)a

type edad = 0..150var e : edad

i : int

e := i Xi := e Xe := (edad) ii := (int) e

Entero y reales, generar Código que cambie la representación y también chequear que no se salga de rango

Equivalencia estructural, el lenguaje lo prohíbe a menos de que explícitamente la hagamos.

Equivalencia estructural pero solo en alguna intersección.

Estructuras son diferentes y hay que hacer una conversión o cambiar la representación

Tipo de Compatibilidad y Coerción

Cada vez, más lenguajes no requieren de equivalencias de tipos encada contexto, pero apenas compatibilidad.Coerción – es una conversión implícita, si los tipos con compatibles.

- En C:Porciones de coerciones, algunos implican menor precisión (truncar)

-En Ada:El tipo S es compatible con el tipo T si y solo si:

- S y T son equivalentes- Uno de los subtipos es del otro- Ambos son subtipos del mismo tipo- Ambos son arreglos, con el mismo número y tipo de elementos en cada dimensión