Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução
Linguagens e Paradigmas de Programação
2
Por que Estudar e
Linguagens de
Programação?
3
Domínios de Programação
● Aplicações científicas
○ Computação com ponto flutuante; array; eficiência
○ Fortran
● Aplicações comerciais
○ Relatórios, números decimais e caracteres
○ COBOL
● Inteligência artificial
○ Manipulação de símbolos em vez de números e uso de listas
○ LISP, Prolog
4
Domínios de Programação
● Programação de sistemas
○ Eficiência na execução por causa do uso contínuo
○ C
● Software para web
○ Coleção eclética de linguagens
■ Markup (e.g., HTML, CSS)
■ Scripting (e.g., PHP, JavaScript)
■ Propósito geral (e.g., Java)
5
Critérios de Avaliação
de Linguagens
6
Critérios de Avaliação da Linguagem
7
Critérios de Avaliação da Linguagem
8
Critérios de Avaliação: Legibilidade
Ponto de vista...
VS
9
Critérios de Avaliação: Legibilidade
Foco: Homem x Máquina
11
Critérios de Avaliação: Legibilidade
Muitas maneiras de fazer a mesma coisa
int main() {
int cont = 0;
count = count + 1;
cont += 1;
cont++;
++cont;
return 0;
}
12
Critérios de Avaliação: Legibilidade
Sobrecarga de operador
return 0;
}
13
Critérios de Avaliação: Legibilidade
● Tipos de dados
○ Tipos de dados adequados e pré-definidos
○ Ex: C não tem booleanos (ou tem?)
14
Critérios de Avaliação: Legibilidade
● Considerações de sintaxe
○ Formas dos identificadores (nomes): deve ser flexível
○ Palavras especiais: “ } ” vs “end” vs “end if”
○ Forma e significado: construções autodescritivas, palavras-chave
significativas (e.g., static)
15
Critérios de Avaliação: Legibilidade
● Ortogonalidade
○ “Um conjunto relativamente pequeno de construções primitivas pode
ser combinado em um número relativamente pequeno de maneiras
para construir as estruturas de controle e de dados da linguagem”
○ Toda combinação possível é aceita, gerando menos exceções às
regras da linguagem
16
int main() {
int vet[3] = {10,20,30};
int *ptr;
ptr = &vet[0];
ptr = ptr + 1; Sucessor?
// Imprime “20”
Ortogonalidade printf(“%d\n”, *ptr);
return 0;
}
vet
17
int main() {
short vet[3] = {10,20,30};
short *ptr;
ptr = &vet[0];
ptr = ptr + 1; Sucessor?
// Imprime “20”
Ortogonalidade printf(“%d\n”, *ptr);
return 0;
}
vet
18
void hello() {
printf(“Hello\n”);
}
Ortogonalidade
int main() {
void x;
hello();
return 0;
}
19
Critérios de Avaliação: Redigibilidade
● Simplicidade e ortogonalidade
20
Critérios de Avaliação: Redigibilidade
● Suporte à abstração
○ Capacidade de definir e usar estruturas ou operações complicadas
de uma maneira que permita ignorar muitos dos detalhes
■ Abstração de processo
■ Abstração de dados
● Exemplo:
○ Função de ordenação em relatórios
○ Implementação de árvore usando vetor
21
Critérios de Avaliação: Redigibilidade
obj1.inc() obj1:inc()
obj2.inc() obj2:inc()
22
Critérios de Avaliação: Redigibilidade
● Expressividade
● Operadores ou funções que realizam operações poderosas e/ou
complexas
○ Por exemplo: APL
23
Critérios de Avaliação: Redigibilidade
● Expressividade
○ Exemplo: Quicksort em Haskell
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
24
Critérios de Avaliação: Redigibilidade
25
Critérios de Avaliação: Redigibilidade
public class Foo {
26
Critério de Avaliação: Confiabilidade
● Verificação de tipos
○ Testar se existem erros de tipo
● Tratamento de erros
○ Interceptar erros em tempo de execução e realizar medidas
corretivas
C Java
r = fread (buf, 1, size, fd); try {
if (r != size) { fd.read(buf, 0, size);
// Erro } catch(IOException e) {
} // Erro
}
27
Critério de Avaliação: Confiabilidade
● Legibilidade e redigibilidade
○ Uma linguagem que não suporta maneiras naturais de
expressar algoritmos usará, necessariamente, métodos não-
naturais, reduzindo a confiabilidade
○ Programas fáceis de escrever têm maior chance de estarem
corretos
○ Programas fáceis de ler são mais fáceis de entender,
escrever e modificar
28
Critério de Avaliação: Custo
● Treinamento de programadores para usar a linguagem
● Custo de escrever programas: domínio da aplicação
● Custo de compilação: tempo e memória
○ Compiladores estão melhores
● Custo de execução: requisitos mínimos do sistema
○ Influenciado pelo projeto da linguagem
● Custo do sistema de implementação da linguagem
○ Disponibilidade de compiladores gratuitos
● Confiabilidade: baixa confiabilidade eleva os custos
● Manutenção de programas
29
Critérios de Avaliação: Outros
● Portabilidade
○ Facilidade de mudar programas de uma plataforma para a outra
● Generalidade
○ Uso da linguagem em uma ampla variedade de aplicações
● Boa definição
○ A completude e precisão da documentação oficial da linguagem
30
Resumo
● Razões para estudar conceitos de linguagens de programação
● Domínios de programação
○ Redigibilidade (writability)
○ Confiabilidade (reliability)
31