23
Tipos de Datos (Data Types)

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?

Embed Size (px)

Citation preview

Page 1: 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?

Tipos de Datos(Data Types)

Page 2: 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?

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

Page 3: 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?

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…

Page 4: 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?

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.

Page 5: 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?

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

Page 6: 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?

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.

Page 7: 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?

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.

Page 8: 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?

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

Page 9: 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

Simples

Compuestos

• Predefinidos

• Enumeración

• Subrango

• Enteros• Reales• Booleanos• Caracteres

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

Page 10: 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?

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.

Page 11: 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?

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};

Page 12: 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?

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.

Page 13: 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?

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

Page 14: 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?

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.

Page 15: 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?

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

Page 16: 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?

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.

Page 17: 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?

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.

Page 18: 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?

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

Page 19: 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?

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

Page 20: 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?

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)

Page 21: 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?

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

Page 22: 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?

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

Page 23: 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?

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