linguagens de programaÇÃo: noÇÕes preliminares · 2012-04-02 · linguagens de programaÇÃo:...

60
LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES PROGRAMA Duas formas de manifestação: Como documento: especificação de um conjunto de operações; Em execução: realização das operações especificadas

Upload: trinhminh

Post on 15-Dec-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES

PROGRAMA

Duas formas de manifestação:

• Como documento: especificação de um conjunto de operações;• Em execução: realização das operações especificadas

Page 2: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Programa, uma máquina abstrata: manipula e produz entidades abstratas (dados).

É, ao mesmo tempo, a descrição da máquina (documento) e a própria máquina (em execução).

Papel da linguagem de programação(LP): define recursos para a construção de máquinas abstratas específicas.

Page 3: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

LP: conjunto de recursos que podem ser compostos para construir programas, mais um conjunto de regras de composição.

As regras visam a implementações com qualidade apropriada (ex: verificação de tipos).

Elementos a serem observados no projeto de uma LP:

• requisitos: universo de problemas a serem resolvidos;• expressividade: qual a melhor forma de representar os elementos

da linguagem?• paradigma: qual a forma mais apropriada para representar e

resolver os problemas daquele domínio.• implementação: os requisitos e sua representação são passíveis de

implementação? (ex: recursividade)• eficiência: a implementação se dá em um nível aceitável de

eficiência?

Page 4: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

SINTAXE E SEMÂNTICA

Para que uma LP atenda aos requisitos especificados de forma eficiente, deve ser especificada de forma única (não ambígua). Isso envolve a definição:

• sintática: como os elementos da LP são compostos.• semântica: o que significa cada elemento. O que um progtrama

bem-formado irá realizar.

Page 5: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Ex1 - a declaração de uma variável é feita em cada linguagem, de acordo com suas regras sintáticas:

a: real; {pascal}float a; // C/C++

A semântica indica que a declaração de uma variável A acarretará a reserva de memória para A.

Page 6: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Ex2 – o uso de expressões aritméticas deve obedecer às regras sintáticas da LP:

a + b * c {pascal}(+ a (* b c)) ; lisp

A semântica indica que a resolução da expressão se dará pelo produto de b por c, seguido da soma desse resultado com a.

Page 7: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

COMPILADORES E INTERPRETADORES

A implementação de cada um dos elementos de uma LP é feita através de processadores:

compiladores: os programas são transformados por inteiro em um conjunto de instruções que podem ser fisicamente efetuadas por um computador.

Interpretadores: cada expressão é transformada nas instruções correspondentes e acionada no computador.

Page 8: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

METODOLOGIA DE PROGRAMAÇÃO

Novas formas de resolver problemas podem requerem desde novos elementos básicos nas LP até novos paradigmas.

Diferentes paradigmas advêm de formas diferentes de resolver problemas (novas orientações metodológicas)

• LP orientadas a objetos(OO): soluções de problemas a partir de objetos;

• LP imperativas: soluções de problemas orientadas por dados;• LP declarativas: soluções de problemas orientadas por relações

entre declarações;

Page 9: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Cada linguagem deve prover os mecanismos que permitam a representação e a manipulação natural dos elementos básicos, conforme o paradigma de referência. De acordo com a evolução das metodologias de desenvolvimento, novos elementos são incorporados às LP.

Ex: a verificação de tipos, tradicionalmente feita no momento da compilação, é feita durante a execução em linguagens mais modernas.

Page 10: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

CARACTERÍSTICAS DESEJÁVEIS PARA UMA LP

1 - LEGIBILIDADE: a LP deve possuir elementos de fácil entendimento e não-ambíguos.

Para preservar a legibilidade, a LP deve combinar:

Simplicidade: a linguagem deve prover um número reduzido de elementos básicos, evitando-se multiplicidade de escrita.

Ortogonalidade: a linguagem deve possuir um conjunto mínimo de primitivas que possam ser combinadas para gerar componentes mais elaborados.

Instruções de controle claras: estas devem se reduzir a um conjunto estritamente essencial para o controle do fluxo de execução.

Page 11: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

o uso indiscriminado de instruções de desvio (go to) prejudica a legibilidade:

100 I = 1;110 se I > N then goto 190120 J = 1;130 se J > N then goto 110140 leia(M[I,J]);150 J = J+1;160 goto 130 ;170 I = I+1;180 goto 110;190 …

Page 12: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Sem goto...

