Linguagens de Programação Conceitos e Técnicas Definições e declarações Prof. Isabel Cafezeiro
Linguagens de Programação definições & declarações Declaração: É um enunciado do programa que produz amarrações, possivelmente criando entidades. const float pi = 3.14 procedure S: forward typedef int inteiro var i: integer typedef struct {int d,m,a;} data; procedure S;begin... end Amarra identificador a valor! Amarra identificador a procedimento! Amarra identificador a tipo! Amarra identificador a variável! Amarra identificador a tipo! Amarra identificador a comando!
Linguagens de Programação definições & declarações Declaração: É um enunciado do programa que produz amarrações, possivelmente criando entidades. const float pi = 3.14 procedure S: forward typedef int inteiro var i: integer procedure S;begin... end Cria a variável i! Cria o tipo data! Cria o comando! typedef struct {int d,m,a;} data;
Linguagens de Programação definições & declarações Definição: É um enunciado do programa que produz amarrações, mas não cria entidades. const float pi = 3.14 procedure S: forward typedef int inteiro
Linguagens de Programação definições & declarações Declarações compostas: Tipos Sequenciais Declarações simples: constantes variáveis Procedimentos exceções pacotes classes Colaterais Recursivas
Linguagens de Programação definições & declarações Tipos Declarações simples: constantes variáveis Procedimentos exceções pacotes classes Amarram identificador a tipo! Pré existente: Criado no próprio enunciado: typedef int inteiro typedef struct {int d,m,a;} data;
Linguagens de Programação definições & declarações Tipos Declarações simples: constantes variáveis Procedimentos exceções pacotes classes Amarram identificador a tipo! Pré existente: Quando a criação do tipo é anterior ao o enunciado de declaração, a equivalência costuma ser estrutural typedef int inteiro1; typedef int inteiro2; main() { inteiro1 i = 2; inteiro2 j = 3; i = j; } Sem erro!!! Equivalência estrutural
Linguagens de Programação definições & declarações Tipos Declarações simples: constantes variáveis Procedimentos exceções pacotes classes Amarram identificador a tipo! typedef struct {int d,m,a;} data1 ; typedef struct {int d,m,a;} data2 ; main() { data1 p; data2 q; p = q; } Criado no próprio enunciado: Quando o tipo é criado no próprio enunciado de declaração, a equivalência costuma ser nominal I:\AULAS\LINGPROG\C>gcc equivnominal2.c equivnominal2.c: In function `main': equivnominal2.c:9: incompatible types in assignment
Linguagens de Programação definições & declarações Tipos Declarações simples: constantes variáveis Procedimentos exceções pacotes classes Amarram identificador a valor que não poderá ser alterado posteriormente #include int main (void) { const i = 6; printf ("%d \n", i); i = 3; printf("%d \n",i); } ?
Linguagens de Programação definições & declarações Tipos Declarações simples: Constantes dinâmicas: em C, em ADA variáveis Procedimentos exceções pacotes classes int valor(){ return(getchar()); } int main (void) { const i = valor(); printf ("%d \n", i); }
Linguagens de Programação definições & declarações Tipos Declarações simples: Constantes sem valor: em Java variáveis Procedimentos exceções pacotes classes final int j; constructor() { j = 1; }
Linguagens de Programação definições & declarações Tipos Declarações simples: variáveis Procedimentos exceções pacotes classes constantes Amarra identificador a variável normalmente criada no próprio enunciado var i: integer
Linguagens de Programação definições & declarações Tipos Declarações simples: variáveis Procedimentos exceções pacotes classes constantes Amarra identificador a variável pré existente Em ADA:... pop: integer renames population(state)... pop := pop+1 Em C++:... int r=10; int &j=r; j++;
Linguagens de Programação definições & declarações Tipos Declarações simples: variáveis Procedimentos exceções pacotes classes constantes Amarram identificador a comandos ! Em Pascal: procedure S; begin... end
Linguagens de Programação definições & declarações Tipos Declarações simples: variáveis Procedimentos exceções pacotes classes constantes Amarram identificador a procedimento a ser criado! Em Pascal: procedure S: forward
Linguagens de Programação definições & declarações Tipos Declarações simples: variáveis Procedimentos exceções pacotes classes constantes Amarração???? Em LISP: > ((lambda (x) (+ x 2)) 3) 5 ?
Linguagens de Programação definições & declarações Declarações compostas: Sequenciais Colaterais O efeito da segunda depende da amarração resultante da primeira O efeito da segunda independe da amarração resultante da primeira Em ML: val e = and pi = ; val twicepi = 2*pi
Linguagens de Programação definições & declarações Declarações compostas: Recursivas Usam a amarração que elas mesmas produzem Em Pascal: Type proximo = ^registro; registro = record elemento: integer; elo: proximo; end; Em C: void segunda(int); void primeira(int n){ if (n<0) return; segunda(n-1); } void segunda(int n){ if (n<0) return; primeira(n-1); } Em LISP: (define fat (lambda (n) (if (zero? n) 1(* n (fat (- n 1))))))
Linguagens de Programação definições & declarações Bloco: Escopo de Declarações Delimita o escopo de declarações Em LISP: (let ((a 3) (b 5)) (+ a b)) Em C: if (x > y) { int z = x; x = y; y = z; } Comandos de bloco Expressão de bloco D C As amarrações D são de uso exclusivo em C (let D E) As amarrações D são de uso exclusivo em E
Linguagens de Programação definições & declarações Declarações simples: Escopo de Declarações do final da declaração até o final do bloco que a engloba; Em Pascal: var num: integer; function fatorial(i:integer): integer; var fat,k: integer; begin fat := 1; for k:=1 to i do fat := fat * k; fatorial := fat; end; begin readln(num); if (num >=0) then writeln(fatorial(num)) end. Em C: main() { int a = 1; a = a+1; { int b = 2; a = a+b; }... }
Linguagens de Programação definições & declarações Declarações simples: Escopo de Declarações do ponto da declaração ao final do programa Em C: int impar (int n){ return n%2; } int negativo (int n) { return n < 0; } int multiplo7 (int n) { return !(n%7); } main( ) {... }
Linguagens de Programação definições & declarações Declarações compostas: Sequenciais Escopo de Declarações O escopo de cada subdeclaração vai do final da própria subdeclaração até o final do bloco que a engloba; Em Pascal: type sub1= 1..3; sub2= 1..5; a= array [sub1] of integer; b= array [sub2] of a; x= array [sub2,sub1] of integer;
Linguagens de Programação definições & declarações Declarações compostas: Colaterais Escopo de Declarações O escopo de cada subdeclaração vai do final da declaração colateral até o final do bloco que a engloba; Em ML: val e = and pi = ; val twicepi = 2*pi Em ML: val pi = and txicepi = 2*pi;
Linguagens de Programação definições & declarações Declarações compostas: Recursivas Escopo de Declarações O escopo de cada subdeclaração vai do início da declaração recursiva até o final do bloco que a engloba; Em C: int fatorial(int n) { if (n==0) return 1; else return n*fatorial(n-1); }
Linguagens de Programação definições & declarações Qualification Principle Comandos de bloco Expressão de bloco É possível incluir um bloco em qualquer categoria sintática, desde que as construções desta a categoria sintática especifiquem algum tipo de computação. Declarações de bloco É uma declaração contendo uma subdeclaração local D e subdeclarações D', de forma que as amarrações de D sejam efetivas somente em D'