• Nenhum resultado encontrado

06-03ParLingProg(ValoreseTipos)

N/A
N/A
Protected

Academic year: 2021

Share "06-03ParLingProg(ValoreseTipos)"

Copied!
8
0
0

Texto

(1)

Paradigmas de

Linguagens de Programação

Valores e Tipos

(Values and Types)‏

Rodrigo Rocha

[email protected] http://cin.ufpe.br/~rgcr

Universidade Federal da Paraíba – Campus IV (Rio Tinto – PB)‏

PLP – Valores e Tipos

00 - 30

Um valor é qualquer entidade que pode ser manipulada por

um programa.

 Valores podem ser:

Avaliados; Armazenados;

Passados como parâmetros;

Retornados como resultado de funções; Etc.

PLP – Valores e Tipos

00 - 30

 Diferentes Linguangens suportam diferentes tipos de valores:

C suporta inteiros, numeros reais, estruturas, arrays, uniões,

ponteiros de variáveis e ponteiros de funções;

C++ os valores de C e mais objetos;

Java suporta booleanos, inteiros, reais, arrays, objetos; Ada suporta booleanos, caracteres, enumeração, inteiros,

reais,

PLP – Valores e Tipos

O que é um tipo?

a resposta mais óbvia, talvez, é que um tipo é um conjunto de

valores.

Um tipo é um conjunto de valores que exibem um comportamento

uniforme sob operações que podem ser realizadas sobre estes valores.

{15, true, azul} é um tipo?

PLP – Valores e Tipos

Classificação de Tipos

Primitivos Compostos Recursivos

(2)

PLP – Valores e Tipos

00 - 30

Tipos Primitivos

São aqueles cujos valores são atômicos– não podem ser

decompostos em valores mais simples.

São aqueles tipos de informação mais usuais e básicos. Exemplos:

– boolean = {true, false} – integer = { ..., -2, -1, 0, 1, 2, ... } – real = { ..., -1.0, ..., 0.0, ... –1 .0, ... } – char = { ..., ́a ́, ́b ́, ..., ́* ́, ... }

PLP – Valores e Tipos

00 - 30  Tipos Primitivos

Os tipos primitivos já são definidos na própria LP. Em Java – byte: {-128, ... ,127} – short: {-32768, ... ,32767} – int: {-2 147 283 648, ... ,2 147 283 647} – long: {-9 223 372 036 854 775 807, ... ,9 223 372 036 854 775 807}

PLP – Valores e Tipos

00 - 30  Tipos Primitivos

 Linguagens diferentes podem usar sintaxes diferentes:

Boolean, Integer, Real (PASCAL) bool, int, real (ML)

boolean, int, double, char (JAVA)

PLP – Valores e Tipos

00 - 30

Tipos Compostos:

Um tipo composto pode ser construído em uma linguagem de

programação a partir de tipos primitivos e de outros tipos compostos, em um processo chamado composição.

Tipos compostos ou estruturados são tipos cujos valores são compostos a partir de valores mais simples

Classificação:

– Produto cartesiano (tuplas e registros) – Mapeamentos (arrays e funções)

– Uniões disjuntas (registros variantes e objetos) – Conjuntos potência (conjuntos)

– Tipos recursivos (estruturas de dados dinâmicas, listas)

PLP – Valores e Tipos

Produto cartesiano :

Por meio do produto cartesiano, valores de dois tipos (possivelmente

diferentes) são emparelhados.

Sejam S e T dois tipos quaisquer. O produto cartesiano S x T é

definido como:

S x T = { (x,y) | x in S; y in T }

PLP – Valores e Tipos

Produto cartesiano :

Na Matemática, dados dois conjuntos X e Y, o produto cartesiano (ou produto direto) dos dois conjuntos (escrito como X × Y) é o conjunto de todos os pares ordenados cujo primeiro elemento pertence a X e o segundo, a Y.

Por exemplo, se o conjunto X é o dos treze elementos do baralho inglês X = {A,K,Q,J,10,9,8,7,6,5,4,3,2}

e o Y é o dos quatro naipes: Y = {♠, ♥, ♦, ♣}

Então o produto cartesiano desses dois conjuntos será o conjunto com as 52 cartas da baralha:

(3)