for i:= 1 to N dofor j:= 1 to N do

readln(M[i,j]);

Page 13: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Facilidade para representação de estruturas de dados: deve haver mecanismos claros de definição e manipulação de tipos primitivos e compostos.

Sintaxe “limpa” e concisa: cada instrução deve representar de forma única e intuitiva seu significado.

2 – FACILIDADE DE ESCRITAA LP deve possuir expressividade suficiente para resolver

problemas de forma clara e natural. Isso envolve:

• simplicidade e ortogonalidade• suporte a abstrações (forma de tratar objetos em que apenas os

elementos essenciais são representados)

facilidade de escrita está relacionada com legibilidade

Page 14: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

3 – CONFIABILIDADE

As implementações correspondentes aos problemas devem produzir os resultados esperados. Ex:

mecanismos de verificação de tipos impedem que programadores façam operações com tipos conflitantes

manipulação de exceções: resultados são produzidos apenas para dados consistentes, e exceções são providas quando a consistência é violada (tendência das LP atuais)

Page 15: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

4 – CUSTO

• custo de desenvolvimento (a aceitação no mercado provoca amortização desse custo)

• custo de uso: treinamento, custo de escrita, compilação e execução.

Linguagens legíveis, de fácil escrita e confiáveis tendem a ter um custo menor.

Page 16: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOLOGIA DAS LP

LINGUAGENS ASSERTIVAS: baseiam-se em expressões que modificam valores de entidades (dados ou objetos). Incluem:

• linguagens imperativas : construção de programas é dirigida pela transformação de dados

• linguagens OO : construção de programas dirigida pelas mudanças de estado de entidades abstratas denominadas objetos.

Objeto: repositório de dados mais um conjunto de operações capazes de transformar os valores desses dados.

Page 17: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Exemplo - classe de objetos pilha:

Page 18: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

LINGUAGENS DECLARATIVAS: baseiam-se em expressões que verificam ou induzem a que ocorram relações entre declarações.

• linguagens funcionais: relações são caracterizadas por mapeamentos (funções) entre estruturas simbólicas;

• linguagens lógicas: relações são caracterizadas como expressões da lógica matemática;

Cada um desses paradigmas apresenta características (propriedades sintáticas e semânticas) que o torna mais adequado para certos tipos de problema.

Page 19: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

VALORES E TIPOS

• Dados: razão de ser dos programas;• Programas razão de ser das LP

importância do estudo da natureza dos dados

Dados: três aspectos básicos:

• valores: representações simbólicas de conceitos

• tipos: classes de valores

• variáveis: os valores precisam ser registrados para passar de uma expressão a outra

Page 20: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Importância do estudo de tipos de dados

necessidade da representação de valores para que estes possam ser manipulados;

conveniência em tratar uniformemente valores semanticamente relacionados

operações em LP devem ser definidas para um tipo como um todo (e não para valores em particular)

Tipos de dados: agrupamento de elementos de natureza semelhante. Isso envolve:

• valores que elementos de um certo tipo podem assumir;• operações para tratamento desses elementos (com regras

unificadas)

Page 21: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Ex: para tipos numéricos desejamos operações aritméticas e comparações entre valores

mesmo elementos de tipos não numéricos possuem entre si uma ordem

os principais tipos de dados têm influências de conceitos matemáticas.

Os tipos de dados são divididos em dois grandes grupos:• primitivos• compostos

além destes, podemos definir tipos em função deles próprios: tipos recursivos

Page 22: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOS PRIMITIVOS

Tipos cujos valores são atômicos (não podem ser desmembrados em valores mais simples)

a implementação de um tipo primitivo é feita “fora” da LP: não há como descrevê-lo através dos elementos da LP.

a implementação dos tipos primitivos numéricos varia de uma LP para outra e de acordo com o ambiente computacional.

Ex: • tipo Word (Pascal): com 2 bytes, representa 216 valores: 0 a

65.535.

• tipos reais: alguns bits representam o expoente de notação científica (ponto flutuante) e outros bits representam a “mantissa”.

Page 23: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

um valor real, quando implementado no computador é aproximado pelo valor representável mais próximo.

os intervalos entre reais (valores representados) cresce à medida que cresce o expoente

para que não se confunda essa representação aproximada com números reais, usa-se o termo número de ponto flutuante.

os conjuntos de inteiros e reais (matemática) são infinitos: só podem ser parcialmente representados em computador.

Page 24: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

