Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br...

53
Aspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Transcript of Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br...

Page 1: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Aspectos preliminares

Marco A L Barbosamalbarbo.pro.br

Departamento de InformáticaUniversidade Estadual de Maringá

cbaEste trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional.

http://github.com/malbarbo/na-lp-copl

Page 2: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Conteúdo

Razões para estudar conceitos de linguagens de programação

Domínios de programação

Classes de linguagens

Métodos de implementação

Critérios para avaliação de linguagens

Influências no projeto de linguagens

Page 3: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Razões para estudar conceitos delinguagens de programação

3/53

Page 4: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Razões para estudar conceitos de linguagens de programação

• Aumentar a capacidade de expressar ideias

• Melhorar as condições de escolha da linguagem apropriadapara cada problema

• Aumentar a capacidade de aprender novas linguagens

• Melhorar o uso das linguagens já conhecidas

• Entender a importância da implementação

• Avanço da área de computação

4/53

Page 5: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Domínios de programação

5/53

Page 6: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Domínios de programação

Linguagens de programação com objetivos diferentes

• Desde controle de usinas nucleares até jogos em dispositivosmóveis

6/53

Page 7: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Domínios de programação

Aplicações científicas

• Estruturas simples (arranjos e matrizes)

• Muitas operações com pontos flutuantes

• Fortran, C/C++

• Recentemente

• Hardware especializado (GPU, TPU)

• Python (numpy), Octave (Mathlab), Julia

7/53

Page 8: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Domínios de programação

Aplicações comerciais

• Inicialmente

• Integração com banco de dados

• Produção de relatórios

• Armazenamento e manipulação de números decimais e texto

• Cobol

• Atualmente

• Muitos requisitos

• Muitas linguagens

8/53

Page 9: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Domínios de programação

Inteligência artificial

• Manipulação de símbolos (estruturas encadeadas ao invés dearranjos)

• Criação e execução de código

• Lisp, Prolog

• Atualmente

• Métodos numéricos

• Python, C/C++

9/53

Page 10: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Domínios de programação

Software de sistema

• Software básico e ferramentas de suporte a programação

• Sistemas operacionais

• Construções para interfaceamento com dispostos externos

• Eficiência devido ao uso contínuo

• Compiladores e interpretadores

• E os softwares que são executados continuamente?

• Navegadores, Sistemas web

• C/C++, D, Go, Rust

10/53

Page 11: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Domínios de programação

Sistemas Web

• Apresentação de conteúdo dinâmico

• Código junto com a tecnologia de apresentação

• Inicialmente

• PHP, Javascript

• Segurança

• Escalabilidade

• Desempenho

• Integração com sistemas existentes

11/53

Page 12: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Classes de linguagens

12/53

Page 13: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Classes de linguagens

É comum a seguinte classificação hierárquica:

• Imperativas

• Procedurais (Fortran, Pascal, C, …)

• Orientada a Objetos (Smalltalk, Java, C++, …)

• Declarativas

• Funcionais (Lisp/Scheme, Haskell, Ocaml, …)

• Lógicas (Prolog)

13/53

Page 14: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Classes de linguagens

A maioria das linguagens é multiparadigma, por isso, ao invés declassificação hierárquica é mais útil identificar as características decada paradigma presente em uma linguagem.

14/53

Page 15: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Classes de linguagens

A seguir, mostramos como o problema de encontrar o valormáximo em uma lista não vazia de números inteiros pode serresolvido utilizando os paradigmas imperativo, funcional e lógico.

15/53

Page 16: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Imperativo

• Inicialize a variável max com o primeiro elemento da lista• Para cada elemento x da lista a partir do segundo elemento,

faça:• Se x é maior do max, então atribua o valor x para max

• A variável max contém o maior valor da lista

16/53

Page 17: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Imperativo

Código em C

int maximo(int lst[], size_t n){

assert(n > 0);int max = lst[0];for (int i = 1; i < n; i++) {

if (lst[i] > max) {max = lst[i];

}}return max;

}

17/53

Page 18: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Funcional

• O valor maximo(lst) é definido como:• O primeiro elemento de lst se lst só tem um elemento• O primeiro elemento de lst se ele é maior do que o maximo

do restante de lst• maximo do restante de lst se ele é maior ou igual ao primeiro

elemento de lst• Para computar o valor de maximo de uma dada lista, expanda

e simplifique esta definição até que ela termine

