Baixe o app para aproveitar ainda mais
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
Compartilhar