3. tipos de datos

59
1 3. TIPOS DE DATOS

Upload: dillon-hooper

Post on 31-Dec-2015

62 views

Category:

Documents


0 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 3. TIPOS DE DATOS

1

3. TIPOS DE DATOS

Page 2: 3. TIPOS DE DATOS

2

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

Conceptos básicos

Page 3: 3. TIPOS DE DATOS

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

Page 4: 3. TIPOS DE DATOS

4

Ejemplo en PascalProgram 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;

BeginX := Y;Rutina(Y);

End.

Error!! según equivalencia nominalCorrecto según equivalencia

estructural

Equivalencia

Page 5: 3. TIPOS DE DATOS

5

Ejemplo en Cfloat 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 casting coerción

z = 5.0/4 = 5.0/4.0 z = 1.25 casting coerción

Conversión

Page 6: 3. TIPOS DE DATOS

6

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

Comprobación de tipos

Page 7: 3. TIPOS DE DATOS

7

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

Comprobación estática

Page 8: 3. TIPOS DE DATOS

8

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

Comprobación dinámica

Page 9: 3. TIPOS DE DATOS

9

Para la sentencia en Cx = 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 +

Comprobación de tipos

En PascalType 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

Page 10: 3. TIPOS DE DATOS

10

Modelos de Definición deTipos Estructurados de Datos

Page 11: 3. TIPOS DE DATOS

11

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 cartesiano Z X R

Producto Cartesiano

Page 12: 3. TIPOS DE DATOS

12

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

Aplicación Indexada

f :

D I

Page 13: 3. TIPOS DE DATOS

13

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

Aplicación Indexada

Page 14: 3. TIPOS DE DATOS

14

Estrategia EstáticaEn C, int v[5]; declara un arreglo de tamaño 5

Estrategia SemidinámicaEn Algol, [m : n] int a; declara un arreglo de tamaño

conforme a los valores actuales de m y n

Estrategia DinámicaEn 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]

Aplicación Indexada

Page 15: 3. TIPOS DE DATOS

15

Unión Discriminada

Modo PascalEs 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

Page 16: 3. TIPOS DE DATOS

16

Unión Discriminada

Type RegVar = Recordf1 : Integer;f2 : Real;case variable : Boolean

ofTrue : (v1 : Real);False : (v2 : Char);

End;Var rv : RegVar;

Ejemplo

Page 17: 3. TIPOS DE DATOS

17

Unión

Modo CUna union se caracteriza por

Ser, sintácticamente, un producto cartesiano Declararse como un conjunto de campos variantes Ser, semánticamente, una estructura variable Disponer, durante ejecución, de tan sólo uno de los

campos variantesEn C, un registro con variantes se simula mediante una struct:

Cuyo último campo es una union Cuyo penúltimo campo se utiliza como discriminante

Page 18: 3. TIPOS DE DATOS

18

Unión

typedef struct {int f1;float f2;int variable;union { float v1;

char v2;} var;

} regvar;regvar rv;

Ejemplo

Page 19: 3. TIPOS DE DATOS

19

Conjunto Potencia

Modo PascalUn 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

Page 20: 3. TIPOS DE DATOS

20

Modelos de Construcción deTipos Estructurados de Datos

Page 21: 3. TIPOS 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 memoriaLos traductores de lenguajes operan con tales modelos con el propósito de satisfacer abstracciones de alto nivelUn modelo de construcción está formado por un descriptor y un modelo de representación

Page 22: 3. TIPOS DE DATOS

22

Modelos de Construcción

El descriptor es un conjunto de atributos del objetoEl modelo de representación corresponde a la forma física que adoptará el objeto en RAMComo la RAM es lineal, todo objeto adopta la forma física unidimensionalLuego, se debe proveer una funcionalidad que convierta acciones de alto nivel en acciones sobre la representaciónUna 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

Page 23: 3. TIPOS DE DATOS

23

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

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

Page 24: 3. TIPOS DE DATOS

24

Componente

Componente

Componente

