La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tipos de Datos (Data Types)

Presentaciones similares


Presentación del tema: "Tipos de Datos (Data Types)"— Transcripción de la presentación:

1 Tipos de Datos (Data Types)

2 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

3 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… Las computadoras solamente conocen de bits.

4 Propósito de los Tipos (I)
Los tipos proveen un contexto implícito. Lenguajes de alto nivel tienen sistemas de datos. Los tipos proveen un conjunto de operaciones semánticamente validas. 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. 1.- Los compiladores pueden inferir más información de la que se provee, por lo tanto el programador escriben menos código. 2.- Los compiladores pueden detectar errores de semántica. 3.- Todos los objetos y expresiones tienen un tipo. Ej. int(*)(const void *) es el tipo de una función en C++

5 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.) Si se declara una variable entera, ya se sabe cuanto va a ocupar en memoria, sino se especifica como en Scheme o Lisp el manejo de memoria es más complicado. Los tipos de datos están conformados por dos cosas principalmente: - Un conjunto de valores - Un conjunto de posible operaciones a esos valores. Permiten al procesador del lenguaje (compilador o interpretador) tomar decisiones. Permiten detección de usos incorrectos de los objetos (aplicación de operaciones inadecuadas).

6 Reglas para Corroborar Tipos
Equivalencia: donde dos valores tienen el mismo tipo Compatibilidad: donde un valor puede ser usado en un contexto dado. Ej de inferencia: a b a b Int Int String String Int String Inferencia: son los tipos de expresiones basadas en partes.

7 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: Fuertemente Tipeado: Si las reglas del lenguaje permiten verificar que toda posible aplicación de operación a objetos sea adecuada.22 Lenguajes Fuertemente tipeados: Todas las expresiones y objetos deben tener un tipo. A todas las operaciones se le deben aplicar un apropiado tipo de contexto. No se aplica en lenguajes débilmente tipeado. Ejemplo de lenguajes fuertemente tipeado: Java Ejemplo de lenguajes estáticamente tipeado: Pascal, C Ejemplo de lenguajes dinámicamente tipeado: Lisp, Smalltalk Los programadores cuando no especifican los tipos y el compilador infiere los tipos del contexto (ML). Estáticamente Tipeados: es lo mismo que fuertemente tipeado, sólo que adicionalmente todas las verificaciones pueden 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.

8 ¿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. Constructivo: Los tipos compuestos son creados usando los tipos constructores, un ejemplo de ello en Java boolean es un tipo predefinido (built-in), mientras que boolean[] es un tipo compuesto. Los tres puntos de viste a se complementan entre sí.

9 Clasificación de los Tipos
Enteros Reales Booleanos Caracteres Predefinidos Enumeración Simples Subrango Arreglos Registros Uniones o Registros Variantes Apuntadores y Tipos Recursivos Otros A continuación procederemos a explicar o dar un ejemplo de cada uno de las clasificaciones presentadas de tipos. Compuestos

10 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. Otros Tipos numéricos: Números complejos: Fortran, Python Números racionales: Scheme, Common Lisp Enteros con signo y sin signo (C, Modula-2) Números de punto fijo: Ada Tipos numéricos dependiendo de su precisión: Los enteros en C tienen 4 bytes Los Long en C tienen 8 bytes

11 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}; Lenguajes que poseen enumeración: Pascal, Modula, Ada, Algol La enumeración cuando se define lleva implícita un orden El acercamiento con pascal es mas completo: los enteros y las enumeraciones no son compatibles.

12 Subrangos Mejora la lectura de los programas y el chequeo de errores.
La primera vez fue introducida en Pascal Ej. type test_score = ; type minuscula = ‘a’..’z’; Ellos definen un orden, por tanto pueden ser usados en enumeraciones de ciclos controlados.

13 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 Haskell es un lenguaje de más alto nivel que C y Java, ya que hace una mayor cantidad de cosas por el programador. La barra horizontal en Haskell actúa como un “OR”, puede ser una opción u otra, pero no más de una de las presentadas. Tipos Recursivos: árboles y listas (Haskell) data ArbolBinario = vacio Nodo int AB AB data color = rojo azul negro

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

15 Equivalencia de Tipos Definición: noción de que 2 tipos sean exactamente el mismo. La equivalencia es definida de dos maneras principalmente: - Equivalencia estructural - Nombres equivalentes Dos tipos son estructuralmente equivalentes si ellos tienen tipos de estructuras idénticas (deben poseer los mismos componentes) Ejemplo: Type peso = real Type altura = real Son lo mismo, como estructura de valores tienen el mismo rango pero no cuando vemos las operaciones que se aplican sobre la altura son las mismo de peso. En nombres equivalentes cada definición introduce un nuevo tipo

16 Equivalencia Estructural (I)
type T1 = record a,b : integer end; type T2 = record a : integer b : integer type T3 = record 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.

17 Equivalencia Estructural (II)
type student = record name, address : string age : integer type school = record x : students y : school x := y; ¿Esta asignación sería considerada un error? Respuesta: probablemente si, aunque los tipos son estructuralmente equivalentes.

18 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_element X = pop +1; Existen dos tipos de equivalencia por nombre: la estricta y la relajada (loose). En este ejemplo stack_element y integer podrían ser equivalentes

19 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

20 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 Asuma que el tipo que provee y el tipo esperado es requerido para ser el mismo a:=expr a + b F (arg1, arg2, …, argN) Necesita usar un cast (conversión explicita)

21 Tipo de Conversión y Cast (II)
Ejemplo (Ada): n : integer; r : real; t : test_score; c : celsius_temp; -- real t : test_score(n) -- el chequeo es a tiempo de ejecución n : integer (t); -- nada r : real (n); -- conversión n : integer (r); -- conversión y chequeo r : real (c); -- nada c: celsius_temp (r) -- nada

22 Tipo de Conversión y Cast (III)
type peso = real type altura = real var p : peso a : altura p := a X p := (peso)a type edad = var e : edad i : int e := i X i := e X e := (edad) i i := (int) e Entero y reales, generar Código que cambie la representación y también chequear que no se salga de rango “Tomar un objeto de un tipo y convertirlo a otro” Depende de cual sea el objeto a convertir implica mayor o menor trabajo para el compilador Estructuras son diferentes y hay que hacer una conversión o cambiar la representación Equivalencia estructural, el lenguaje lo prohíbe a menos de que explícitamente la hagamos. Equivalencia estructural pero solo en alguna intersección.

23 Tipo de Compatibilidad y Coerción
Cada vez, más lenguajes no requieren de equivalencias de tipos en cada contexto, pero apenas compatibilidad. Coerción – es una conversión implícita, si los tipos con compatibles. 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 - En C: Porciones de coerciones, algunos implican menor precisión (truncar)


Descargar ppt "Tipos de Datos (Data Types)"

Presentaciones similares


Anuncios Google