Prof. Adriano Teixeira de Souza
   Expressões são o meio fundamental de    especificar computações em uma linguagem de    programação:    ◦ Familiarizaçã...
   Avaliação de expressões aritméticas foi a    motivação para o desenvolvimento da    primeira linguagem de programação;...
   Considerações de projeto:    ◦ Quais são as regras de precedência de operadores?    ◦ Quais são as regras de associati...
   Operadores:    ◦ Unário      possui apenas um opernado        A ++    ◦ Binário      possui dois operandos        ...
   Como deve ser avaliada a seguinte expressão:    ◦ a + b * c** d** e / f   Deveria ser    ◦ ( ( ( (a+b)*c ) **d ) **e ...
   Regra de Precedência   Regra de Associatividade   Parênteses   Expressões Condicionais                           Pr...
   Regra de Precedência de Operadores para    avaliação de expressões definem    ◦ ordem na qual operadores adjacentes de...
FORTRAN           PASCAL                 C                  Ada**              *, /, div, mod    ++ , --              **, ...
   Regras de associatividade para avaliação de    expressões definem    ◦ A ordem em que os operadores adjacentes com mes...
   Em FORTRAN    ◦ Alguns operadores unários associam-se da direita para esquerda   Em APL    ◦ Todos os operadores têm ...
   As regras de Precedência e de associatividade    pode ser alterada colocando parênteses    ◦ Exemplo      (A+B)*C    ...
   Operador ternário ? :    ◦ C, C++ e Java    ◦ Exemplo:       res = (cont == 0)? 0 : soma/cont    ◦ Equivalente – if-th...
   Variáveis    ◦ Buscar seu valor na memória   Constantes:    ◦ Algumas vezes é necessário buscar na memória;    ◦ Outr...
   Efeitos Colaterais    ◦ Ocorre quando uma função altera um de seus      parâmetros    ◦ ou uma variável não local     ...
   Exemplo    ◦ Quando uma função é chamada em uma expressão e      altera outro operando da expressão:     a = 10;     /...
   Variável Global           O valor computado em fun2( )                               depende da ordem de avaliação   ...
   Possíveis Soluções    ◦ O projetista da linguagem poderia impedir que a      avaliação da função afetasse o valor das ...
   Usar um operador para mais do que um    propósito    ◦ Exemplo      + para adiçao de quaisquer operandos de tipo     ...
   Alguns representam problemas em potencial    ◦ Perda da capacidade de detectar erros    ◦ Omissão de um operador    ◦ ...
   C++ e Ada permitem que programador    defina a sobrecarga de operadores.   Problema potencial:    ◦ Programadores pod...
   Uma conversão de estreitamento    ◦ transforma um valor para um tipo que não pode      armazenar todos os valores do t...
   Desvantagem de conversão:    ◦ Diminui poder do compilador na detecção de erros    ◦ Na maioria das linguagens, todos ...
   Chamada de casting em linguagens baseadas    em C    ◦ Exemplos      C: (int) numero      Ada: Float (soma)    ◦ Obs...
   Erros em Expressões (causados por):    ◦ Limitações aritméticas:      Ex. Divisão por zero    ◦ Limitações da aritmét...
   Possui dois operandos e um operador    relacional   Este Compara os valores de seus dois    operandos    ◦ Seu valor ...
Operação             Ada            Java                  FORTRAN 90Igual                      =                ==        ...
   Operandos são booleanos   O resultado é booleano   Característica do C    ◦ não possui tipo booleano      utiliza o...
   É um método abreviado de especificar uma    forma de atribuição    ◦ Introduzido em ALGOL; adotado por C    ◦ Exemplo ...
   Linguagens baseadas em C combinam operações    de incremento e de decremento com atribuição    ◦ Exemplos      soma =...
Próximos SlideShares
Carregando em…5
×

Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição

4.199 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
4.199
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
122
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição

  1. 1. Prof. Adriano Teixeira de Souza
  2. 2.  Expressões são o meio fundamental de especificar computações em uma linguagem de programação: ◦ Familiarização com as ordens de avaliação de operadores e de operandos:  Regras de associatividade e de precedência da linguagem. ◦ A essência das linguagens de programação imperativas e o papel predominante das instruções de atribuição cuja finalidade é mudar o valor de uma variável. Prof. Adriano Teixeira de Souza
  3. 3.  Avaliação de expressões aritméticas foi a motivação para o desenvolvimento da primeira linguagem de programação; Expressão Aritmética consiste de: ◦ operadores e operandos, ◦ parênteses ◦ chamadas de função  Exemplo  Double A = (3.2 + 8.4) / B; Prof. Adriano Teixeira de Souza
  4. 4.  Considerações de projeto: ◦ Quais são as regras de precedência de operadores? ◦ Quais são as regras de associatividade de operadores? ◦ Qual é a ordem de avaliação dos operandos? ◦ Existem restrições quanto os efeitos colaterais da avaliação dos operandos? ◦ A linguagem permite sobrecarga de operadores definidas pelo usuário? Prof. Adriano Teixeira de Souza
  5. 5.  Operadores: ◦ Unário  possui apenas um opernado  A ++ ◦ Binário  possui dois operandos  A*B ◦ ternário  possui 3 operandos  (condição) ? Verdadeiro : Falso  (A < B) ? 1 : 0 Prof. Adriano Teixeira de Souza
  6. 6.  Como deve ser avaliada a seguinte expressão: ◦ a + b * c** d** e / f Deveria ser ◦ ( ( ( (a+b)*c ) **d ) **e ) / f ◦ a + ( ( ( b*c ) **d ) ** (e / f) ) ◦ a + ( ( b* ( c **( d **e) ) ) / f )  A última opção é usada por Fortran Prof. Adriano Teixeira de Souza
  7. 7.  Regra de Precedência Regra de Associatividade Parênteses Expressões Condicionais Prof. Adriano Teixeira de Souza
  8. 8.  Regra de Precedência de Operadores para avaliação de expressões definem ◦ ordem na qual operadores adjacentes de diferentes níveis de precedência são avaliados ◦ Níveis de precedência típicos  parênteses  Operadores unários  ** (se a linguagem suporta exponenciação)  *, /  +, -  ==, > , < , <= , >= Prof. Adriano Teixeira de Souza
  9. 9. FORTRAN PASCAL C Ada** *, /, div, mod ++ , -- **, abs ( pós-fixo )*, / + , - ( todos ) ++ , -- *, /, mod ( prefixo )+, - ( todos) + , - (unário) +, - (unário) *, / , % +, - (binário) +, - (binário) Prof. Adriano Teixeira de Souza
  10. 10.  Regras de associatividade para avaliação de expressões definem ◦ A ordem em que os operadores adjacentes com mesmo precedência são avaliados ◦ A+B–C+D Regras de associatividade comuns ◦ Da esquerda para a direita, ◦ exceto **, Qual é da direita para a esquerda a esquerda  B + A ** C Regras de precedência e de associatividade podem ser substituídas pelo uso de parênteses Prof. Adriano Teixeira de Souza
  11. 11.  Em FORTRAN ◦ Alguns operadores unários associam-se da direita para esquerda Em APL ◦ Todos os operadores têm precedência iguais ◦ São associativos da direita para a esquerdaLinguagem Regra de AssociatividadeFORTRAN Esquerda : *, / , + , - Direita : **Pascal Esquerda : TodosC Esquerda : ++ pós-fixo, -- pós-fixo, * , / , % , + binário , - binário Direita : ++ prefixo, -- prefixo, + unário , - unárioC++ Esquerda : * , / , % , + binário , - binário Direita : ++, -- , + unário , - unárioAda Esquerda : todos, exceto ** Direita : ** Prof. Adriano Teixeira de Souza
  12. 12.  As regras de Precedência e de associatividade pode ser alterada colocando parênteses ◦ Exemplo  (A+B)*C Prof. Adriano Teixeira de Souza
  13. 13.  Operador ternário ? : ◦ C, C++ e Java ◦ Exemplo: res = (cont == 0)? 0 : soma/cont ◦ Equivalente – if-then-else if (cont == 0) res = 0 else res = soma /cont Prof. Adriano Teixeira de Souza
  14. 14.  Variáveis ◦ Buscar seu valor na memória Constantes: ◦ Algumas vezes é necessário buscar na memória; ◦ Outras vezes a constante está na própria instrução de máquina. Expressões parêntizadas ◦ avaliar todos operandos primeiro antes que seu valor possa ser usado como operando Prof. Adriano Teixeira de Souza
  15. 15.  Efeitos Colaterais ◦ Ocorre quando uma função altera um de seus parâmetros ◦ ou uma variável não local Prof. Adriano Teixeira de Souza
  16. 16.  Exemplo ◦ Quando uma função é chamada em uma expressão e altera outro operando da expressão: a = 10; /*a função fun( ) retorna o valor do argumento divido por 2 e modifica o paramentro para 20*/ b = a + fun(a); Se o valor de a for buscado primeiro operador a = 10 + 5 = 15 Mas se o segundo operando for avaliado primeiro, o valor do primeiro será 20 + 5 = 25 Prof. Adriano Teixeira de Souza
  17. 17.  Variável Global  O valor computado em fun2( ) depende da ordem de avaliação Int a = 5; dos operandos na expressão  a + fun1 ( ) Int fun1( ) { a = 17; return 3; } Int fun2( ){ a = a + fun1( ); } Void main( ) { fun2( ); } Prof. Adriano Teixeira de Souza
  18. 18.  Possíveis Soluções ◦ O projetista da linguagem poderia impedir que a avaliação da função afetasse o valor das expressões. ◦ Declarar, na definição da linguagem, que os operandos devem ser avaliados em uma ordem particular  Exigir que os implementadores garantam esta ordem Rejeitar os efeitos colaterais é difícil e elimina a otimização do programador Prof. Adriano Teixeira de Souza
  19. 19.  Usar um operador para mais do que um propósito ◦ Exemplo  + para adiçao de quaisquer operandos de tipo numérico  int e float  Em Java (+) para concatenar cadeias. ◦ Em C:  A=B*C // Multiplicação  A = * ref; // Referência Prof. Adriano Teixeira de Souza
  20. 20.  Alguns representam problemas em potencial ◦ Perda da capacidade de detectar erros ◦ Omissão de um operador ◦ Podem ser evitados pela introdução de novos símbolos ◦ Exemplo:  media = soma / cont; // int ou float  div para divisão de inteiros no Pascal Prof. Adriano Teixeira de Souza
  21. 21.  C++ e Ada permitem que programador defina a sobrecarga de operadores. Problema potencial: ◦ Programadores podem definir sobrecarga de operadores sem sentido; ◦ Legibilidade pode ficar comprometida. Prof. Adriano Teixeira de Souza
  22. 22.  Uma conversão de estreitamento ◦ transforma um valor para um tipo que não pode armazenar todos os valores do tipo original  float para int Uma conversão de alargamento ◦ transforma um valor para um tipo que pode incluir, pelo menos, aproximações de todos os valores do original  int para float Uma expressão de modo misto é aquela que possui operandos de tipos diferentes Prof. Adriano Teixeira de Souza
  23. 23.  Desvantagem de conversão: ◦ Diminui poder do compilador na detecção de erros ◦ Na maioria das linguagens, todos os tipos numéricos são convertidos em expressões, usando coerção de alargamento ◦ No Ada e Modula-2, praticamente, não é permitida conversão em expressões Prof. Adriano Teixeira de Souza
  24. 24.  Chamada de casting em linguagens baseadas em C ◦ Exemplos  C: (int) numero  Ada: Float (soma) ◦ Obs: a sintaxe em Ada é similar a chamada de funções Prof. Adriano Teixeira de Souza
  25. 25.  Erros em Expressões (causados por): ◦ Limitações aritméticas:  Ex. Divisão por zero ◦ Limitações da aritmética computacional:  Ex. overflow de inteiros  Overflow de ponto flutuante Prof. Adriano Teixeira de Souza
  26. 26.  Possui dois operandos e um operador relacional Este Compara os valores de seus dois operandos ◦ Seu valor é booleano ◦ Os símbolos de operadores variam bastante entre linguagens Prof. Adriano Teixeira de Souza
  27. 27. Operação Ada Java FORTRAN 90Igual = == .EQ. ou ==Diferente /= != .NE. ou <>Maior que > > .GT. ou >Menor que < < .LT. ou <Maior que ou igual >= >= .GE. ou >=Menor que ou igual <= <= .LE. ou <= Prof. Adriano Teixeira de Souza
  28. 28.  Operandos são booleanos O resultado é booleano Característica do C ◦ não possui tipo booleano  utiliza o tipo int com 0 para FALSO  diferente de zero para VERDADEIRO. ◦ A expressão: a < b < c é correta  e equivalente a: (a<b) < c Prof. Adriano Teixeira de Souza
  29. 29.  É um método abreviado de especificar uma forma de atribuição ◦ Introduzido em ALGOL; adotado por C ◦ Exemplo  a=a+b ◦ É escrito como  a += b Prof. Adriano Teixeira de Souza
  30. 30.  Linguagens baseadas em C combinam operações de incremento e de decremento com atribuição ◦ Exemplos  soma = ++ cont (o valor de cont é incrementa em 1, e atribuido a suma)  soma = cont++ (atribui a soma , e cont é incrementado)  cont++ (cont é incrementado )  -cont++ (cont é incremented e depois é transformado em negativos  Não (-cont)++ Prof. Adriano Teixeira de Souza

×