Componente

Componente

.

.

.

Descriptor

Componente

Componente

Componente

......

Representación Secuencial

enlace

Tipos Estructurados

Representación Enlazada

Page 25: 3. TIPOS DE DATOS

25

Representación Secuencial: • Se usa para estructuras de tamaño fijo• Ocasionalmente en estructuras homogéneas de

tamaño variableEjemplo : registros, vectores, strings, etc.

Representación Enlazada:• Se usa para estructuras de tamaño variableEjemplo : listas enlazadas

Tipos Estructurados

Page 26: 3. TIPOS DE DATOS

26

Modelos de Representación deTipos Estructurados de Datos

Page 27: 3. TIPOS DE DATOS

27

Pascal

Var R : Recorda : integer;

b : real; End;

C

struct { int a; float b;}R ;

Producto Cartesiano

Page 28: 3. TIPOS DE DATOS

28

Descriptor

Objeto : a

b

Nombre R

Constructor record

Selector 1 a

Tipo Selector 1 int

Tamaño Selector 1 t1

Dirección relativa Selector 1 K1 = 0

Selector 2 b

Tipo Selector 2 float

Tamaño Selector 2 t2

Dirección relativa Selector 2 K2

Dirección Base

Producto Cartesiano

Page 29: 3. TIPOS DE DATOS

29

1

1

).(i

kki tSRDir

donde es la dirección base de R, resuelta

en tiempo de creación, y tk el tamaño del k-ésimo selector

:

Objeto

Producto Cartesiano

Fórmula de acceso

Dirección absoluta de memoria donde se encuentra el i-ésimo selector del registro R

Page 30: 3. TIPOS DE DATOS

30

Sin embargo, la expresión

se resuelve en tiempo de traducción. Luego,

con

y = 0, constantes

i - 1

tkk = 1

ii kSRDir ).(

i - 1

tkk = 1

=

ik 1k

Producto Cartesiano

Page 31: 3. TIPOS DE DATOS

31

a) Declararla en C++b) Establecer una fómula de acceso a una componente del registro

Rc) Aplicar la fórmula para determinar la dirección absoluta del

campo g del registro R, si la dirección base es 1000

a b c d e f g h j

int

float

char

int

boolean float

float

puntero

int

R:

Ejercicio: Dada la estructura

Producto Cartesiano

Page 32: 3. TIPOS DE DATOS

32

typedef float *puntero;struct Registro{ int a, d, j;

float b, f, g;char c ;bool e ;puntero h;

} ;Registro R;

Producto Cartesiano

a) Declaración en C++

Page 33: 3. TIPOS DE DATOS

33

b) Fórmula de acceso:

Dir(R.Si) = + tk

Dir(R.Si) = + (t1 + … + ti-1)

k=1

i-1

Producto Cartesiano

Page 34: 3. TIPOS DE DATOS

34

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

Producto Cartesiano

c) Aplicación de la fórmula de acceso:a b c d e f g h j

Page 35: 3. TIPOS DE DATOS

35

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

A[0] A[1] A[2] A[3] A[4]

Aplicación Indexada

Page 36: 3. TIPOS DE DATOS

36

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

Localidad relativa del elemento seleccionado

dentro del bloque secuencial

Localidad inicial del bloque completo

Aplicación Indexada

Page 37: 3. TIPOS DE DATOS

37

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

Aplicación Indexada

Page 38: 3. TIPOS DE DATOS

38

Dirección base = localidad de s[0]

Desplazamiento = i * tamaño del elemento

= 5 * 1 = 5Dirección base + desplazamiento

= l-valor( s[0] ) + 5

= l-valor( s[5] )

154:

155:

156:

157:

158:

159:

160:

161:

162:

163:

s[5]

s[0]s[1]s[2]s[3]s[4]

s[6]s[7]s[8]s[9]

Aplicación Indexada

Page 39: 3. TIPOS DE DATOS

39

Vectores (modalidad Pascal)Var V = Array [1..10] of Real;

: V[1]

