Buscar

Aula 4

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Estácio Teresina
Curso de Ciência da Computação
Paradigmas de Linguagens de Programação em Python
Aula 4 – Implementação das Linguagens de Programação
Joselito Mendes de Sousa Junior
Decisão de qual Linguagem usar
2
Decisão leva em conta diversos aspectos
 Legibilidade/Simplicidade
 Facilidade de Escrita
 Confiabilidade
 Custo
 Flexibilidade
 Segurança
Legibilidade
 É a facilidade com que os programas podem ser lidos e
entendidos.
 Antes de 1970, o principal ponto a se observar, era a
eficiência do código e, a partir de 1970, com o conceito
de ciclo de vida de software, a manutenção do código
passou a ser fator determinante.
3
Legibilidade
 A legibilidade deve ser considerada no contexto do
domínio do problema. Por exemplo, se um programa
que descreve um cálculo é escrito em uma linguagem
que não é projetada para tal uso, ele pode não ser
natural e desnecessariamente complexo, dificultando
seu entendimento.
 Características avaliadas
 Simplicidade
 Ortogonalidade
 Tipos de dados
 Projeto de sintaxe
4
Características
1. Simplicidade
 Uma linguagem com muitas construções básicas é mais
difícil de aprender do que uma com poucas.
 Programadores que precisam usar uma linguagem extensa,
aprendem um subconjunto dessa linguagem e ignoram
outros recursos.
 Outra característica que atrapalha a legibilidade, é a
multiplicidade de recursos (várias maneiras de fazer algo).
 Outro problema é a sobrecarga de operadores, onde um
operador tem mais de um significado.
5
Em Java, podemos 
incrementar uma 
variável de 4 
maneiras diferentes
Características
2. Ortogonalidade
 Significa que um conjunto relativamente pequeno de
construções primitivas pode ser combinado a um numero
relativamente pequeno de formas para construir as
estruturas de controle e de dados da linguagem.
 Quanto mais ortogonal for a linguagem, menor é o numero
de exceções às regras da linguagem. Ou seja, maior o grau de
regularidade no projeto, tornando a linguagem mais fácil de
aprender, ler e entender.
 No entanto, ortogonalidade demais pode causar problemas.
 ALGOL 68 possui uma complexidade desnecessária
6
Características
3. Tipos de dados
 A presença de mecanismos adequados para definir tipos e
estruturas de dados é outro auxílio significativo à
legibilidade.
 Ex.: Utilização de um tipo numérico como flag, motivada
pela ausência de um tipo booleano.
 timeOut = 1 (Significado da sentença não é claro)
 timeOut = true (Significado é perfeitamente claro)
7
Características
4. Projeto da sintaxe
 A sintaxe, ou forma, dos elementos de uma linguagem tem
efeito significativo na legibilidade dos programas.
 Ex.: O uso de palavras especiais em C, traz consigo a
utilização de chaves para especificar sentenças compostas.
Isso diminui a legibilidade, uma vez que em grupos de
sentenças, fica difícil determinar o que cada chaves
realmente fecha. Na linguagem Ada, ao iniciar um if, ele é
finalizado com o end if. Do mesmo modo, ao final de um
loop, temos o end loop, o que torna a linguagem mais
legível.
8
Facilidade de Escrita
 É a medida do quão facilmente uma linguagem pode
ser usada para criar programas para um domínio.
 Como ocorre com a legibilidade, a facilidade de escrita
deve ser considerada no contexto do domínio de
problema alvo de uma linguagem. Por exemplo, as
facilidades de escrita de Visual BASIC e de C são
completamente diferentes para criar uma interface
gráfica do usuário, para o qual o VB é ideal.
9
Facilidade de Escrita
 Características avaliadas
 Simplicidade
 Ortogonalidade
 Tipos de dados
 Projeto de sintaxe
 Suporte para abstração
 Expressividade
10
Mesmos critérios
da Legibilidade
Características
1. Simplicidade e Ortogonalidade
 Se uma linguagem tem um grande número de construções,
alguns programadores não conhecerão todas elas.
 Isso pode levar ao uso incorreto de alguns recursos ou uma
utilização escassa de outros que podem ser mais elegantes
ou eficientes que os usados.
 No entanto, ortogonalidade demais pode prejudicar a
facilidade de escrita, pois erros podem passar
desapercebidos quando quaisquer combinações de
primitivas são válidas.
11
Características
2. Expressividade
 Pode se referir a diversas características.
 Em APL, por exemplo, expressividade significa a existência
de operadores muito poderosos que permitem muitas
computações com um programa muito pequeno.
 Em geral, uma linguagem expressiva especifica computações
de uma forma conveniente, em vez de deselegante.
 Ex. 1: Na linguagem C, a notação count++ é mais conveniente e
menor que count = count + 1.
 Ex. 2: A inclusão da sentença for em Java torna a escrita de laços de
contagem mais fácil do que com o uso do while.
12
Confiabilidade
 Um programa é confiável quando está de acordo com suas