18/53

Page 19: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Funcional

Código em Racket

(define (maximo lst)(cond

[(empty? (rest lst))(first lst)]

[(> (first lst) (maximo (rest lst)))(first lst)]

[else (maximo (rest lst))]))

19/53

Page 20: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Lógico

• A proposição maximo(lst, x) é verdadeira se:• x é o único elemento de lst; ou• x é primeiro elemento de lst e maximo(restante lst, m) é

verdadeiro e x é maior do que m; ou• p é o primeiro elemento de lst e maximo(restante lst, x)

é verdadeiro x é maior ou igual a p• Para computar o valor máximo de uma dada lista, busque por

um valor x que permita provar que a proposiçãomaximo(lst, x) é verdadeira.

20/53

Page 21: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Lógico

Código em Prolog

maximo([X], X).maximo([X | Xs], X) :- maximo(Xs, M), X > M.maximo([P | Xs], X) :- maximo(Xs, X), X >= P.

21/53

Page 22: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Classes de linguagens

Nível de abstração

• Baixo nível

• Poucas abstrações sobre os detalhes do computador

• Alto nível

• Abstrações sobre os detalhes do computador

22/53

Page 23: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Classes de linguagens

Linguagens de scripting

• “Juntar” programas escritos em outras linguagens

23/53

Page 24: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Métodos de implementação

24/53

Page 25: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Métodos de implementação

• Compilação

• Interpretação

• Híbrido

25/53

Page 26: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Métodos de implementação

Interpretador

de comandos

do sistema

operacional

Interpretador

Scheme

Compilador C

Computador

virtual C

Computador virtual

Ada

Compilador

Ada

. . .

. . .

Montador

Computador

virtual de

linguagem

de montagem

Máquina

Virtual Java

Compilador

Java

.NET

Common

Language

Runtime

Compilador

VB.NET

CompiladorC#

Computador

virtual

VB.NET

Computador

virtual C#

Máquina

pura

Interpretador de

macroinstruções

Sistema operacional

Computador

virtual Java

Computador

virtual Scheme

Interface em camadas de computadores virtuais, fornecida por umsistema de computação típico

26/53

Page 27: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Métodos de implementação - Compilação

Programafonte

Analisadorléxico

Analisadorsintático

Gerador de códigointermediário e

analisadorsemântico

Otimização(opcional)

Tabela desímbolos

Geradorde código

Computador

Resultados

Dados de entradaLinguagemde máquina

Códigointermediário

Árvores de análise sintática

Unidades léxicas

27/53

Page 28: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Métodos de implementação - Interpretação

Programa

fonte

Interpretador

Resultado

Dados de entrada

28/53

Page 29: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Métodos de implementação - Híbrido

Programa

fonte

Interpretador

Resultado

Dados de

entrada

Analisador

léxico

Analisador

sintático

Gerador de

código

intermediário

Árvores de análise sintática

Unidades léxicas

Códigointermediário

29/53

Page 30: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Critérios para avaliação de linguagens

30/53

Page 31: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Critérios para avaliação de linguagens

• Como os recursos das linguagens influenciam odesenvolvimento de software?

• Alguns critérios podem ser controversos

• Alguns critérios são objetivos, enquanto outros não

• Algumas pessoas valorizam mais alguns critérios do que outros

• O Sebesta valoriza muito as características que permitem queerros possam ser detectados em tempo de compilação, masestas características podem tornam os programas mais difíceisde serem mantidos do que o necessário

31/53

Page 32: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Critérios para avaliação de linguagens

• Legibilidade (facilidade de leitura)

• Deve ser considerada em relação ao domínio do problema

• Facilidade de escrita

• Deve ser considerada em relação ao domínio do problema

• Confiabilidade

• Custo

32/53

Page 33: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Critérios para avaliação de linguagens

Característica Legibilidade Facilidade de escrita Confiabilidade

Simplicidade • • •Ortogonalidade • • •Tipos de dados • • •Projeto de sintaxe • • •Suporte para abstração • •Expressividade • •Verificação de tipos •Tratamento de exceções •Apelidos restritos •

33/53

Page 34: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Legibilidade

Simplicidade

• Um conjunto bom de características e construções

• Poucas formas de expressar cada operação

• Sobrecarga de operadores?

• Muito simples não é bom (assembly)

34/53

Page 35: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Legibilidade

Ortogonalidade

• Poucas características podem ser combinadas de váriasmaneiras