V[2]V[3]

V[10]

ObjetoDescriptor

Nombre V

Constructor Array

Tipo Elemento Real

Tamaño Elem T

Dimensiones 1

Tipo índice IntegerLímite inf (li) 1Límite sup (ls) 10

Dir Base

Aplicación Indexada

Page 40: 3. TIPOS DE DATOS

40

Fórmula de accesoLa 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 T se determinan en tiempo de traducción

, la dirección base, se determina en tiempo de creación

Aplicación Indexada

Page 41: 3. TIPOS DE DATOS

41

a) Declararlo en Pascal

b) Proponer una fórmula para acceder al i-ésimo elemento de V

c) Determinar la dirección absoluta de V[4], si la dirección base es 1000

-2 -1 0 1 2 3 4 5 6 7 8

V:

Real

Aplicación Indexada

Ejercicio: Con respecto al vector

Page 42: 3. TIPOS DE DATOS

42

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

Aplicación Indexada

Page 43: 3. TIPOS DE DATOS

43

Var A : Array [1..10, 1..5] of Real;

A: 1 2 3 4 5 1

2

3

4

5

6

7

8

9

10

Linealización

1,1 2,1 3,1 4,1 10,1 1,2 2,2 3,2 .. 10,5 ...

Por columnas:

...1,1 1,2 1,3 1,4 1,5 2,1 2,2 10,5

Por filas:

Aplicación Indexada

Caso bidimesional (modalidad Pascal)

Page 44: 3. TIPOS DE DATOS

44

A[1,1]A[1,2]A[1,3]

A[10,5]

b :

Objeto

A[1,4]A[1,5]A[2,1]A[2,2]A[2,3] :

Nombre AConstructor Array

Tipo Elemento Real

Tamaño Elem T

Dimensiones 2

Tipo índice IntegerLímite inf. fila (if) 1Límite sup. fila (sf) 10Límite inf. col (ic) 1Límite sup. col (sc) 5

Dir Base b

Descriptor

Aplicación Indexada

Vectores (modalidad Pascal)Var A = Array [1..10, 1..5] of Real;

Page 45: 3. TIPOS DE DATOS

45

Fórmula de accesoLa ubicación en RAM del elemento de A[i, j] durante ejecución, se determina mediante

Dir(A[i, j]) = b + (i – if)*S + (j – ic)*T con S = (sc – ic + 1)*T

Aquí, if, S y T se determinan en tiempo de traducción b, la dirección base, se determina en tiempo de

creación

Aplicación Indexada

Page 46: 3. TIPOS DE DATOS

46

1

2

3

4

5

6

7

8

9

10

B:

1 2 3 4 5

Aplicación Indexada

Ejercicio: Con respecto a la matriz

a) Declararlo en Pascal, asumiendo elementos reales

b) Determinar la dirección absoluta del elemento situado en la tercera columna de la cuarta fila

Page 47: 3. TIPOS DE DATOS

47

Aplicación Indexada

a) Var B = Array[1..10, 1..5] of Real;

b) Dir(B[i, j]) = b + (i – if )*S + (j – ic)*T S = (sc – ic + 1)*T S = (5 – 1 + 1)*4 = 20

Dir(B[4, 3]) = b + ( 4 – 1)*20 + (3 – 1)*4= b + 3*20 + 2*4

= b + 60 + 8 = b + 68

Page 48: 3. TIPOS DE DATOS

48

Var C : Array [1..4, 1..10, 1..5] of Real;

41

1

10

1 5

j

k

i

Acceso a un elemento C[i, j, k] en un vector de

matrices

Aplicación Indexada

Caso tridimesional (modalidad Pascal)

Page 49: 3. TIPOS DE DATOS

49

Por planos

1 5

k

1

10

j

i

Por filas

j

41i

1 5

k

Por columnas

1

10

j

41i

k

Var C : Array [1..4,1..10,1..5] of Real;

i j k

Aplicación Indexada

Linealización

Page 50: 3. TIPOS DE DATOS

50

