Buscar

Importância do Estudo de Linguagens de Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

GCC 105 – LINGUAGENS DE 
PROGRAMAÇÃO I
AULA 2 – Aspectos Preliminares
1º Semestre de 2015
Prof. Janderson Rodrigo de Oliveira
Universidade Federal de Lavras
Departamento de Ciência da Computação
Por que estudar LPs?
• Capacidade aumentada para expressar ideias.
– A profundidade com a qual as pessoas podem pensar é 
influenciada pelo poder de expressividade da linguagem que 
elas usam para comunicar seus pensamentos.
– A linguagem na qual se desenvolve um software impõe 
restrições nos tipos de estruturas de controle, estruturas de 
dados e abstrações que podem ser utilizadas.
– Conhecer uma variedade mais ampla de recursos das linguagens 
de programação pode reduzir as limitações no processo de 
desenvolvimento de software.
Por que estudar LPs?
• Embasamento para escolher linguagens adequadas.
– Conhecer uma faixa mais ampla de linguagens e construções de 
linguagens, torna o programador mais capacitado a escolher a 
que inclui os recursos melhor adaptados às características do 
problema a ser resolvido.
– Evitar o comodismo das linguagens “já conhecidas”.
Por que estudar LPs?
• Habilidade aumentada para aprender novas linguagens.
– O processo de aprender uma nova linguagem de programação 
pode ser difícil, especialmente quando uma pessoa não possui 
conhecimento sobre os conceitos de linguagens de 
programação de um modo geral.
– Uma vez que o entendimento dos conceitos fundamentais das 
linguagens tenha sido adquirido, é mais fácil compreender como 
esses conceitos são incorporados no projeto da linguagem 
aprendida. Exemplo: Orientação a Objetos e Java.
Por que estudar LPs?
• Melhor entendimento da importância da implementação.
– Aprender os conceitos de linguagens de programação leva a 
habilidade de usar uma determinada linguagem de maneira 
mais inteligente, utilizando-a da forma como ela foi projetada 
para ser utilizada.
– Exemplo: um pequeno subprograma recursivo chamado 
frequentemente pode ser uma decisão de projeto altamente 
ineficiente. 
Por que estudar LPs?
• Melhor uso de linguagens já conhecidas.
– Muitas linguagens de programação são grandes e complexas. 
– Ao utilizar os conceitos de linguagens de programação, os 
programadores podem aprender sobre partes antes 
desconhecidas e não utilizadas das linguagens que eles já 
trabalham.
Por que estudar LPs?
• Avanço geral da computação.
– É fundamental que programadores em atividade conheçam os 
conceitos fundamentais das linguagens de programação para 
poderem ler e entender descrições e avaliações de novas 
linguagens de programação.
Domínios de Aplicação
• Computadores têm sido aplicados a uma grande variedade de 
áreas. Por causa dessa diversidade, linguagens de 
programação com objetivos muito diferentes têm sido 
desenvolvidas.
• Principais áreas de aplicação:
– Aplicações científicas;
– Aplicações empresarias;
– Inteligência Artificial;
– Programação de sistemas;
– Software para a Web.
Domínios de Aplicação
• Aplicações científicas
– Início em 1940.
– Aplicações científicas têm estruturas de dados relativamente 
simples, mas requerem diversas computações aritméticas de 
ponto flutuante.
– Estruturas de dados: vetores e matrizes. Estruturas de controle: 
laços de contagem e seleção.
– A primeira linguagem para aplicações científicas foi o Fortran.
Domínios de Aplicação
• Aplicações empresariais
– Início em 1950.
– A primeira linguagem de alto nível para negócios a ser bem-
sucedida foi o COBOL (1960).
– Linguagens de negócios são caracterizadas por facilidades para a 
produção de relatórios elaborados, maneiras precisas de 
descrever e armazenar números decimais e caracteres, e a 
habilidade de especificar operações aritméticas decimais.
Domínios de Aplicação
• Definições:
– Linguagem de alto nível: linguagem com um nível de abstração 
elevado, longe do código de máquina e mais próxima a 
linguagem humana. As características da arquitetura do 
computador são abstraídas nas linguagens de alto nível.
– Linguagem de baixo nível: linguagem de programação que 
compreende as características da arquitetura do computador. 
Assim, utiliza instruções do processador, conhecendo os 
registradores da máquina.
Domínios de Aplicação
• Inteligência Artificial (IA)
– IA é uma ampla área de aplicações computacionais 
caracterizada pelo uso de computações simbólica em vez de 
numéricas.
– Computações simbólicas são aquelas nas quais símbolos, 
compostos de nomes em vez de números, são manipulados.
– A primeira linguagem de programação desenvolvida para IA foi a 
linguagem funcional LISP (1959).
– Em 1970, uma abordagem alternativa surgiu: programação 
lógica usando a linguagem Prolog.
Domínios de Aplicação
• Programação de sistemas
– O sistema operacional e todas as ferramentas de suporte à 
programação de um sistema de computação são coletivamente 
conhecidos como seu software de sistema.
– O sistema operacional UNIX é escrito quase todo em C. Algumas 
características de C fazem com que ele seja uma boa escolha 
para a programação de sistemas. 
Domínios de Aplicação
• Software para Web
– A World Wide Web é mantida por uma eclética coleção de 
linguagens. Exemplos:
• Linguagens de marcação: XHTML.
• Linguagem de programação de propósito geral: Java.
• Linguagem de scripting: JavaScript ou PHP.
Domínios de Aplicação
• Definições:
– Linguagens de marcação: conjunto de códigos aplicados a um 
texto ou a dados, com o fim de adicionar informações 
particulares sobre esse texto ou dado, ou sobre trechos 
específicos.
– Linguagem de scripting: linguagens de programação executadas 
no interior de programas e/ou outras linguagens de 
programação.
Critérios de Avaliação
• Critérios:
– Legibilidade;
– Facilidade de escrita;
– Confiabilidade;
– Custo.
Critérios de Avaliação
• Legibilidade:
– Facilidade com a qual programas pode ser lidos e entendidos.
– Antes de 1970, as construções de linguagens foram projetadas 
mais do ponto de vista do computador do que do usuários.
– Nos anos 1970, a manutenção foi reconhecida como uma parte 
principal do ciclo de desenvolvimento de software.
– Como a facilidade de manutenção é determinada, em grande 
parte, pela legibilidade, esta característica se tornou uma 
medida importante de qualidade.
Critérios de Avaliação
• Fatores que influenciam a legibilidade:
1. Simplicidade geral
– Uma linguagem com muitas construções básicas é mais difícil de 
aprender do que uma com poucas.
– Outro ponto desfavorável: multiplicidade de recursos, ou seja, 
existir mais de uma maneira de realizar uma operação: Exemplo: 
incremento de uma variável inteira em Java e C/C++.
– Outro ponto desfavorável: sobrecarga de operadores - recurso 
no qual um operador tem mais de um significado.
Critérios de Avaliação
• Fatores que influenciam a legibilidade:
2. Ortogonalidade
– Significa que um conjunto relativamente pequeno de 
construções primitivas pode ser combinado a um número 
relativamente pequeno de formas para construir as estruturas 
de controle e de dados da linguagem.
– Além disso, cada possível combinação de primitivas é legal e 
significativa.
Critérios de Avaliação
• Fatores que influenciam a legibilidade:
2. Ortogonalidade
– Exemplo: Tipos primitivos de dados (inteiro, ponto flutuante, 
ponto flutuante com precisão dupla e caractere). Operadores de 
tipo (vetor e ponteiro).
– A ortogonalidade vem da simetria de relacionamentos entre 
primitivas. Uma falta de ortogonalidade leva a exceções às 
regras de linguagem.
Critérios de Avaliação
• Fatores que influenciam a legibilidade:
2. Ortogonalidade
– Exemplo de falta de ortogonalidade: em C, os registros(structs) 
podem ser retornados por funções, mas os vetores não. 
Parâmetros são passados por valor, a menos que sejam vetores, 
o que faz com que sejam passados por referência.
– Muita ortogonalidade também pode causar problemas. Um alto 
grau de ortogonalidade resulta em uma explosão de 
combinações. Mesmo se as combinações forem simples, seu 
número eleva a complexidade.
Critérios de Avaliação
• Fatores que influenciam a legibilidade:
3. Tipos de dados
– A presença de mecanismos adequados para definir tipos e 
estruturas de dados é outro auxílio significativo a legibilidade.
– Exemplo: tipo numérico como um tipo booleano.
Critérios de Avaliação
• Fatores que influenciam a legibilidade:
4. Projeto de sintaxe
– Formato dos identificadores.
– Palavras especiais.
– Forma e significado.
Critérios de Avaliação
• Facilidade de escrita:
– Medida do quão facilmente uma linguagem pode ser usada para 
criar programas para um domínio.
– A maioria das características de linguagem que afetam a 
legibilidade também afeta a facilidade de escrita.
Critérios de Avaliação
• Outros fatores que influenciam a facilidade de escrita:
1. Suporte à abstração
– Abstração significa a habilidade de definir e usar estruturas ou 
operações “complicadas” de forma a permitir que muitos 
detalhes sejam ignorados.
– Exemplo: uso de um subprograma para ordenação. Sem o 
subprograma, o código de ordenação teria de ser replicado em 
todos os lugares onde fosse preciso, o que tornaria o programa 
muito longo e tedioso de ser escrito.
Critérios de Avaliação
• Outros fatores que influenciam a facilidade de escrita:
2. Expressividade
– Em geral, uma linguagem de programação expressiva especifica 
computações de forma conveniente.
– Exemplo: Em C, a notação count++ é mais conveniente e menor 
do que count = count + 1.
Critérios de Avaliação
• Confiabilidade:
– Um programa é dito confiável quando está de acordo com suas 
especificações em todas as condições.
– A maioria das características de linguagem que afetam a 
legibilidade e a facilidade de escrita também afeta a 
confiabilidade.
Critérios de Avaliação
• Outros fatores que influenciam a confiabilidade:
1. Verificação de tipos
– A verificação de tipos é a execução de testes para detectar erros 
de tipos em um programa, tanto por parte do compilador 
quanto durante a execução de um programa.
– Quanto mais cedo os erros dos programas forem detectados, 
menos caro é fazer todos os reparos necessários.
Critérios de Avaliação
• Outros fatores que influenciam a confiabilidade:
2. Tratamento de exceções
– A habilidade de um programa de interceptar erros em tempo de 
execução, tomar medidas corretivas e então continuar a 
execução é uma ajuda óbvia para a confiabilidade.
Critérios de Avaliação
• Custo
1. O custo de treinar programadores para usar a linguagem;
2. O custo de escrever programas na linguagem;
3. O custo de compilar programas na linguagem;
4. O custo de executar programas na linguagem;
5. O custo do sistemas de implementação da linguagem;
6. O custo de uma confiabilidade baixa;
7. O custo de manter programas, que inclui tanto as correções 
quanto as modificações para adicionar novas funcionalidades.
Métodos de Implementação
• As linguagens de programação podem ser implementadas por 
um de três métodos gerais:
– Compilação
– Interpretação pura
– Sistemas de implementação híbridos
Compilação
Compilação
• Programas podem ser traduzidos para linguagem de máquina, 
a qual pode ser executada diretamente no computador.
• Exemplos de linguagens compiladas: C, COBOL e Ada.
• A linguagem que um compilador traduz é chamada de 
linguagem fonte.
• O analisador léxico agrupa os caracteres do programa fonte 
em unidades léxicas, que são identificadores, palavras 
especiais, operadores e símbolos de pontuação.
Compilação
• O analisador sintático constrói estruturas hierárquicas 
chamadas de árvores de análise sintática (parse trees) que 
representam a estrutura sintática do programa.
• O gerador de código intermediário produz um programa em 
uma linguagem diferente, em um nível intermediário entre o 
programa fonte e o programa em linguagem de máquina. Em 
muitos casos, o código intermediário são linguagens de 
montagem.
Compilação
• Programa fonte: 
– Linguagem de alto nível.
– Características: laços, variáveis, objetos, independente de 
máquina.
• Linguagem de montagem: 
– Linguagem de baixo nível.
– Sequência de instruções, registradores, posições de memória, 
dependente de máquina.
• Linguagem de máquina:
– Código binário (0s e 1s).
Compilação
• O analisador semântico é parte do gerador de código 
intermediário, que verifica erros difíceis de serem detectados 
na análise sintática, como erros de tipos.
• O gerador de código traduz a versão de código intermediário 
otimizado do programa em um programa equivalente em 
linguagem de máquina.
• A tabela de símbolos contém informações de tipos e atributos 
de cada um dos nomes definidos pelo usuário no programa. 
Compilação
• Apesar da linguagem de máquina gerada por um compilador 
poder ser executada diretamente no hardware, ela 
praticamente sempre precisa rodar com algum outro código.
• A maioria dos programas de usuário utiliza programas do 
sistema operacional (exemplo: entrada e saída).
• Antes dos programas de usuários serem executados, aqueles 
requeridos do sistema operacional devem ser encontrados e 
ligados com o programa do usuário. Tal tarefa é realizada por 
um programa de sistema chamado de ligador (linker).
Interpretação Pura
Interpretação Pura
• Nesta abordagem, os programas são interpretados por outro, 
chamado interpretador, sem tradução.
• O interpretador age como uma simulação de uma máquina 
que trata de sentenças de programa de alto nível em vez de 
instruções de máquina.
• Essa simulação fornece uma máquina virtual para a 
linguagem.
Interpretação Pura
• A interpretação pura tem a vantagem de permitir uma fácil 
implementação de muitas operações de depuração em código 
fonte.
• Em contrapartida, esta abordagem é de 10 a 100 vezes mais 
lenta do que os sistemas compilados. Motivo: decodificação 
das sentenças em linguagens de máquina.
• Linguagens puramente interpretadas:
– Anos 1960: APL, SNOBOL e LISP.
– Anos 1980: praticamente extintas.
– Retorno: linguagens de scripting – JavaScript e PHP.
Sistemas de Implementação Híbridos
Sistemas de Implementação Híbridos
• Meio termo entre os compiladores e interpretadores puros.
• Traduzem programas em linguagem de alto nível para uma 
linguagem intermediária projetada para facilitar a 
interpretação.
• Os sistema de implementação híbridos são mais rápidos do 
que a interpretação pura, porque as sentenças de linguagem 
fonte são decodificadas apenas uma vez.
Sistemas de Implementação Híbridos
• Linguagens híbridas:
– Perl
– Primeiras implementações de Java
• Formato intermediário: bytecode, fornece portabilidade para 
qualquer máquina que tenha um interpretador de bytecodes
e um sistema de tempo de execução associado (Máquina 
Virtual Java).

Outros materiais