• Uma característica deve ser independente do contexto que éusada (exceções a regra são ruins)

• Muito ortogonalidade não é bom (Algol68)

• Linguagens funcionais oferecem uma boa combinação desimplicidade e ortogonalidade

35/53

Page 36: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Exemplo de falta de ortogonalidade em C

typedef struct par {int primeiro;int segundo;

} par;

void f(par x) {x.primeiro = 10;

}

void test_f() {par x = {1, 2};// passagem de parâmetro// por valorf(x);assert(x.primeiro == 1);

}

void g(int x[2]) {x[0] = 10;

}

void test_g() {int x[2] = {1, 2};// vetores não podem ser passados// como parâmetro por valor!g(x);assert(x[0] == 10);

}

36/53

Page 37: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Legibilidade

Tipos de dados

• Tipos pré-definidos adequados

37/53

Page 38: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Legibilidade

Sintaxe

• Flexibilidade para nomear identificadores

• Forma de criar sentenças compostas

• A forma deve ter relação com o significado

38/53

Page 39: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Facilidade de escrita

Simplicidade e ortogonalidade

• Poucas construções e um conjunto consistente de formas decombinação

39/53

Page 40: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Facilidade de escrita

Suporte para abstração

• Definir e usar estruturas e operações de maneira que osdetalhes possam ser ignorados

• Suporte a subprogramas

• Suporte a tipos abstratos de dados

40/53

Page 41: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Facilidade de escrita

Expressividade

• Maneira conveniente de expressar a computação

41/53

Page 42: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Facilidade de escrita

Algumas linguagens tem a sintaxe e/ou a semântica tão densas ebizarras que são chamadas de “Linguagens somente de escrita”!

42/53

Page 43: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Confiabilidade

Um programa é dito confiável quando está de acordo com suasespecificações em todas as condições

• Verificação de tipos

• Tratamento de exceções

• Apelidos (um ou mais nomes para acessar a mesma célula dememória)

• Facilidade de leitura e escrita

43/53

Page 44: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Confiabilidade

Os testes automatizados são extremamente importantes paraaumentar a confiabilidade/manutenibilidade dos programas

• Especificação executável

• Frameworks de testes

44/53

Page 45: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Uso de apelidos em C++, Java e Rust

C++

vector<int> v = {10, 20, 30};int soma = 0;for (int &x : v) {

soma += x;if (x == 20) {

v.push_back(1);}

}assert(soma == 61);

Pode ou não falhar… x podereferenciar memória desalocada

Java

ArrayList<Integer> lista =new ArrayList<>(

asList(10, 20, 30));int soma = 0;for (Integer x : lista) {

soma += x;if (x == 20) {

lista.add(1);}

}assert soma == 61;

Falha na execução: lista.add gera oerrojava.util.ConcurrentModificationException

Rust

let mut v = vec![10, 20, 30];let mut soma = 0;for &x in &v {

soma += x;if x == 20 {

v.push(1);}

}assert_eq!(soma, 61);

Falha na compilação: cannot borrowv as mutable because it is alsoborrowed as immutable

45/53

Page 46: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Custo

Os fatores que mais afetam os custos são

• Desenvolvimento

• Manutenção

• Confiabilidade

46/53

Page 47: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Custo

• Treinar programadores

• Escrever programas

• Aspectos importantes

• Ambiente de desenvolvimento (IDE)

• Gerenciamento de pacotes

47/53

Page 48: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Custo

• Compilar programas

• Executar programas

• Aspectos importantes

• Compiladores/Interpretadores (software livre)

• Linguagens com execução eficiente

48/53

Page 49: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Custo

• Confiabilidade

• Manutenção

49/53

Page 50: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Outros

Outros critérios

• Portabilidade

• Padronização

Diferentes visões

• Programador

• Projetista da linguagem

• Implementador da linguagem

50/53

Page 51: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Influências no projeto de linguagens

51/53

Page 52: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Influências no projeto de linguagens

Arquitetura do Computador

• Arquitetura de von Neumann

• Arquiteturas multicore

• Outras?

Metodologias de Programação

• Orientada a processos

• Orientada a dados

• Orientação a objetos

52/53

Page 53: Aspectos preliminares - malbarbo.pro.brAspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá Este trabalho está licenciado

Referências

• Robert Sebesta, Concepts of programming languages, 9ªedição. Capítulo 1.

53/53