Sei sulla pagina 1di 12

Concepts of Programming Languages, 5/e Robert W.

Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Agenda

Tipos de Dados
Tipo de dados:

Para cada tipo

Tipos simples
Tipos primitivos
Tipos ordinais

Tipos estruturados

Definio
representao
operaes
Questes de projeto
Exemplos
Avaliao
Implementao

Concepts of Programming Languages, 5/e


Robert W. Sebesta

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Processamento de Dados
Processar dados consiste basicamente em:
determinar quais so os possveis dados ( ou
entradas);
descrever quais so os possveis resultados ( ou
sadas);
determinar quais so as transformaes ( ou
operaes) que devem ser efetuadas para que um
particular resultado seja uma sada para uma certa
entrada.

Programa: sequencia de transformaes sobre


dados

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipos de dados em LP: Vantagens


O conhecimento dos possveis valores de uma
varivel essencial para o entendimento de um
algoritmo;
Saber quais so as operaes permitidas
possibilita a deteco de vrios erros;
O tradutor (compilador ou interpretador), de posse
destas informaes, pode:
determinar o espao necessrio para as variveis e,
como proceder para a implementao das operaes
e tratamento de excees

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipos de dados em LP: Para que servem?


Um tipo de dados determina a classe de valores
que podem ser:
armazenados em uma varivel;
passados como parmetro;
resultantes de uma expresso.

A informao de tipo em uma linguagem de


programao usada para:
prevenir ou detectar construes incorretas em um
programa;
determinar os mtodos de representao e de
manipulao de dados no computador.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Sistema de Tipos
Um sistema de tipos consiste basicamente de:
um mecanismo para definio de tipos de dados
atravs de construes da linguagem de
programao, tais como constantes, variveis e
parmetros;
um conjunto de regras para determinar a
equivalncia de tipos, a compatibilidade de tipos e a
inferncia de tipos, para fins de verificao da
validade do uso de tipos em expresses, atribuies
e parmetros.
Existem linguagens de programao que no usam um sistema
de tipos, sendo conhecidas como linguagens no-tipadas.
Exemplo: LISP e Perl.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Linguagens de Programao:
hierarquia de componentes
Tipos de Dados

representao e operaes

Expresses

obteno de valores
fluxo de controle

Comandos
ambientes: abstraes
de valores e comandos

Unidades
Programas

unidade de execuo

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipos de dados em LP: para que servem?


Um tipo de dados determina uma classe de
valores que podem ser:
armazenados em uma varivel;
passados como parmetro;
resultantes de uma expresso.

A informao de tipo em uma linguagem de


programao usada para:
prevenir ou detectar construes incorretas em um
programa
determinar os mtodos de representao e manipulao
de dados no computador.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Domnios de Valores

Evoluo

Domnios so usados para indicar conjuntos de


valores:
Domnio dos inteiros;
Domnio dos naturais;
Domnio dos complexos.
impossibilidade de representar objetos infinitos;
computadores usam diferentes formas de representao
interna.

Soluo: padronizao da representao e dos


descritores de dados (metadados)

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

dados estruturados como listas

ALGOL68
tipos definidos pelo usurio

ADA (1983)
tipos definidos pelo usurio e tipificao forte

Domnios de Valores
Domnios so usados para indicar conjuntos
de valores

primitivos:
- integer - real
- char
- boolean

enumerao

dados estruturados como registros

LISP

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipos de dados

simples

conceitos de tipos de dados simples (inteiros, reais) e


estruturados (arrays)

COBOL

Problemas de representao em computadores:

Como
representar?

FORTRAN (1957)

Como
compatibilizar?

Domnio dos inteiros;


Domnio dos naturais;
Domnio dos complexos.

restrio

TIPOS

Problemas de representao em
computadores:

registro

estruturados

array
set
union

pointer

impossibilidade de representar objetos infinitos;


computadores usam diferentes formas de
representao interna.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipos Primitivos em LP

Tipos de Dados e Domnios

So tipos atmicos, indivisveis, no definidos


com base em outros tipos de dados.
Geralmente refletem a estrutura de hardware,
podendo ser mapeados diretamente;
Associados a um nome, a um conjunto finito de
valores e a um conjunto pr-definido de operaes;
Elementos de primeira ordem na maioria das LP:
usados como resultado de operaes, em e/s, em
atribuio, como parmetros, como valor de
retorno.

Um domnio representa um conjunto (infinito) de


valores
Um tipo de dados em LP

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

possui uma representao finita, dependendo


da declarao do tipo: int, shortint, longint
da implementao da LP: tipo char,
representao ASCII
associado a um conjunto de operaes para
manipular seus valores;
prov abstrao em relao a sua representao
interna

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Domnios simples: base para representao


de tipos primitivos
Domnios simples:
primitivos: no necessitam de definio explcita
Exemplo: domnio dos nmeros reais
definidos: seus componentes (ordinais) devem ser
especificados por:
enumerao: cria novo domnio
domnio estao = ( primavera, vero, outono, inverno)

restrio: especifica um subdomnio

Tipos primitivos
Tipos de dados no definidos em termos de
outros tipos;
Costumam ser definidos na implementao da LP
Sofrem influncia direta do hardware

So utilizados por quase todas as


linguagens de programao

domnio mandato = 2000..2005

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipos primitivos
So tipos atmicos, indivisveis, no definidos
com base em outros tipos de dados;
Associados a um nome, a um domnio simples e a
um conjunto pr-definido de operaes;
Elementos de primeira ordem na maioria das LP:
usados como resultado de operaes, em e/s,
em atribuio, como parmetros, como valor de
retorno

Tipos primitivos
1. Trabalho de casa - Pesquisar no
Google/Bing/Yahoo os tipos de dados:

Integer
Floating-point
Boolean
Character

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Cadeia de Caracteres ou String


O valor usualmente uma sequncia de
caracteres;
Apesar de usualmente no ser um tipo primitivo,
considerado um tipo bsico no projeto de
linguagens;
Operaes comuns:
Extrao de parte da cadeia, Concatenao,
Clculo do tamanho, Busca e/ou substituio de
parte da cadeia, Comparao, etc.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Cadeia de Caracteres ou String


Quanto ao tamanho das cadeias, definido no
projeto da linguagem, podemos ter:
Tamanho esttico: o tamanho da cadeia no se
modifica ao longo da execuo do programa. Ex:
Fortran 90, COBOL, Pascal, Java e Ada, ..
Tamanho dinmico limitado: tamanho varivel
at um mximo especificado. Ex:C, C++, ..
Tamanho dinmico: aumento/diminuio das
cadeias ilimitado. Ex: SNOBOL, JavaScript, Perl, ..

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Cadeia de Caracteres ou String


Uma outra operao comum em cadeias a busca
por padres;
A linguagem SNOBOL foi precursora nesse tipo de
operao;
Uma outra linguagem importante nesse aspecto a
linguagem Perl;
Nela foram incorporados recursos, os quais so
comumente chamados expresses regulares;
Exemplo definio de regras para identificadores:
/[A-Za-z][A-Za-z\d]+/

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Cadeia de Caracteres ou String


Quanto implementao, tanto a manipulao de
cadeias de tamanho esttico quanto as de tamanho
dinmico limitado, no requerem cuidados
especiais;
A manipulao de cadeias de tamanho dinmico
exige cuidado especial!
Duas abordagens comuns de manipulao:
Usando listas encadeadas;
Usando clulas de armazenagem adjacentes.

Vantagens e desvantagens dessas tcnicas?

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipos primitivos

Subdividem-se em:

Tipos Embutidos ou Pr-Definidos


Tipos Numricos

Inteiro, Ponto-Flutuante e Decimal

Tipo Booleano
Tipo Caractere
Tipos Ordinais Definidos pelos Usurios
Tipo Enumerao
Tipo Intervalo (Subfaixa)

Tipos definidos pelo usurio


Mnemnicos associados a tipos existentes
Sinonmia: no criam novos tipos de dados; apenas usam
identificadores simblicos.

Composio: podem ser combinados com outros tipos de


dados.

Permitem restries / enumeraes


Objetivo principal: legibilidade

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Inteiro
suportado diretamente pelo hardware;
Corresponde a um intervalo do conjunto dos nmeros inteiros.
So caracterizados como tipos inteiros, os dados numricos
positivos ou negativos;
Excluindo-se destes qualquer nmero fracionrio. Como
exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1024
entre outros.
Vrios tipos inteiros numa mesma LP:
Normalmente, intervalos so definidos na implementao do
compilador
Em JAVA, o intervalo de cada tipo inteiro estabelecido na
definio da prpria LP:
Portabilidade

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Inteiro
A representao do tipo inteiro na linguagem
pode diferir da representao na mquina.
Representao nas Linguagens:
Pascal
C
Object Pascal
Java

Integer
int
Integer
int

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Inteiro
As linguagens pode apresentar diferentes
representaes para o tipo de dados inteiro.
Exemplo Pascal:
Byte

1 byte

Tipo Inteiro
Exemplo - Java:
Tipo Tamanho(bits)

Intervalo
-128 a 127

byte

0 a 255

short

16

int

32

long

64

Shortint

1 byte

-128 a 127

Word

2 bytes

0 a 65535

Integer

2 bytes

-32768 a 32767

Longint

4 bytes

-2147483648 a 2147483647

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Real ou Ponto-Flutuante IEEE754


Modelam representaes aproximadas dos
nmeros reais;
So caracterizados como tipos reais, os dados numricos
positivos e negativos e nmeros fracionrios.
Como exemplo deste tipo de dado, tem-se os valores:
35.0; 35; 0; -56; 1.2; -45.987 entre outros.

2 bytes
4 bytes
4 bytes
4 bytes

-32.768 a 32.767
-2.147.483.648 a 2.147.483.647
-9223372036854775808 9223372036854775807

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Ponto-Flutuante IEEE754


LPs normalmente incluem dois tipos de ponto
flutuante: float e double
Padro IEEE 754
 Preciso simples (32 bits: 1 - 8 - 23)
 Preciso dupla (64 bits: 1 - 11- 52)

Representao: N = f x be
f : frao, onde 0,1 |f| < 1
b : base
e : expoente, inteiro positivo ou negativo.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Ponto-Flutuante IEEE754


LPs normalmente incluem dois tipos de ponto
flutuante: float e double
Padro IEEE 754
 Preciso simples (32 bits: 1 - 8 - 23)
 Preciso dupla (64 bits: 1 - 11- 52)

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Ponto-Flutuante IEEE754

Vantagem:
Permite representao de nmeros reais
com um grande nmero de casas
decimais.

Desvantagem:
Perda de exatido nas operaes
aritmticas.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Lgico ou Booleano


So caracterizados como tipos lgicos os
dados com valor verdadeiro (True) e falso
(False), sendo que este tipo de dado poder
representar apenas um desses dois valores;
Tambm chamado por alguns de tipo
booleano, devido contribuio do filsofo e
matemtico ingls George Boole na rea da
lgica matemtica.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Lgico ou Booleano


Tipo mais simples:
Possui apenas dois valores: True, False;

Representao:
So armazenados na menor clula de memria
enderevel: 1 byte;

Pascal, C++, Java, Object Pascal;


C no possui tipo booleano, mas qualquer
expresso numrica pode ser usada como
condicional.
Valores zero verdadeiro
Valores = zero falso

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Caractere
Armazenados como cdigos numricos;
Representaes:
EBCDIC
ASCII (American Standard Code for Information
Interchange)
1 byte, 7 bits, 128 caracteres.

Unicode:
 2 bytes, 16 bits, 65536 caracteres.
 Internacionalizao
 Exemplo: Java

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Caractere
PASCAL e MODULA 2 oferecem o tipo
char;
Em C, o tipo primitivo char classificado
como um tipo inteiro:
char d;
char *p, *q;
d = 'a' + 3;

while (*p) *q++ = *p++;

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Enumerao

Tipos definidos pelo usurio: ordinais


Definidos por associao ao um domnio de
inteiros positivos
Restrio: subsequncia de um tipo
Exemplo de restrio em Pascal:
maisculas= A.. Z;
dias= 1..31;

Enumerao: descrio dos elementos


Exemplo de enumerao em C/C++:
enum
estacoes {primavera, vero, outono, inverno}

Cada valor enumerado torna-se uma constante


simblica;
Cada elemento listado equivale a um valor inteiro,
de acordo com sua posio, iniciando por 0 (zero)
Representao:
1 Byte
256 elementos por enumerando
Podem ser usados para indexar vetores e para contadores de
repeties
Aumentam a legibilidade e confiabilidade do cdigo

Exemplo:
dom = 0; seg = 1; ter = 2; ... ; sex = 5;

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Enumerao
Tipo de dados cujo conjunto de todos os
seus possveis valores so enumerados no
instante de sua definio.
PASCAL, ADA, C e C++

Java no inclui o tipo enumerado do C e C++


Exemplos:
type semana = (dom, seg, ter, qua, qui, sex, sab);
enum mes_letivo {mar, abr, mai, jun, ago, set, out, nov};
enum mes_letivo m1, m2;

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo Enumerao
Como j vimos, define uma faixa de valores, a qual
usualmente associada a um conjunto de inteiros:
Ex (ADA): type DIAS is {Seg, Ter, Qua, Qui, Sex};

Uma questo de projeto quanto a ocorrncia de


um valor em mais de uma enumerao (literal
sobrecarregado), Ex.:
type LETRAS is {'A', 'B', 'C', ........... 'Z}
type VOGAIS is {'A', 'E', 'I', 'O', 'U}

As linguagens normalmente probem estas


ocorrncias, ou foram uma diferenciao explcita.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipos definidos por restrio


Os tipos definidos por restrio so:
considerados subtipos de um tipo base T;
teis para aumentar a legibilidade e podem contribuir
para a confiabilidade ou eficincia de programas.

Exemplo em Pascal

existe verificao de tipos?

sab =8;

type
natural = 0 .. maxint;
var
i : integer;
s : shortint;
n : natural;
..... n := i ;

Colees
Algumas possibilidades de implementao:
Esttica: Alocada antes da execuo e com tamanho
bem definido (Fortran 77);
Fixa e Dinmica na Pilha: Alocao feita durante a a
execuo, mas tambm com um tamanho j definido
(Pascal e C);
Dinmica na Pilha: Mesmo que o anterior, mas com o
tamanho sendo definido durante a execuo (Fortran 90);
Dinmica no Heap: Totalmente flexvel, podendo ser
alocada a qualquer momento e tendo seu tamanho
modificado ao longo da execuo (C, C++, ...)

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Colees
Permite a manipulao de conjunto de valores;
A linguagem pode permitir o acesso por ndices ou
de forma iterativa, como numa lista encadeada;

Domnios compostos
Os domnios compostos resultam de aplicao de
mtodos para construir novos domnios com base em
domnios j existentes

Colees com acesso por ndice:


Vetores, Matrizes, etc

Colees acessadas de forma iterativa:


Listas, Pilhas, Filas, Mapas, Conjuntos, etc

H linguagens que oferecem tipos mistos:


por exemplo: Java,

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Construo de novos domnios


1. produto cartesiano: faz o produto de T domnios e
fornece tuplas ordenadas.
2. mapeamento finito: aplica uma funo no domnio A, para
obter um valor de um domnio B.
3. seqncia : permite construir as sequencias finitas
<a1,a2,..an>, formadas por objetos do domnio A.
4. unio : faz uma unio de domnios A e B, criando
alternativas.
5. conjunto potncia: permite a gerao de subconjuntos de
valores, a partir de um conjunto que definido como o
domnio do tipo.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Mtodos X Tipos Estruturados

domnio
simples

mtodo

domnio
composto

Estes domnios compostos constituiro os tipos de dados


estruturados disponveis nas linguagens de programao:
homogneos e heterogneos

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipos estruturados
So tipos compostos a partir de outros tipos de
dados:
homogneos: todos os componentes pertencem ao
mesmo tipo. Ex.: array
heterogneos: os componentes podem ser de tipos
de dados diferentes. Ex.: struct, union

Operaes sobre elementos;


Operaes mais restritas sobre o conjunto.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Exemplo em Pascal
Enumerao, registro variante

{ declarao de tipo }
type Forma = (circulo, retangulo ) ;
FiguraG = record
x,y:real;
case forma_figura: Forma of
circulo:(raio:real);
retangulo:(altura,largura:real);
end;

{ instanciao }
var figura: FiguraG;
{ referncia }
begin
{...}
figura.x:=1;
figura.y:=2;
figuras.forma_figura:=circulo;

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Produto cartesiano
O produto cartesiano de n domnios A1, A2,,
An, denotado por A1 x A2 x. x An, fornece
conjuntos de tuplas ordenadas (a1, a2,, an),
onde cada ak, pertence a Ak
inteiro
X
real
Exemplo:
Sendo A: inteiro e B: real
o produto cartesiano AxB fornece uma dupla (a , b),
sendo que a pertence ao domnio A e b pertence ao
domnio B
representvel pela dupla (inteiro, real)

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Figure 6.8
Descritor de registro em tempo de compilao

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Produto cartesiano: registro


Exemplo de associao de nomes de campos a
uma dupla (inteiro , real):
pessoa
pessoa ( idade : inteiro , peso : real )

idade

Instanciao: pessoa
referncia: pessoa.idade , pessoa.peso

peso

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Mapeamento finito

b = m(a)

Seja m uma funo de mapeamento e sejam A


e B domnios
Aplicando a funo m em um elemento a do
domnio A obtm-se o valor b do contra-domnio
B correspondente, representado por b = m(a).
Exemplo: Seja A = {1, 2} e B = {V, F}.
A partir de um valor do domnio A, aplica-se o
mapeamento e obtm-se um valor do domnio B.
Os possveis valores resultantes do mapeamento
so:
V= m(1) V= m(2) ou
V= m(1) F= m(2) ou
F= m(1) V= m(2) ou
F= m(1) F= m(2)

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Mapeamento finito: array

Representar um tipo de dado correspondente ao modelo de


construo: S T = { m | x S m(x) T} sendo
S = { verde, vermelho, azul}, T = {true, false}
Exemplo em Pascal: type
T = boolean;
S = ( verde, vermelho, azul);
VetorCor = array [S] of T;
var { instanciao }
Cor : VetorCor;
begin { referncia }
{...}
Cor [verde] := true;
{...}
end.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Questes de projeto
i. quais os tipos permitidos para ndices?
ii. quando feita a amarrao de valores aos
limites do array?
iii. quando feita a alocao do array?
iv. quantas dimenses so permitidas?
v. pode-se inicializar um array?
vi. so permitidos slices?

true/false true/false true/false

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Figure 6.4

Figure 6.5

Slices em FORTRAN 90

Descritor de array em tempo de compilao (single-dimensioned arrays)

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Figure 6.7

Unio (discriminada)

A compile-time descriptor for a multi-dimensional array

Constri novos domnios a partir da unio de outros


domnios, fornecendo alternativas.
Este modelo de construo corresponde ao tipo union
em C e registro variante em Pascal.

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Unio: registro variante em Pascal


type
Forma =(circulo, retangulo);
FiguraG = Record
x,y: real;
case forma_figura: Forma of
circulo:(diametro: real);
retangulo:(altura, largura: real);
end;
var { instanciao }
figura: FiguraG;
begin { referncia }
figura.x:=1;
figura.y:=2;
figura.forma_figura := circulo;
figura. diametro := 2.5;
...
end;

Unions
Ada - unio discriminada

real

real

real

real

real

real

Reasons they are safer than Pascal:


a. Tag must be present
b. It is impossible for the user to create an
inconsistent union (because tag cannot be
assigned by itself--All assignments to the union
must include the tag value, because they are
aggregate values)
real

10

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Unions
C e C++ - free unions (sem tags)
Not part of their records
No type checking of references

Questes
i. h verificao de tipos? Quando?
ii. qual a forma do tipo unio (em registro?)?

Java no possui registros nem unions


Avaliao
potentially unsafe in most languages (not Ada)

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Conjunto potncia
Um conjunto um tipo cujas variveis podem
armazenar colees no-ordenadas de valores
distintos de algum tipo ordinal
Sendo S um domnio, o conjunto de todos os
subconjuntos dos valores de S denominado
de conjunto potncia de S
Exemplo:
Sendo S = {ch, caf}, o conjunto de todos os
subconjuntos de S seria: { { }, {ch}, {caf}, {ch,
caf} }

A ordem dos elementos no define novos


subconjuntos:

SET: exemplo em Pascal


type
ingredientes = (morango, banana, napolitano,
chocolate, nata, cobertura);
sorvete = set of ingredientes;
var
sundae, casquinha : sorvete;
begin {referncias e operaes }
casquinha:= [morango, cobertura];
sundae:= casquinha + [banana, chocolate];
sundae:= sundae - [chocolate];

...

o subconjunto {ch, caf} equivale a {caf, ch}

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Questes
i. Quais os tipos base permitidos?
ii. Qual o nmero mximo de elementos do tipo
base?

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Seqncia
A seqncia define um domnio cujos objetos
so seqncias de tamanho indeterminado
Uma seqncia consiste de ocorrncias de
elementos em ordem arbitrria, permitindo
repeties.
Exemplo : Verbo = seq < 's', 'e' , 'r' , 'i', 'a' >
Seletor de objeto : primeiro(verbo), ultimo(verbo), ...

Aplicaes: strings, arquivos

11

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo "Cadeia de caracteres"


(Character) Strings
Tipo de dados em que os valores consistem em
sequncias de caracteres
Questes de projeto
Comprimento esttico ou dinmico?
Tipo primitivo ou variao do tipo array?

Avaliao

Strings
C, C++
Not primitive
Use char arrays and a library of functions that
provide operations

SNOBOL4 (a string manipulation language)


Primitive
Many operations, including elaborate pattern
matching

Melhora redigibilidade

Concepts of Programming Languages, 5/e Robert W. Sebesta 2002 Addison Wesley

Tipo String
Implementao

Figure 6.2

Figure 6.3

Compile-time descriptor
for static strings

Run-time descriptor for limited


dynamic strings

12

Potrebbero piacerti anche