3. tipos de datos

Post on 31-Dec-2015

63 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

1

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

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

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

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

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

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

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

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

10

Modelos de Definición deTipos Estructurados 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

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

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

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

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

16

Unión Discriminada

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

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

End;Var rv : RegVar;

Ejemplo

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

18

Unión

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

char v2;} var;

} regvar;regvar rv;

Ejemplo

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

20

Modelos de Construcción deTipos 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 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

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

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

24

Componente

Componente

Componente

Componente

Componente

.

.

.

Descriptor

Componente

Componente

Componente

......

Representación Secuencial

enlace

Tipos Estructurados

Representación Enlazada

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

26

Modelos de Representación deTipos Estructurados de Datos

27

Pascal

Var R : Recorda : integer;

b : real; End;

C

struct { int a; float b;}R ;

Producto Cartesiano

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

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

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

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

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++

33

b) Fórmula de acceso:

Dir(R.Si) = + tk

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

k=1

i-1

Producto Cartesiano

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

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

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

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

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

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

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

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

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

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)

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;

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

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

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

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)

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

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

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;

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

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

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

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

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

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

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

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

top related