Fórmula de accesoDir(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 T se determinan en tiempo de

traducción , la dirección base, se determina en tiempo de

creación

Aplicación Indexada

Page 51: 3. TIPOS DE DATOS

51

Consta de:

Un descriptor y

Espacio en RAM calculado según el tamaño de la mayor variante definida

Variante 1:

a b c

T

Variante 2:

a b d eF

Unión Discriminada

Registro con variantes (modalidad Pascal)Var Z = Record

a : integer;case b : boolean of

True: (c : integer);False: (d : integer; e : real);

End;

Page 52: 3. TIPOS DE DATOS

52

Unión Discriminada

True Falsed g

Tabla de selección

de variantes b d

Selector 3 cTipo S3 IntegerTamaño S3 T3Dir relativa S3 K3

g Selector 3 dTipo S3 IntegerTamaño S3 T3Dir relativa S3 K3Selector 4 eTipo S4 IntegerTamaño S4 T4Dir relativa S4 K4

DescriptorNombre ZConstructor UniónSelector 1 aTipo S1 IntegerTamaño S1 T1Dir relativa S1 K1=0Selector 2 bTipo S2 IntegerTamaño S2 T2Dir relativa S2 K2Dir tabla de selección b

Dir Base

Objeto

Page 53: 3. TIPOS DE DATOS

53

Fórmula de accesoLa ubicación en RAM al i-ésimo selector, durante ejecución, se determina mediante

1i

1kki Tj)Ord(i)Dir(Z.S

1-i

1jkkj

j

1kk T*True)Ord(Z.ST *j)Ord(i

1-i

1jkkj

j

1kk T*True)Ord(Z.ST *j)Ord(i

1-i

1jkkj T*False)Ord(Z.S

1-i

1jkkj T*False)Ord(Z.S

Ord(False) = 0

Ord(True) = 1

Selector discriminante

Unión Discriminada

Page 54: 3. TIPOS DE DATOS

54

Ejercicio: Con respecto a la multilista

a) Declararla en Pascal y C

b) Determinar la dirección absoluta del tercer selector

Unión Discriminada

L

1 4

32

átomo next link

info

L

1 4

32

L

1 4

32

L

1 44

3322

átomo next link

info

Page 55: 3. TIPOS DE DATOS

55

a) Type Base = Integer;

Enlace = ^Nodo;Nodo = Record

link :Enlace; case atomo : Boolean

of True : (info : Base;) False : (next :

Enlace;) End;

Var L : Enlace;

Unión Discriminada

Page 56: 3. TIPOS DE DATOS

56

typedef int base;typedef struct Nodo{ Nodo *link; int atomo; union { base info; Nodo *next; } X;} *Enlace;Enlace L;

Unión Discriminada

Selector 1Selector 2

Selector 3

link atomo X

Page 57: 3. TIPOS DE DATOS

57

b) j=2 Dir(LS3) = + Ord(3 2)*Ti

+ Ord(3 >2)*(T1 + T2) + Ord(Z.S2 = True)*(T3) + Ord(Z.S2 = False)*(T3)

= + Ord(True)*(T1 + T2) + Ord(True)*(T3)

= + 1*(T1 + T2) + 1*T3

= + T1 + T2 + T3

Unión Discriminada

Page 58: 3. TIPOS DE DATOS

58

La representación interna de un conjunto potencia está restringida a los conjuntos definidos por extensión y se sustenta en la estructura conocida como string de bitsSi T es el tipo base, P es el conjunto potencia sobre T y C es una variable de tipo P, entonces C se representa mediante un string de n bits, con n = #(T)En C, el i-ésimo bit en

1 indica presencia 0 indica ausencia

del i-ésimo valor de tipo T en C

Conjunto Potencia

Page 59: 3. TIPOS DE DATOS

59

EjemploSi T = {a, b, c}, entonces la representación de

las variables P = {a, c}, Q = {b, c} y R = P Q = {c}

esPQR

Conjunto Potencia

1 0 1

0 1 1

0 0 1