00 - 30  Produto cartesiano : 00 - 30  Produto cartesiano :

PLP – Valores e Tipos

00 - 30 type Dia : 1..31;

type Mês = (jan, fev, mar, abr, mai, jun, jul, ago, set,out, nov, dez);

type Data = record d : Dia; m : Mes; end

var niver : Data; niver.d = 18; niver.m := jul;

Produto cartesiano em Pascal :

PLP – Valores e Tipos

00 - 30

enum mes{jan, fev. mar, abr, mai, jun, jul, ago, set,out,nov, dez}; typedef struct { Mes m; byte d; } Tdata; Main() { Tdata.mes = jan; Tdata.dia = 3; }  Produto cartesiano em C :

PLP – Valores e Tipos

typedef struct { Dia dia; Mês mes } Tdata; Main() { tloja.dia = 3; tloja.mes = fev; }  Produto cartesiano em C :

PLP – Valores e Tipos

Produto cartesiano, exemplos :

//C/C++/C# struct Racional{

int numerador, denominador; }

{ Pascal} Racional: record

numerador, denominador: integer; end;

//C++/Java class Racional{

int numerador, denominador; }

(4)

PLP – Valores e Tipos

00 - 30

Mapeamento:

Define uma função de mapeamento de um conjunto para outro. Aplica uma função no domínio A para obter um valor de um domínio B Arrays são encontradas em todas as linguagens OO e Imperativas (C,

Pascal, etc.)

Mapeamento também podem ser representados por funções.

PLP – Valores e Tipos

00 - 30

Mapeamento:

m : S→ T

Nós escrevemos que m é um mapeamento de S para T. Em outras palavras, m mapeia cada valor de S para os valores de T

S = {u, v} to T = {a, b, c}

PLP – Valores e Tipos

00 - 30

Mapeamento

Quantos mapeamentos acima?

PLP – Valores e Tipos

00 - 30

type Cor = (vermelho, verde, azul); Pixel = array [Integer] of Cor; var x : pixel; ... x[0] := azul; x[1] := verde; x[2] := vermelho; array [S] of T Integer -> cor  Mapeamento em Pascal :

PLP – Valores e Tipos

Mapeamento em Pascal :

function par (n : integer) : boolean; begin

par := (n mod 2 = 0) end;

integer -> boolean

function qualquer(b : Real, n : integer) boolean; begin

... end;

Real x integer -> boolean

PLP – Valores e Tipos

Uniões Disjuntas:

Na união disjunta os valores são escolhidos de dois tipos

(normalmente diferentes).

Um valor é escolhido de entre um dos vários (normalmente diferentes)

conjuntos.

Os valores da união disjunta consiste em uma tag em conjunto com

uma variante escolhida a partir de qualquer conjunto S ou conjunto T.

(5)

00 - 30

Uniões Disjuntas:

00 - 30

Uniões Disjuntas:

Exemplo de com Ada, registros discriminados:

type Media = (exata, aprox); AlunoPLP = record

nome : String; matricula : Integer; case med : Media of

exata : (notaInt : integer); aprox : (notaReal : real) end;

{..., exata (–1), exata 0, exata 1, ...} U { aprox (-1.0), ..., aprox (0.0), ..., aprox (1.0), ...}

var valor : Integer; var joao : AlunoPLP; ...

joao.med = exata; joao.notaInt = 7;

PLP – Valores e Tipos

00 - 30

Uniões Disjuntas:

Exemplo com Objetos em Java: Class Point {

Private float x,y; ... //métodos }

Class Circulo extends Point { Private float r; ... //métodos }

Class Retangulo extends Point { Private float w,h; ... //métodos }

PLP – Valores e Tipos

00 - 30  Uniões Disjuntas:

Exemplo com Objetos em Java:

A classe Circulo é uma subclasse da Classe Point, então os objetos circulos herdam os componentes x e y, além, de ter normalmente o seu próprio componente r.

A classe retângulo é outra subclasse da Classe Point, então os objetos circulos herdam os componentes x e y, além, de ter normalmente os seu próprios componentes w e h.

PLP – Valores e Tipos

Uniões Disjuntas:

Exemplo com Objetos em Java: O conjunto de objetos desse programa é:

- Point (Float X Float) - Circulo (Float X Float X Float) - Retangulo (Float X Float X Float X Float)

PLP – Valores e Tipos

Conjunto Potência

Conjunto potência é o conjunto de todos os subconjuntos de

determinado conjunto.

Permite a geração de subconjuntos de valores, a partir de um conjunto

(6)

PLP – Valores e Tipos

00 - 30

Conjunto Potência

 Pascal é a única LP que suporta diretamente conjuntos. Exemplo:

type Cor = (vermelho, verde, azul); matiz = set of Cor; ... var c : matiz; c := {vermelho}; c := {verde,azul};

PLP – Valores e Tipos

00 - 30  Tipos Recursivos:

Um tipo recursivo é aquele cujos valores são compostos por valores

do mesmo tipo.

Um tipo recursivo é definido em termos dele próprio

Exemplo: Listas

PLP – Valores e Tipos

00 - 30

Tipos Recursivos:

Um exemplo é uma lista em Haskell:

data List a = Nil | Cons a (List a)

Isso indica que uma lista de a ou é uma lista vazia ou um elemento a

(a cabeça da lista) seguido de uma lista de a (a cauda da lista).

PLP – Valores e Tipos

00 - 30

Tipos Recursivos:

Em linguagens como PASCAl e C, tipos recursivos são implementados

através de apontadores. Exemplo: Struct nodo { Int elemento; Struct nodo* ptr; }

PLP – Valores e Tipos

Strings Sequência de carateres

Não existe consenso sobre sua classificação

Tipos primitivos (ML, Java)

Arrays de Caracteres (Adam Pascal e C) Lista de Caracteres (Miranda e Prolog)

PLP – Valores e Tipos

Expressões:

Trecho do programa que pode ser avaliado resultando num valor. Expressões podem ser formadas de várias formas

Tipos de expressão: - Literal - Agregado - Chamada de Função - Expressão Condicional - Constante e variáveis de acesso

(7)

00 - 30

Expressões:

Literais

- Valores fixos de algum tipo. Exemplo: 0,1, 'a', 'Joao', 3.14 (Constantes)

Construções (Agregados)

- Expressão que constrói um valor composto a partir de seus valores componentes.

Em ML, um registro:

- { y = esseano +1, m =“jan”, d = 1}

00 - 30

Expressões:

Em Pascal, não existem construções para registros e arrays, só para

conjuntos - Em Pascal: novodia.a := esseano + 1; novodia.m := jan; novodia.d := 1; - Em ADA:

novodia := (a => esse ano + 1, m => jan, d => 1);

PLP – Valores e Tipos

00 - 30

Expressões:

Chamadas de Funções

- Computa um valor aplicando uma função a argumentos - f(P)– P é um parâmetro real (pode ser uma expressão)

Em ML:

- (if ... then sin else cos) (x)

Em C - soma (5,5); Em Java - p.inserir(20); Em Python - soma(3,4)

PLP – Valores e Tipos

00 - 30  Expressões: Expressões Condicionais

- São formadas por várias sub-expressões, das quais apenas uma é escolhida para ser avaliada.

- f(P)– P é um parâmetro real (pode ser uma expressão)

Linguagens como ML: - if x > y then x else y case mes of “Fev” => ... | “Mar” => ... | “Abr” => ... | “Dez” => ...

PLP – Valores e Tipos

Expressões: Expressões Condicionais

- C, C++, Java e Python utilizam expressões-if

PLP – Valores e Tipos

Expressões:

Acessos a constantes e variáveis

em Pascal

const pi = 3.1416; - var r: real; em C:

#define max 40 - int a = 3; em Java:

public final int dez=10; - int z = 0; Em Python

(8)

PLP – Valores e Tipos

00 - 30

Expressões:

Acessos a constantes e variáveis

em Python: z = "global" def func_1(): global x x = "global" y = "local" def func_2(): print x print z func_1() func_2()

PLP – Valores e Tipos

00 - 30  Overview:

Tipoes de valores que são usados como dados nas linguagens de

programação

Tipos primitivos, compostos e recursivos

Expressões, que são construtores de programas que computam novos

valores.

Próximo passo, verificar como valores podem ser armazenados.

PLP – Dúvidas

00 - 30

Referências

Documentos relacionados