1 / 59

3. TIPOS DE DATOS

Cobol. C. Pascal. Fortran. 3. TIPOS DE DATOS. SmallTalk. Java. C++. Conceptos básicos. Un tipo de dato es: Un conjunto de objetos Con una colección de operaciones Tipos de datos: Elementales o primitivos, por ejemplo, float Estructurados o agregados, por ejemplo, struct Abstractos

Download Presentation

3. TIPOS DE DATOS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cobol C Pascal Fortran 3. TIPOS DE DATOS SmallTalk Java C++

  2. Conceptos básicos • Un tipo de dato es: • Un conjunto de objetos • Con una colección de operaciones • Tipos de datos: • Elementales o primitivos, por ejemplo, float • Estructurados o agregados, por ejemplo, struct • Abstractos • Modelo de definición de datos, por ejemplo, typedef • Modelo de definición de objetos, por ejemplo, class

  3. Estructura de tipos La estructura de tipos en un lenguaje se establece mediante dos conceptos: • Equivalencia (criterio para decidir que dos objetos son del mismo tipo) • Nominal, si los tipos tienen el mismo nombre • Estructural, si los tipos tienen la misma estructura • Conversión (transformación de la representación interna de un r-valor según la representación interna del respectivo l-valor) • Implícita o coerción • Explícita o casting

  4. Equivalencia Ejemplo en Pascal Program Ejemplo; Type Vector1 = Array[1..10] of Real; Vector2 = Array[1..10] of Real; Var X, Z : Vector1; Y : Vector2; Procedure Rutina(A : Vector1); Begin … End; Begin X := Y; Rutina(Y); End. Error!! según equivalencia nominal Correcto según equivalencia estructural

  5. Conversión Ejemplo en C float x,y,z; int i=5, j=2, k=4; x = i/k; y = i/(float)j; z = (float)i/k; printf("%f %f \n", x, y,z); x = 5/4 = 1 x=1.0 coerción y = 5/2.0 = 5.0/2.0 y = 2.5 castingcoerción z = 5.0/4 = 5.0/4.0 z = 1.25 castingcoerción

  6. Comprobación de tipos Comprobación de tipos es la acción de verificar la consistencia entre un l-valor y un r-valor La comprobación puede ser: • Estática (lenguajes fuertemente tipados) • Dinámica (lenguajes débilmente tipados) NO existen lenguajes de programación que realicen TODA la comprobación de tipos durante compilación

  7. Comprobación estática • Ocurre casi totalmente durante compilación • Requiere declarar datos • Participa de la tabla de símbolos • Dota a los códigos ejecutables de: • Escasa flexibilidad • Gran eficiencia • Alta seguridad

  8. Comprobación dinámica • Ocurre durante ejecución • Excluye la declaración de datos • Acepta modificar tipos de datos durante ejecución • Demanda espacio de almacenamiento adicional • Dota a los códigos ejecutables de: • Gran flexibilidad • Escasa eficiencia • Insuficiente seguridad

  9. Comprobación de tipos Para la sentencia en C x = f(x) + z; El compilador comprobará la compatibilidad de los tipos de: • x y el parámetro formal de f • f y z • x y la operación + En Pascal Type Rango = 1..100; Var k, n : Rango; Begin n = 2*k + 1; End; El r-valor de n sólo se podrá comprobar en tiempo de ejecución

  10. Modelos de Definición de Tipos Estructurados de Datos

  11. Producto Cartesiano El producto cartesiano de n conjuntos C1, C2, C3, ... Cn, denotado en la forma C1 x C2 x ... x Cn, es un conjunto cuyos elementos son n-tuplas (c1, c2, ... cn) con ciÎ Ci Los lenguajes de programación proveen el modelo de producto cartesiano a través de los conceptos de estructura o registro Los polígonos regulares se pueden caracterizar por: • Un número entero que representa el numero de lados, y • Un número real que representa la longitud de un lado Todo polígono regular así expresado es un elemento del producto cartesianoZ X R

  12. f : D I Aplicación Indexada Una aplicación indexada es una función de un conjunto de valores pertenecientes a un dominio D, sobre un conjunto de valores pertenecientes a una imagen I Los lenguajes de programación proveen el modelo de aplicación indexada a través del concepto de arreglo La declaración en C, float v[5]; constituye una aplicación del subrango de enteros [0, 4] sobre los números reales

  13. Aplicación Indexada Para ligar el dominio D a un subconjunto específico de valores, los lenguajes optan por una de tres estrategias: • Estática, para la cual el subconjunto se determina en tiempo de compilación • Semidinámica, para la cual el subconjunto se determina en tiempo de creación • Dinámica, para la cual el subconjunto se determina en tiempo de ejecución

  14. Aplicación Indexada Estrategia Estática En C, int v[5]; declara un arreglo de tamaño 5 Estrategia Semidinámica En Algol, [m : n] int a; declara un arreglo de tamaño conforme a los valores actuales de m y n Estrategia Dinámica En Algol, flex [1: 0] int b; declara un arreglo vacío, de modo que b := (2, 3, 8) cambia sus límites a [1:3]

  15. Unión Discriminada Modo Pascal Es una extensión del producto cartesiano, la cual consta de: • Una parte fija, cuyo último campo es un discriminante • Una parte variable, definida como un conjunto de variantes En este modelo: • La parte fija precede a la parte variable • El discriminante permite seleccionar una de las variantes pertenecientes al conjunto definido • Cada variante es, a su vez, un producto cartesiano Técnicamente se conoce como registro con variantes

  16. Unión Discriminada Ejemplo Type RegVar = Record f1 : Integer; f2 : Real; case variable : Boolean of True : (v1 : Real); False : (v2 : Char); End; Var rv : RegVar;

  17. Unión Modo C Una union se caracteriza por • Ser, sintácticamente, un producto cartesiano • Declararse como un conjunto de campos variantes • Ser, semánticamente, una estructuravariable • Disponer, durante ejecución, de tan sólo uno de los campos variantes En C, un registro con variantes se simula mediante una struct: • Cuyo último campo es una union • Cuyo penúltimo campo se utiliza como discriminante

  18. Unión Ejemplo typedef struct { int f1; float f2; int variable; union { float v1; char v2; } var; } regvar; regvar rv;

  19. Conjunto Potencia Modo Pascal Un conjunto potencia es el conjunto de todos los subconjuntos que se pueden formar con los elementos de cierto conjunto base T; se denota P(T) Permite declarar variables cuyos valores son elementos de P(T) Si T = {a, b, c} entonces P(T) = {, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}} #(P(T)) = 2#(T) = 23 = 8

  20. Modelos de Construcción de Tipos Estructurados de Datos

  21. Modelos de Construcción Un tipo estructurado de datos se obtiene a partir de tipos elementales mediante un constructor de tipo Un constructor de tipo impone la necesidad de contar con un modelo de construcción para la futura creación de objetos en memoria Los traductores de lenguajes operan con tales modelos con el propósito de satisfacer abstracciones de alto nivel Un modelo de construcción está formado por un descriptor y un modelo de representación

  22. Modelos de Construcción El descriptor es un conjunto de atributos del objeto El modelo de representación corresponde a la forma física que adoptará el objeto en RAM Como la RAM es lineal, todo objeto adopta la forma física unidimensional Luego, se debe proveer una funcionalidad que convierta acciones de alto nivel en acciones sobre la representación Una fórmula de acceso es una función que transforma referencias lógicas en referencias físicas, a partir de los atributos contenidos en el descriptor

  23. Un puntero del bloque A al bloque B (enlace) se representa guardando la dirección de la primera localidad del bloque B en una localidad reservada para ese fin en el bloque A Tipos Estructurados Representación Secuencial: La estructura de datos se guarda en un bloque contiguo de almacenamiento Representación Enlazada: La estructura de datos se guarda en varios bloques no contiguos enlazados entre sí a través de punteros

  24. Componente Descriptor Componente Componente Componente Componente Componente . . . ...... Componente Componente Tipos Estructurados enlace Representación Secuencial Representación Enlazada

  25. Tipos Estructurados • Representación Secuencial: • Se usa para estructuras de tamaño fijo • Ocasionalmente en estructuras homogéneas de tamaño variable • Ejemplo : registros, vectores, strings, etc. • Representación Enlazada: • Se usa para estructuras de tamaño variable • Ejemplo : listas enlazadas

  26. Modelos de Representación de Tipos Estructurados de Datos

  27. Producto Cartesiano Pascal Var R : Record a : integer; b : real; End; C struct { int a; float b; } R ;

  28. Objeto a b Producto Cartesiano Descriptor

  29. Objeto Producto Cartesiano Fórmula de acceso Dirección absoluta de memoria donde se encuentra el i-ésimo selector del registro R • donde • es la dirección base de R, resuelta en tiempo de creación, y • tkel tamaño del k-ésimo selector

  30. i - 1 i - 1 å å tk tk k = 1 k = 1 = Producto Cartesiano Sin embargo, la expresión se resuelve en tiempo de traducción. Luego, con y = 0, constantes

  31. R: int boolean char float int float float int puntero Producto Cartesiano Ejercicio: Dada la estructura a b c d e f g h j • Declararla en C++ • b) Establecer una fómula de acceso a una componente del registroR • c) Aplicar la fórmula para determinar la dirección absoluta del campo g del registro R, si la dirección base es 1000

  32. Producto Cartesiano a) Declaración en C++ typedef float *puntero; struct Registro { int a, d, j; float b, f, g; char c ; bool e ; puntero h; } ; Registro R;

  33. Producto Cartesiano b) Fórmula de acceso: i-1 Dir(R.Si) =  +  tk Dir(R.Si) =  + (t1+ … + ti-1) k=1

  34. a b c d e f g h j Producto Cartesiano c) Aplicación de la fórmula de acceso: Dir(R.g) = Dir(R.S7) Dir(R.g) =  + t1 + t2 + t3 + t4 + t5 + t6 Dir(R.g) =  + t(a) + t(b) + t(c) + t(d) + t(e) + t(f) Como  = 1000, se tiene Dir(R.g) = 1000 + 2 + 4 + 1 + 2 + 1 + 4 = 1000 + 14 Por lo tanto, Dir(R.g) = 1014

  35. A[0] A[1] A[2] A[3] A[4] Aplicación Indexada Caso unidimesional Como resultado de la declaración Var A : array[0 .. 4] of integer; los elementos del arreglo A ocupan localidades consecutivas de memoria

  36. Localidad inicial del bloque completo Localidad relativa del elemento seleccionado dentro del bloque secuencial Aplicación Indexada Dada una representación secuencial, en la selección directa de un elemento intervienen: la dirección base + el desplazamiento a través de una fórmula de acceso

  37. Aplicación Indexada • Ejemplo : Considérese el arreglo en C, char s[10]; • Este arreglo se dispone, secuencialmente en memoria, como s[0], s[1], ..., s[9] • La dirección de s[1] es la dirección base de s más 1 • Para arreglos de char en C, la dirección del i-ésimo elemento es • Dir(s[i]) = l-value(s[0]) + i

  38. s[0] 154: Dirección base = localidad de s[0] 155: s[1] 156: s[2] 157: s[3] 158: s[4] Desplazamiento = i * tamaño del elemento = 5 * 1 = 5 s[5] 159: 160: s[6] Dirección base + desplazamiento = l-valor( s[0] ) + 5 = l-valor( s[5] ) 161: s[7] 162: s[8] 163: s[9] Aplicación Indexada

  39. Descriptor Objeto V[1] V[2] V[3] V[10] Aplicación Indexada Vectores (modalidad Pascal) Var V = Array [1..10] of Real;

  40. Aplicación Indexada Fórmula de acceso La ubicación en RAM del i-ésimo elemento de V, durante ejecución, se determina mediante Dir(V[i]) =  + (i – li)*T Aquí, • li y Tse determinan en tiempo de traducción •  , la dirección base, se determina en tiempo de creación

  41. -2 -1 0 1 2 3 4 5 6 7 8 V: Aplicación Indexada Ejercicio: Con respecto al vector Real • Declararlo en Pascal • Proponer una fórmula para acceder al i-ésimo elemento de V • Determinar la dirección absoluta de V[4], si la dirección base es 1000

  42. Aplicación Indexada a) Type Vector = Array[-2..8] of Real; Var V : Vector; b) Dir(V[i]) =  + (i – li)*T c) Dir(V[4]) = 1000 + ( 4 – -2 )*4 = 1000 + (4 + 2)*4 = 1000 + 6*4 = 1024

  43. 1 2 3 4 5 A: 1 2 3 4 5 6 7 8 9 10 Por filas: 1,1 1,2 1,3 1,4 1,5 2,1 2,2 10,5 ... Por columnas: 1,1 2,1 3,1 4,1 10,1 1,2 2,2 3,2 .. 10,5 ... Aplicación Indexada Caso bidimesional (modalidad Pascal) Var A : Array [1..10, 1..5] of Real; Linealización

  44. Descriptor Objeto A[1,1] A[1,2] A[1,3] A[1,4] A[1,5] A[2,1] A[2,2] A[2,3] : A[10,5] Aplicación Indexada Vectores (modalidad Pascal) Var A = Array [1..10, 1..5] of Real;

  45. Aplicación Indexada Fórmula de acceso La ubicación en RAM del elemento de A[i, j] durante ejecución, se determina mediante Dir(A[i, j]) =  + (i – if)*S + (j– ic)*T conS = (sc–ic + 1)*T Aquí, • if, S y Tse determinan en tiempo de traducción • , la dirección base, se determina en tiempo de creación

  46. 1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 B: Aplicación Indexada Ejercicio: Con respecto a la matriz • Declararlo en Pascal, asumiendo elementos reales • Determinar la dirección absoluta del elemento situado en la tercera columna de la cuarta fila

  47. Aplicación Indexada a) Var B = Array[1..10, 1..5] of Real; b) Dir(B[i, j]) =  + (i – if )*S + (j – ic)*T S = (sc – ic + 1)*T S = (5 – 1 + 1)*4 = 20 Dir(B[4, 3]) =  + ( 4 – 1)*20 + (3 – 1)*4 =  + 3*20 + 2*4 =  + 60 + 8 =  + 68

  48. 4 1 i 1 10 j 1 5 k Aplicación Indexada Caso tridimesional (modalidad Pascal) Var C : Array [1..4, 1..10, 1..5] of Real; Acceso a un elemento C[i, j, k] en un vector de matrices

  49. k j i Var C : Array [1..4,1..10,1..5] of Real; Por planos Por filas Por columnas 4 1 4 1 i i i 1 10 1 10 j j j k k 1 5 1 5 k Aplicación Indexada Linealización

  50. Aplicación Indexada Fórmula de acceso Dir(C[i, j, k]) =  + (i – ip)*R+ (j – if)*S + (k– ic)*T donde • S = (sc–ic + 1)*T • R = (sf–if + 1)*S = (sf–if + 1)* (sc–ic + 1)*T • ip, R, S y Tse determinan en tiempo de traducción • , la dirección base, se determina en tiempo de creación

More Related