A escolha dos tipos primitivos para uma LP depende dos propósitos para os quais a linguagem foi criada.

Ex: a linguagem MATLAB (voltada para problemas matemáticos), possui matrizes como um tipo primitivo.

Page 25: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOS NUMÉRICOS

Os tipos numéricos primordiais fazem parte da maioria das LPEx: inteiro e real

Pascal C JavaRepresentação de inteiros

integer, word, byte, etc.

int, unsigned int, long int, etc.

byte, short, int. long

Repr.de números de ponto flutuante

real, double,extended, etc.

float, double, etc.

float, double

Obs: Faixa de valores do tipo long de Java: -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807

Page 26: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOS NÃO NUMÉRICOS

Mais comuns:

• booleanos• caracteres

os ponteiros (apontadores) são usados para manipular o valor de memória correspondente ao seu endereço.

Exemplo de definição (ponteiro para inteiro)

var PtInt: ^integer; {linguagem Pascal}

int *PtInt; //linguagem C/C++

Page 27: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOS ENUMERADOS

Além dos tipos pré-definidos, alguns problemas requerem a construção de novos tipos.

As LP em geral fornecem mecanismos para construção de novos tipos

Ao se construir um tipo enumerado, são explicitados todos os valores possíveis para as suas variáveis. Ex:

{Pascal}type Meses = (jan,fev,mar,abr,mai,jun, jul,ago,set,out,nov,dez);

Page 28: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

{C/C++} enum Meses = {jan,fev,mar,abr,mai,jun, jul,ago,set,out,nov,dez);

Os elementos que aparecem na enumeração serão os únicos valores possíveis para variáveis daquele tipo. Ex:

var M: Meses;begin M := jan; { sem aspas }

Há uma relação de ordem entre os valores. Portanto, pode-se comparar dois valores (jan<fev) ou variáveis do tipo.

Page 29: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Para implementar relações de ordem, em geral as LP associam cada valor a um valor inteiro, iniciando-se em 0: jan é associado a 0, fev a 1, etc.

Page 30: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

SUBINTERVALOS

Novos tipos, criados como subconjuntos de tipos já existentes (primitivos ou definidos pelo usuário). Ex:

type DiasMes = 1..31; PrimSem = jan..jun;

Page 31: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOS COMPOSTOS

Os tipos apresentados anteriormente relacionam-se com valores atômicos: não temos acesso a partes do valor.

Há vários problemas que exigem a modelagem de valores compostos, ou seja, constituídos de um conjunto de valores mais simples.

Ex: podemos estar interessados em ter acesso separadamente às partes de uma data (dia, mês ou ano)

As LP provêem mecanismos para criação de tipos compostos, cujos valores podem ser desmembrados em valores mais simples.

Page 32: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Os tipos compostos visam ao agrupamento de valores que representam os dados das aplicações (resoluções de problemas)

Os elementos matemáticos que inspiram os agrupamentos de valores nas LP são:

• produto cartesiano• união disjunta• mapeamentos• conjunto potência

Page 33: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

PRODUTO CARTESIANO

Dados dois conjuntos A e B, o produto cartesiano AXB corresponde a todos os pares onde o primeiro elemento pertence a A e o segundo elemento a B.

C = AXB = {(x,y)|x∈A, y∈B}

Sendo #S o número de elementos (cardinalidade) de um conjunto S,

#C = #A * #B

Page 34: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Ex: A = {jan, fev, mar}B = {1,2,3}AxB = {(jan,1),(jan,2),(jan,3), (fev,1),(fev,2),( fev,3), (mar,1),(mar,2),( mar,3) }

Se qualquer dos conjuntos for infinito, o produto cartesiano resultante será infinito.

Page 35: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Em várias situações é necessário agrupar valores dessa forma. Assim, as LP provêem construtores para a formação de produtos cartesianos: record (em Pascal), struct (em C).

Ex:type Meses = (jan,fev,mar,abr,mai,jun, jul,ago,set,out,nov,dez);

Dias = 1..31;

Data = record D: Dias; M: Meses; end;

Com o tipo Data, pode-se representar datas do ano, através do par <dia, mês>.

Page 36: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

UNIÃO DISJUNTA

A união de dois conjuntos gera um terceiro com todos os elementos de ambos os conjuntos originários.

A união disjunta tem a peculiaridade de podermos distinguir o conjunto origem de cada elemento.

C = S+T = {prim x|x∈S} U {seg y|y∈T}

Por convenção, adotou-se o termo prim para indicar que o elemento provém do primeiro conjunto e o termo seg para indicar que provém do segundo conjunto.

Page 37: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

O número de elementos do conjunto C é:

#C = #S + #T

Na união de conjuntos, quando os dois conjuntos possuem elementos iguais, somente um deles fará parte do resultado.

Na união disjunta, os dois elementos são considerados, já que é usado um discriminador.

Ex:A = {jan,fev,mar}B = {1,2,3}A+B = (prim jan, prim fev, prim mar, seg 1, seg 2, seg 3}

Em termos práticos, um elemento do conjunto A+B tanto pode assumir um valor do conjunto A (jan,fev,mar) quanto um valor do conjunto B (1,2,3).

Page 38: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Em Pascal, a união disjunta é implementada através de um registro que possui uma variável que discrimina o tipo.

type Precis=(exato,aprox); Num = record case P: Precis of exato: (VlInt:integer); aprox: (VlRl :real); end;var X: Num;begin X.P := exato; X.VlInt := 3;

Page 39: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

A variável X pode assumir tanto um valor inteiro quanto um valor de ponto flutuante.

Apenas um campo dentro do case pode ser usado por vez.

O mesmo espaço de memória é compartilhado pelos campos (é alocado espaço para o campo “maior” – real no exemplo acima: 6 bytes).

Page 40: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Implementação na linguagem C:

union N { int VlInt; float VlRl; };

OBS: em C não há o elemento discriminador.

Page 41: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

MAPEAMENTOS

O mapeamento de dois conjuntos resulta em um terceiro conjunto de pares onde:

• o primeiro elemento provém do primeiro conjunto• o segundo elemento provém do segundo conjunto

cada elemento do primeiro conjunto está associado, no máximo, a um elemento do segundo.

Ex:A = {jan,fev,mar}B = {1,2,3}

Mapeamentos possíveis (entre outros):C = {jan→1,fev→3,mar→1}D = {jan→2,fev→2,mar→1}

Page 42: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Definição:

m:S→T = {x|x∈S ⇒m(x)∈T}

O primeiro conjunto é denominado de domínio e o segundo é o contradomínio ou imagem.

os elementos do domínio correspondem aos índices em LP

A cardinalidade (número de elementos) do conjunto S→T é dada por:

#(S→T) = (#T)#S

Page 43: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Os mapeamentos aparecem nas LP como arrays.

Em algumas LP os domínios são sempre inteiros (ou naturais) Outras permitem que os índices sejam definidos pelo programador

Ex: em Pascal, o conjunto de índices é explicitamente definido. Já em C, apenas o número de elementos do domínio é definido.

Domínios inteiros em Pascal e C:

varV:array[1..10] of integer; {Pascal} int V[10]; // C

Page 44: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Domínios não inteiros (Pascal)

Representação da menor temperatura de cada mês do ano:

type Meses = (jan,fev,mar,abr,mai,jun, jul,ago,set,out,nov,dez);var MinTemp: array[Meses] of real;

Outras possibilidades:

MinTemp: array[jan..dez] of real; MinTempSem: array[jan..jun] of real;

Page 45: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Possibilidades de manuseio:

var i: Meses;begin for i:= jan to dez do readln(MinTemp[i]);

As funções na maioria das LP também são mapeamentos entre um domínio e um contradomínio.

Nesse caso, um algoritmo descreve a relação entre os elementos do domínio e do contradomínio.

Page 46: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

CONJUNTOS POTÊNCIA

Alguns problemas computacionais requerem uma representação de conjuntos (em vez de um único elemento)

Dado um conjunto S, o conjunto potência P(S) é o conjunto formado por todos os possíveis subconjuntos de S.

Definição:P(S) = {R|R ⊆ S}

O número de elementos (cardinalidade) do conjunto P(S)é:

#(P(S)) = 2#S

Ex:A = {vermelho,azul,amarelo}

Page 47: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

P(A) = {{},{vermelho},{azul},{amarelo}, {vermelho,azul},{vermelho,amarelo}, {azul,amarelo},{vermelho,azul,amarelo}}

#(P(A)) = 2#A = 23 = 8

Page 48: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Aplicação: a partir das cores primárias, representar as várias cores por meio da mistura destas cores primárias.

A linguagem C não implementa conjuntos

Pascal e Modula-3 estão entre as poucas linguagens que provêem manipulação de conjuntos (construtores e operadores).

{exemplo acima em Pascal}type Cores=(vermelho,azul,amarelo); NovasCores = set of Cores;

Page 49: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOS RECURSIVOS

Aqui entra um texto que fiz em casa

Definição em Pascal de uma lista de inteiros:

type PtNo = ^No; No = record Valor: integer; Prox: PtNo; end;

OBS: Em Pascal não pode ser definido um tipo usando-se seu próprio nome.

Torna-se necessário um elemento auxiliar para a referência (PtNo)

Page 50: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

A mesma definição em C:

typedef struct No *PtNo; struct No { int Valor; PtNo Prox; }

Alternativa:

struct No { int Valor; No *Prox; }

Page 51: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOS CONSTRUÍDOS PELO PROGRAMADOR

O programador pode definir tipos de dados pela:

• Renomeação de tipos existentes• Agregação de tipos predefinidos ou criados na LP (através de seus

construtores)

Vantagens de tipos nomeados :

• legibilidade (tipos são nomeados de forma significativa para o contexto)

• facilidade de escrita (não é necessário definir a estrutura para cada variável)

• facilidade de modificação (basta modificar o tipo para modificar todas as variáveis correspondentes)

Page 52: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

VARIÁVEIS

Necessidade de armazenar valores de forma que eles possam ser usados posteriormente: variáveis.

PAPEL DAS VARIÁVEIS

A Solução de problemas, em geral, é uma transformação sucessiva dos valores originais até a obtenção dos valores desejados.

Variável: uma forma de abstrair a representação efetiva de cada valor (através de um nome “fantasia”).

Variáveis são utilizadas para modelar objetos reais de forma que seus valores possam ser consultados ou modificados.

Page 53: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

O armazenamento é feito através de células de memória ( o número de células depende do tipo associado e da LP)

Para cada variável tem-se:• Um identificador• Um endereço da célula de memória• O conteúdo

A declaração de uma variável envolve, portanto, três subtarefas:

• Associar um tipo à variável• Alocar espaço de memória apropriado• Associar a esse espaço o identificador

Page 54: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

ARMAZENAMENTO E ACESSO A VALORES

Variáveis podem armazenar tanto conteúdos atômicos quanto compostos

• variáveis simples: o acesso é feito, em geral, sobre o valor como um todo

• variáveis compostas: podemos armazenar e ter acesso a partes (valores mais simples)

VARIÁVEIS SIMPLES

Espaços de memória que podem ter seus conteúdos armazenados e acessados atomicamente.

Page 55: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOS PRIMITIVOS:

Os valores dos tipos primitivos são sempre referidos como elementos atômicos (embora sejam armazenados por meio de elementos que possam ser desmembrados)

Ex: • números inteiros são representados internamente com um bit para

sinal e um conjunto de bits para o valor.... • números reais (ponto flutuante) são representados internamente

por um expoente e uma parte fracionária...

...entretanto, não fazemos referência a essas partes separadamente.

Page 56: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Ex (linguagem C)

int i1,i2;float r;

i1 = 10;i2 = i1 – 10;r = 20.5;

Assim como os numéricos, os caracteres e booleanos são também armazenados em variáveis simples.

Page 57: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Definição em C do tipo booleano

Enum Bool {false, true};...Bool b;

...

If (b = true) ...

OBS: alguns compiladores C++ suportam o tipo bool, outros não.

Page 58: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

PonteirosSão também tipos primitivos: guardam endereços de memória

onde se encontram determinados conteúdos necessários.

Ex (Pascal):var PtInt1, PtInt2: ^Integer; I: Integer;

... New(PtInt1); I := 10; PtInt2 := @I; PtInt1^ := I; Dispose(PtInt1);

Page 59: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

Em C...

int * PtInt1, *PtInt2; int I;

... PtInt1 = (int *) malloc(sizeof(int)); I = 10; PtInt2 = &I; *PtInt1 = I; free(PtInt1);

Page 60: LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES PRELIMINARES · 2012-04-02 · LINGUAGENS DE PROGRAMAÇÃO: NOÇÕES ... elementos básicos nas LP até novos paradigmas. Diferentes paradigmas

TIPOS COMPOSTOS

completar

VARIÁVEIS COMPOSTAS

As variáveis compostas possuem componentes que podem ser tratados seletivamente.

(tipos compostos possuem acesso seletivo aos seus subcomponentes)