especificações em todas as condições.
 Características avaliadas
 Simplicidade
 Ortogonalidade
 Tipos de dados
 Projeto de sintaxe
 Suporte para abstração
 Expressividade
 Verificação de tipos
 Tratamento de exceções
 Apelidos restritos
13
Características
1. Verificação de tipos
 É a execução de testes para detectar erros de tipo em um
programa, tanto por parte do compilador quanto durante a
execução de um programa.
 Como a verificação de tipos em tempo de execução é
dispendiosa, a verificação em tempo de compilação é mais
desejável.
 Quanto mais cedo os erros no programa forem detectados,
mais barato será fazer todos os reparos necessários.
14
Características
2. Tratamento de exceções
 Habilidade de um programa de interceptar erros em tempo
de execução, tomar medidas corretivas e então continuar.
 Linguagens como Ada, C++, Java e C# tem recursos
extensivos para tratamento de exceções, mas tais funções
são praticamente inexistentes em outras linguagens
amplamente utilizadas.
15
Características
3. Apelidos
 São utilizados quando é possível ter um ou mais nomes em
um programa para acessar a mesma célula de memória.
 Atualmente, considera-se que o uso de apelidos pode ser
perigoso em algumas linguagens de programação.
16
Características
4. Legibilidade e facilidade de escrita
 Um programa escrito em uma linguagem que não suporta
maneiras naturais de expressar os algoritmos exigidos
necessariamente usará estratégias artificiais. Assim, é mais
provável que aconteçam erros.
 Quanto mais fácil é escrever um programa, maior a
probabilidade de ele estar correto.
17
Custo
 O custo total de uma linguagem de programação é
uma função de muitas de suas características:
1. Treinamento de programadores para usar a linguagem
2. Escrever programas na linguagem
3. Compilar programas na linguagem
4. Executar programas escritos em uma linguagem
5. Custo do sistema de implementação da linguagem
6. Custo de uma confiabilidade baixa
7. Custo da manutenção de programas, que inclui tanto as
correções quanto as modificações para adicionar
funcionalidade
18
Decisão de qual Linguagem usar
 Considerando o tempo de execução, como um fator
importante, temos que considerar a implementação
dessa linguagem de programação, ou seja, verificar se a
linguagem é
19
COMPILADA
INTERPRETADA
HÍBRIDA
Tipos de Implementação
20
 COMPILADA
 Programas são convertidos para linguagem de máquina
 INTERPRETADA
 Programas são interpretados, instrução por instrução, por
outro programa
HÍBRIDA
 Meio termo entre compilador e interpretador
Tipos de Implementação
21
 COMPILADA: programas são convertidos para
linguagem de máquina
 Transforma o código de alto nível em código de máquina
 Processo de tradução lento; execução rápida.
 ANÁLISE LÉXICA: converte os caracteres do código-fonte em
objetos ou unidades léxicas
 ANÁLISE SINTÁTICA: transforma unidades léxicas em árvores
sintáticas que representam a estrutura do programa
 ANÁLISE SEMÂNTICA: gera um código intermediário
 GERAÇÃO DE CÓDIGO: gera o código de máquina
Tipos de Implementação
22
COMPILADA
Tipos de Implementação
23
 INTERPRETADA:
programas são interpretados, instrução
por instrução, por outro programa
 Sem tradução
 Erros são identificados e tratados imediatamente
 Execução MUITO mais lenta que em programas compilados
 Normalmente exigem mais espaço
Tipos de Implementação
24
INTERPRETADA
Tipos de Implementação
25
HÍBRIDA: meio termo entre compilador e
interpretador
 Linguagem de alto nível é traduzida para uma linguagem
intermediária que possua maior facilidade de
interpretação
 Mais rápido que a interpretação pura
 Exemplos:
 Programas em Perl são parcialmente compilados para
aprimorada de erros
 Implementações iniciais de Java eram híbridas
Tipos de Implementação
26
HÍBRIDA
Trade-Off no Projeto de Linguagens
27
 Trade-off: nome que se dá a decisão que consiste na
escolha de uma opção em detrimento à outra
 Critérios/características conflitantes
 CONFIABILIDADE x CUSTO DE EXECUÇÃO
 EXPRESSIVIDADE x LEGIBILIDADE
 FLEXIBILIDADE x SEGURANÇA
 ORTOGONALIDADE x SIMPLICIDADE
Trade-Off no Projeto de Linguagens
28
 Trade-off: nome que se dá a decisão que consiste na
escolha de uma opção em detrimento à outra
 Critérios/características conflitantes
 CONFIABILIDADE x CUSTO DE EXECUÇÃO
 EXPRESSIVIDADE x LEGIBILIDADE
 FLEXIBILIDADE x SEGURANÇA
 ORTOGONALIDADE x SIMPLICIDADE
Um programa é dito confiável
quando está de acordo com
suas especificações em todas
as condições. A confiabilidade
de uma linguagem está
associada aos testes
executados por ela os limites
impostos no projeto da
linguagem.
Trade-Off no Projeto de Linguagens
29
 Trade-off: nome que se dá a decisão que consiste na
