Segurança e auditoria de sistemas Carlos Oberdan Rolim Ciência da Computação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de...
Transcript of Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de...
![Page 1: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/1.jpg)
Linguagem de programação I A
Carlos Oberdan Rolim
Ciência da ComputaçãoSistemas de Informação
Versão: 27022014_01
![Page 2: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/2.jpg)
Introdução
![Page 3: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/3.jpg)
Sumário
Motivos para estudar Conceitos de Linguagens de Programação
Domínios da Programação
Critérios de Avaliação de Linguagens
Custos
Trade-offs
Influências sobre o Projeto da Linguagem
Metodologias
Categorias de linguagens
Métodos de Implementação
![Page 4: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/4.jpg)
Motivos para estudar CLPs
Aumento da capacidade de expressar idéias;
Conhecer os recursos e limites das linguagens nos permite
otimizar o uso da mesma;
Maior conhecimento para a escolha de linguagens
apropriadas;
![Page 5: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/5.jpg)
Motivos para estudar CLPs
Muitos programadores aprendem por conta...
Conhecer os diferentes recursos da diferentes linguagens facilita o
processo de escolha de uma linguagem compatível com o nível de
abstração exigido pelo problema
Capacidade aumentada para aprender novas linguagens;
![Page 6: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/6.jpg)
Domínios da programação
Diferentes empregos da computação
- Áreas de uso
Aplicações Científicas
- O grande motivo da computação;
- Estruturas de dados simples, laços de contagem e seleções;
- Fortran e Algol 60, linguagem assembly;
Aplicações Comerciais
- Final década de 50;
- Geração de relatórios, armazenamento de números decimais
- COBOL
![Page 7: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/7.jpg)
Domínios da programação
Inteligência Artificial
- Utilização de computação simbólica em vez de numérica;
- LISP (1959) e Prolog (1970)
Programação de Sistemas
- Sistema Operacional (software básico)
- Algol e C
![Page 8: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/8.jpg)
Domínios da programação
Linguagem de scripting
- Listas de comandos a serem executados
- AWK, Perl, Python
Programação Web
- Popularização da Internet
- Mudou completamente a forma de pensar e desenvolver sistemas
- Inicio como simples páginas
- Sistemas completos
- Linguagens server side x client side
o PHP
o JavaScript
- Linguagens compiladas x interpretadas x hibridas
![Page 9: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/9.jpg)
Critérios de avaliação da linguagem
Legibilidade (Readability)
- Quão facilmente um programa pode ser lido e entendido
Capacidade de escrita (Writability)
- Quão facilmente uma linguagem pode ser usada para criar programas
Confiabilidade (Reliability)
- Conformidade com as especificações sob todas as condições
Custo
- O custo final de uma linguagem é uma função de suas características
![Page 10: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/10.jpg)
Legibilidade (Readability)
Simplicidade global
- Linguagens com um pequeno número de componentes básicos são mais fáceis de
aprender
- Multiplicidade de recursos (mais de uma maneira para realizar uma operação particular)
- Sobrecarga (overloading) de um operador, ou seja, um único símbolo possui mais de um
significado.
Um exemplo em C para incrementar uma variável inteira simples:
cont = cont +1
cont += 1
cont++
++cont
![Page 11: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/11.jpg)
Legibilidade (Readability)
Ortogonalidade
- Diz respeito a capacidade da LP permitir ao programador combinar seus conceitos básicos
sem que se produzam efeito anômalos nessa combinação.
- Assim uma LP é tão mais ortogonal quanto menor for o numero de exceções aos seus
padrões regulares.
- LPs ortogonais são interessantes porque o programador pode prever, com segurança, o
comportamento de uma determinada combinação de conceitos
![Page 12: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/12.jpg)
Legibilidade (Readability)
Instruções de controle
- A existência de estruturas de controle bem conhecidas (exemplo: while)
while (incr < 20) {
while (sum <= 100) {
sum += incr;
}
incr++;
}
loop1:
if (incr >= 20) goto out;
loop2:
if (sum > 100) goto next;
sum += incr;
goto loop2;
next:
incr++;
goto loop1;
out:
![Page 13: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/13.jpg)
Legibilidade (Readability)
Tipos de dados e estruturas
- A presença de facilidades adequadas para definir tipos de dados e estruturas de dados
- Exemplo: suponha que em uma linguagem não exista um tipo de dado booleano e um tipo numérico seja usado para substituí-lo:
o timeOut = 1 (significado não claro)
o timeOut = true (significado claro)
![Page 14: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/14.jpg)
Legibilidade (Readability)
Considerações sobre a sintaxe
- Formas identificadoras
oRestringir os identificadores a tamanhos muito pequenos prejudica a
legibilidade
- Palavras especiais
oFormas das palavras especiais de uma linguagem (exemplo: while,
class, for e begin-end)
oPalavras especiais de uma linguagem podem ser usadas como nomes
de variáveis?
- Forma e significado
oProjetar instruções de forma que sua aparência indique sua finalidade
![Page 15: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/15.jpg)
Capacidade de Escrita (Writability)
Simplicidade e ortogonalidade- Poucos construtores, um pequeno número de primitivas, um pequeno
conjunto de regras para combiná-los
Suporte para abstração- A capacidade de definir e de usar estruturas ou operações
complexas de maneira que permita ignorar muitos dos detalhes
Expressividade- Um conjunto relativamente conveniente de maneiras de especificar
operadores
- Exemplos:
• count++ é mais conveniente do que count = count + 1
• a inclusão do for em muitas linguagens modernas
![Page 16: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/16.jpg)
Confiabilidade (Reliability)
Verificação de tipos- Testar se existem erros de tipos
Manipulação de Exceções- Capacidade de interceptar erros em tempo de execução e por em
prática medidas corretivas
![Page 17: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/17.jpg)
Confiabilidade (Reliability)
Apelidos (Aliasing)- Presença de dois ou mais métodos, ou nomes, distintos que
referenciam a mesma célula de memória
Legibilidade (Readability) e Capacidade de Escrita (Writability)- Uma linguagem que não suporta maneiras naturais de expressar os
algoritmos usará, necessariamente, abordagens não-naturais. Assim, a legibilidade será reduzida.
- A legibilidade afeta a confiabilidade tanto na escrita quanto na manutenção.
![Page 18: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/18.jpg)
Custo
Treinamento dos programadores para usar a linguagem
Escrita de programas na linguagem
Compilação dos programas na linguagem
Execução dos programas
Sistema de implementação da linguagem:
- IDE (Integrated Development Environment) free x pagas
Confiabilidade
- Confiabilidade baixa leva a altos custos
Manutenção dos programas
![Page 19: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/19.jpg)
Trade-offs
Critérios Conflitantes: confiabilidade X custo de execução
- Verificação dinâmica de tipos;
- Índices de arrays
expressividade X legibilidade
- conjunto poderoso de operadores leva a expressões matemáticas concisas mas pouco legíveis
flexibilidade X segurança
- uniões em C;
![Page 20: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/20.jpg)
Outros critérios de avaliação
Portabilidade
- Quão facilmente um programa pode ser movido de uma
implementação para outra
Generalidade
- Seu uso em uma gama de aplicações
Boa definição (Well-definedness)
- A precisão e o quanto a definição oficial da linguagem é completa
![Page 21: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/21.jpg)
Influências sobre o projeto da linguagem
Arquitetura do Computador
- Linguagens são desenvolvidas com base na arquitetura
mais usada, conhecida como arquitetura von Neumann*
*(se caracteriza pela possibilidade de uma máquina digital armazenar
seus programas no mesmo espaço de memória que os dados, podendo
assim manipular tais programas – usa CPU e Memória)
![Page 22: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/22.jpg)
Influências sobre o projeto da linguagem
Metodologias de programação
- Novas metodologias de desenvolvimento de software (exemplo,
desenvolvimento orientado a objetos) levam a novos paradigmas de
programação, e novas linguagens de programação
![Page 23: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/23.jpg)
Metodologias
Ausência de metodologia
Programação estruturada
oDécada de 70;
oMetodologias de projeto top-down e botton-up;
oOrientação aos processos;
oAlgol, Pascal, C.
![Page 24: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/24.jpg)
Metodologias
Programação orientada a objetos
oDécada de 80
oAbstração de dados, herança, encapsulamento;
ovinculação dinâmica de tipos;
oSmalltalk; C++; Java
Programação orientada a eventos
oAplicação “reage” a eventos
![Page 25: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/25.jpg)
Metodologias
Programação orientada a aspectos
oobjetivo separar o código segundo a sua importância para a
aplicação, permitindo que o programador encapsule o código
secundário em módulos separados do restante da aplicação
![Page 26: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/26.jpg)
Categorias de linguagens
Imperativas: utilizam a variável como elemento de abstração da célula de memória; (C, Java)
Funcionais: Principal maneira de computar é através da aplicação de funções para os parâmetros fornecidos - somente recursão; (LISP)
![Page 27: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/27.jpg)
Categorias de linguagens
Lógicas: baseadas em regras; não há um fluxo particular de execução; Aplicam-se um conjunto de regras a um conjunto de dados através de uma função de inferência obtendo-se novos dados; (Prolog)
Marcação: não especificam computações, mas descrevem a aparência geral de documentos (html, latex)
![Page 28: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/28.jpg)
Métodos de implementação
1) Compilação- Traduz um programa de alto-nível para o código de máquina
- Tradução lenta
- Execução rápida
- O processo de compilação possui várias fases:oAnálise léxica
• Converte caracteres de um programa fonte em unidades léxicas
oAnálise sintática
• Transforma unidades léxicas em parse trees, as quais representam a estrutura sintática do programa
oAnálise semântica
• Gera código intermediário
oGeração de código
• Código de máquina é gerado
- Exemplos: C, Cobol, Ada, Pascal...
![Page 29: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/29.jpg)
Programa Fonte
Analisador
léxico
Analisador
sintático
Gerador de Código
Intermediário (e
analisador sintático)
Gerador de
Código
Otimização
Computador
Tabela de
símbolos
Unidades Léxicas
Árvores de Análise (parse trees)
Código Intermediário
Linguagem de Máquina
Resultados
(Opcional)
Dados de
Entrada
Métodos de implementação (compilação)
![Page 30: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/30.jpg)
2) Interpretação Pura
- Sem tradução
- Execução lenta (10 a 100 vezes mais lento que programas compilados)
- Requer mais espaço
- Exemplo: Javascript, scripts UNIX
Métodos de implementação
Programa Fonte
Dados de
Entrada
Resultados
Interpretador
![Page 31: Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: 27022014_01.](https://reader036.fdocumentos.tips/reader036/viewer/2022070311/552fc13b497959413d8d92f6/html5/thumbnails/31.jpg)
3) Sistemas de implementação Híbridos
- Um meio-termo entre compilador e interpretador puro
- Baixo custo de tradução
- Velocidade de execução média
- Mais rápido do que interpretação pura
- Ex.: Perl, Java
Programa Fonte
Analisador
léxico
Analisador
sintático
Gerador de Código
Intermediário (e
analisador sintático)
Unidades Léxicas
Árvores de Análise (parse trees)
Código Intermediário
Dados de
Entrada
Resultados
Interpretador
Métodos de implementação