SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
Prof. Adriano Teixeira de Souza
   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
   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
   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
   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
   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
   Regra de Precedência

   Regra de Associatividade

   Parênteses

   Expressões Condicionais




                           Prof. Adriano Teixeira de Souza
   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
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
   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
   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 esquerda
Linguagem           Regra de Associatividade

FORTRAN             Esquerda : *, / , + , -
                    Direita : **

Pascal              Esquerda : Todos

C                   Esquerda : ++ pós-fixo, -- pós-fixo, * , / , % , + binário , - binário
                    Direita : ++ prefixo, -- prefixo, + unário , - unário

C++                 Esquerda : * , / , % , + binário , - binário
                    Direita : ++, -- , + unário , - unário

Ada                 Esquerda : todos, exceto **
                    Direita : **



                                              Prof. Adriano Teixeira de Souza
   As regras de Precedência e de associatividade
    pode ser alterada colocando parênteses

    ◦ Exemplo

      (A+B)*C




                         Prof. Adriano Teixeira de Souza
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
Operação             Ada            Java                  FORTRAN 90

Igual                      =                ==               .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
   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
   É 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
   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

Mais conteúdo relacionado

Mais procurados (17)

Fundamentos do java
Fundamentos do javaFundamentos do java
Fundamentos do java
 
Compiladores 2
Compiladores 2Compiladores 2
Compiladores 2
 
Java
JavaJava
Java
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Atribuições
AtribuiçõesAtribuições
Atribuições
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Compiladores 5
Compiladores 5Compiladores 5
Compiladores 5
 
Php
PhpPhp
Php
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
Alg aula 02 - algoritmos 1 tp1
Alg   aula 02 - algoritmos 1 tp1Alg   aula 02 - algoritmos 1 tp1
Alg aula 02 - algoritmos 1 tp1
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Semântica Formal
Semântica FormalSemântica Formal
Semântica Formal
 
Aula 6 pc - slides
Aula 6   pc - slidesAula 6   pc - slides
Aula 6 pc - slides
 
Cap 2
Cap 2Cap 2
Cap 2
 
Aula 7 - Expressões Aritméticas e Lógicas
Aula 7 - Expressões Aritméticas e LógicasAula 7 - Expressões Aritméticas e Lógicas
Aula 7 - Expressões Aritméticas e Lógicas
 

Destaque

Flat back syndrome
Flat back syndromeFlat back syndrome
Flat back syndromeAmir Rifaat
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoParadigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoAdriano Teixeira de Souza
 
Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Thayse
 
Algoritmos 1 - Lista de Exercícios 2
Algoritmos 1 - Lista de Exercícios 2Algoritmos 1 - Lista de Exercícios 2
Algoritmos 1 - Lista de Exercícios 2Eder Samaniego
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 

Destaque (9)

Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
 
1.1.paradigmas
1.1.paradigmas1.1.paradigmas
1.1.paradigmas
 
Flat back syndrome
Flat back syndromeFlat back syndrome
Flat back syndrome
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - Classificações
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
 
Paradigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoParadigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - Introdução
 
Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0Teoria Lista Exercicios 1.0
Teoria Lista Exercicios 1.0
 
Algoritmos 1 - Lista de Exercícios 2
Algoritmos 1 - Lista de Exercícios 2Algoritmos 1 - Lista de Exercícios 2
Algoritmos 1 - Lista de Exercícios 2
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 

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

Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoDenis L Presciliano
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoDenis L Presciliano
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxMarceloRosenbrock1
 
Aula 03 - Definições da linguagem Java
Aula 03 - Definições da linguagem JavaAula 03 - Definições da linguagem Java
Aula 03 - Definições da linguagem JavaDaniel Brandão
 
Java 03 Tipos Dados Operadores
Java 03 Tipos Dados OperadoresJava 03 Tipos Dados Operadores
Java 03 Tipos Dados OperadoresRegis Magalhães
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Mauricio Volkweis Astiazara
 
04 - Operadores lógicos e expressões lógicas - v1.2
04 - Operadores lógicos e expressões lógicas - v1.204 - Operadores lógicos e expressões lógicas - v1.2
04 - Operadores lógicos e expressões lógicas - v1.2César Augusto Pessôa
 
Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2Elvis Araújo
 
Logica java ate slide 30
Logica java   ate slide 30Logica java   ate slide 30
Logica java ate slide 30hflandim
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Curso de C# - Variáveis, operadores e expressões
Curso de C# - Variáveis, operadores e expressõesCurso de C# - Variáveis, operadores e expressões
Curso de C# - Variáveis, operadores e expressõesDaniel Araújo
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 

Semelhante a Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição (20)

Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
Algoritmos Aula 05
Algoritmos Aula 05Algoritmos Aula 05
Algoritmos Aula 05
 
Java - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
Aula 03 - Definições da linguagem Java
Aula 03 - Definições da linguagem JavaAula 03 - Definições da linguagem Java
Aula 03 - Definições da linguagem Java
 
Java 03 Tipos Dados Operadores
Java 03 Tipos Dados OperadoresJava 03 Tipos Dados Operadores
Java 03 Tipos Dados Operadores
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)
 
04 - Operadores lógicos e expressões lógicas - v1.2
04 - Operadores lógicos e expressões lógicas - v1.204 - Operadores lógicos e expressões lógicas - v1.2
04 - Operadores lógicos e expressões lógicas - v1.2
 
Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2
 
Cap 2
Cap 2Cap 2
Cap 2
 
Aula 2
Aula 2Aula 2
Aula 2
 
Logica java ate slide 30
Logica java   ate slide 30Logica java   ate slide 30
Logica java ate slide 30
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
POO - 07 - Operadores do Java
POO - 07 - Operadores do  JavaPOO - 07 - Operadores do  Java
POO - 07 - Operadores do Java
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Curso de C# - Variáveis, operadores e expressões
Curso de C# - Variáveis, operadores e expressõesCurso de C# - Variáveis, operadores e expressões
Curso de C# - Variáveis, operadores e expressões
 
02 controle de fluxo
02   controle de fluxo02   controle de fluxo
02 controle de fluxo
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 

Mais de Adriano Teixeira de Souza

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 

Mais de Adriano Teixeira de Souza (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 

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

  • 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. 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. 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. 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. 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. Regra de Precedência  Regra de Associatividade  Parênteses  Expressões Condicionais Prof. Adriano Teixeira de Souza
  • 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. 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. 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. 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 esquerda Linguagem Regra de Associatividade FORTRAN Esquerda : *, / , + , - Direita : ** Pascal Esquerda : Todos C Esquerda : ++ pós-fixo, -- pós-fixo, * , / , % , + binário , - binário Direita : ++ prefixo, -- prefixo, + unário , - unário C++ Esquerda : * , / , % , + binário , - binário Direita : ++, -- , + unário , - unário Ada Esquerda : todos, exceto ** Direita : ** Prof. Adriano Teixeira de Souza
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Operação Ada Java FORTRAN 90 Igual = == .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. 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. É 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. 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