escolha de uma opção em detrimento à outra
 Critérios/características conflitantes
 CONFIABILIDADE x CUSTO DE EXECUÇÃO
 EXPRESSIVIDADE x LEGIBILIDADE
 FLEXIBILIDADE x SEGURANÇA
 ORTOGONALIDADE x SIMPLICIDADE
O expressivo depende de
colocar tudo o que é
necessário para entender bem
Trade-Off no Projeto de Linguagens
30
 Trade-off: nome que se dá a decisão que consiste na
escolha de uma opção em detrimento à outra
 Critérios/características conflitantes
 CONFIABILIDADE x CUSTO DE EXECUÇÃO
 EXPRESSIVIDADE x LEGIBILIDADE
 FLEXIBILIDADE x SEGURANÇA
 ORTOGONALIDADE x SIMPLICIDADE
A ortogonalidade é
fortemente relacionada à
simplicidade: quanto mais
ortogonal o projeto de uma
linguagem, menor é o número
necessário de exceções às
regras da linguagem. Menos
exceções significam um maior
grau de regularidade no
projeto, o que torna a
linguagem mais fácil de
aprender, ler e entender.
Atividade Autônoma Aura
31
 Questão 1:
O mercado de jogos digitais movimentou mais de 1 bilhão de dólares anualmente no Brasil estando entre uns dos que mais
crescem. Nesse contexto o Brasil está entre os 5 países que mais consomem conteúdo mobile no mundo. Entre as
tendências do mercado mobile, estão os jogos de realidade aumentada. Suponha que você é um programador e foi
contratado por uma empresa para desenvolver um jogo que irá utilizar a realidade aumentada no qual você deve caçar e
destruir o corona vírus que está espalhado pela cidade. Esse jogo utiliza um engine gráfica 3D para poder gerar o ambiente
em realidade aumentada. Sabe-se que o processo de geração de imagens em 3D necessita de muito processamento, além
disso, ele deve ser de alta velocidade para poder gerar as imagens de forma fluída. Nesse quesito, esse tipo de aplicação
aproximasse das características de uma aplicação científica. A empresa espera que você entregue o projeto do jogo em curto
espaço de tempo além disso, como outros desenvolvedores poderão atuar no projeto, o código desenvolvido deve ser de
entendimento simples. Sabe-se também que o programador conhece as linguagens C++ e Python, desse modo, qualquer
outra linguagem utilizada no projeto implicará treinamento do mesmo. Espera-se que o jogo seja confiável e não apresente
travamentos durante sua execução em um hardware adequado. Supondo que a empresa em questão oferece as linguagens
abaixo com as características listadas:
A partir da análise das características das linguagens, justifique qual você escolheria para desenvolver o projeto especificado 
levando em consideração os requisitos pedidos.
a) C ou C++
b) C++ ou Python
c) Java ou C
d) Java ou Python
e) C++ ou Java
Linguagem Legibilidade Compilação Facilidade de Escrita
C Baixa Compilada Baixa
C++ Média Compilada Média
Java Média Híbrida Média
Python Alta Interpretada Alta
Atividade Autônoma Aura
32
 Questão 2:
Escolher uma linguagem de programação que melhor se adapte a solução de um problema passa pela avaliação de 
critérios que podem ser escolhidos como premissas para esse projeto. Existem diversos critérios que podem ser levados 
em consideração nesse processo. Levando em consideração os critérios apresentados abaixo, faça a relação adequada 
entre eles e sua descrição:
1. Legibilidade
2. Facilidade de escrita
3. Custo
( ) Critério associado ao treinamento de pessoas, facilidade de escrita da linguagem, tempo de compilação de programas
( ) Uma das características ligadas a esse critério é a expressividade
( ) Critério que foi introduzido após entendimento de que as linguagens deveriam ser pensadas não do ponto de vista do 
computador mas sim do ponto de vista do desenvolvedor
a) 1 – 2 – 3 
b) 1 – 3 – 2 
c) 3 – 1 – 2 
d) 2 – 3 – 1 
e) 3 – 2 – 1 
Prática
33
 TEMPO DE EXECUÇÃO entre as linguagens
 Tipos de implementação x tempo de execução
 C/C++
 PYTHON
 JAVA
COMPILADA
INTERPRETADA
HÍBRIDA
Prática
34
 TEMPO DE EXECUÇÃO entre as linguagens
 Implementação de três programas, nas três linguagens
 C/C++; Python; Java
 Verificar o tempo que cada um dos programas leva para ser
executado
 Explicar a diferença entre os tempos a partir das diferenças
entre as implementações das linguagens
Prática
35
 TEMPO DE EXECUÇÃO entre as linguagens
1. Escreva um programa que exiba a frase “Olá Mundo”.
2. Escreva um programa que imprima os números de 1 a 1000.
3. Escreva um programa que calcule o fatorial de um número.
 Gerar relatório com os resultados obtidos, explicando a
diferença entre os tempos a partir das diferenças entre as
implementações das linguagens.
 JOSELIT.JUNIOR@professores.estacio.br
 ASSUNTO: Lista I – Paradigmas de Linguagens de Programação
mailto:JOSELIT.JUNIOR@professores.estacio.br

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando