Upload
olalla-ochoa
View
226
Download
3
Embed Size (px)
Citation preview
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