2. Apresentar os principais paradigmas de programação.
Introduzir programação imperativa
Introduzir programação orientada a objetos
Introduzir programação funcional
Introduzir programação Lógica
Introduzir conceitos básicos de implementação de
linguagens de programação.
3. MOTIVAÇÃO
●
Já em 1969, SAMMET listou 120 LPs que eram
relativamente bem difundidas. Desde então muitas
centenas de outras Lps surgiram (e desapareceram).
●
A maioria dos programadores, todavia, nunca chega
a usar mais do que umas poucas linguagens. Muitos
não usam mais que uma ou duas em sua inteira vida
profissional.
●
Por que então estudar linguagens de programação?
4. Porque estudar Linguagem de P
●
Melhorar sua habilidade de desenvolver algoritmos
(ex., uso eficiente de recursividade)
●
Melhorar sua habilidade de usar a LP (ex., uso
eficiente dos recursos de gerenciamento de
memória)
●
Aumentar o seu vocabulário de construção úteis de
programação (ex., declarações repita até <repeat-
until> e chaveamento <case> ou <switch>)
5. Porque estudar Linguagem de P
●
Melhor escolher uma linguagem de programação por
conhecer seus pontos fortes e fracos ( ++ depende muito
do conhecimento dos programadores).
●
Torna mais fácil aprender novas LPs e acompanhar a
tecnologia (ex., quanto mais LPs você souber, mais fácil
se torna aprender uma nova LP).
●
Torna mais fácil projetar novas linguagens de
programação (ex.,algumas interfaces de usuário podem
adquirir contornos de uma“linguagem de programação”).
●
• E por último, abrangência de formação.
6. Definição de LP
Linguagem utilizada para enviar instruções
a um computador. Como qualquer
linguagem, apresenta símbolos e regras
para a combinação desses símbolos.
(adaptado de Downing et al. Dictionary of
computer and Internet terms).
7. Tipos de LP
Linguagem de alto nível
Ex.: C, C#, Objective-C, Java, Ruby, Python, Erlang,
Clojure, Prolog, Processing.
Linguagem de montagem (assembly)
Ex.: Microsoft Macro Assembler.
Linguagem de máquina
Ex.: conjunto de instruções para processadores
Intel.
Contador := 0;
LDA 4
STA A
0010 0100
0001 1010
8. Linguagem de alto nivel
●
São linguagens voltadas para o usuário (programador).
●
Os comandos das linguagens apresentam um nível mais alto de
abstração e próximos da linguagem humana.
●
Necessitam de programas especiais (compiladores ou
interpretadores) para traduzir o código para linguagem de
máquina.
Vantagens: têm maior portabilidade podendo ser executadas em
várias plataformas com pouquíssimas modificações; não exigem
conhecimento do código de máquina.
Desvantagens: as rotinas geradas são mais genéricas e portanto
mais complexas e por isso são mais lentas e ocupam mais
memória (o código não é tão otimizado).
9. Linguagem de montagem (assembly)
●
São linguagens voltadas para a máquina e para o usuário.
●
São linguagens intermediárias entre a linguagem de
máquina e a linguagem de alto nível.
●
As instruções são simplificações da linguagem de
máquina que usam código mnemônicos (em inglês).
Vantagens: comandos com sintaxe mais inteligível que
nas linguagens de máquina.
Desvantagens: alguns mnemônicos ainda são de difícil
compreensão; ainda dependente da arquitetura do
computador em questão.
10.
11. Linguagem de alto nível
Begin
var op1, op2, r: integer;
r := 0;
while op2 > 0 do
begin
r := r + op1;
op2 := op2 - 1;
end
End
Linguagem intermediária
Begin
var op1, op2, r: integer;
r := 0;
laço : if op2 = 0 go to fim;
r := r + op1;
op2 := op2 - 1;
go to laço;
fim: End.
12. Ling montagem (Assembly)
A forma geral de uma instruçao assembly e
mnemonica
[operando1[,operando2[,operando3]]]
13. programa assembly muda o tamanho do
cursor
.MODEL SMALL ;modelo de memória
.STACK ;espaço de memória para instruções do programa na pilha
.CODE ;as linhas seguintes são instruções do programa
mov ah,01h ;move o valor 01h para o registrador ah
mov cx,07h ;move o valor 07h para o registrador cx
int 10h ;interrupção 10h
mov ah,4ch ;move o valor 4ch para o registrador ah
int 21h ;interrupção 21h
.DATA
x db 1
END ;finaliza o codigo do programa
14. A memória é dividida em um
número arbitrário de segmentos
.MODEL SMALL
.STACK
.CODE
.DATA
END
CODIGO
DADOS
PILHA
15. Registradores de Uso Geral
AX BX CX DX (16 bits)
AH/AL BH/BL CH/CL DH/DL (8 bits)
AX: Acumulador
Usado em operações aritméticas.
BX:Base
Usado para indexar tabelas de memória (ex.: índice de vetores).
CX:Contador
Usado como contador de repetições em loop e movimentação
repetitiva de dados.
DX:Dados
Uso geral.
16. Sobre Assembly
A linguagem de programação Assembly pode ser
considerada como uma família de linguagens já que
cada arquitetura de processador possui a sua.
Seu nome é frequentemente abreviado como ASM e é
muito comum o uso do termo Assembler para se
referir à linguagem embora isso seja errado, pois,
Assembler é a palavra usada para denominar o
programa que traduz o código Assembly, de fato, uma
possível tradução para o termo Assembler é
“montador”.
17. Linguagem de máquina
●
São linguagens voltadas para a máquina.
●
São baseadas no código binário utilizado diretamente pelo
computador.
●
Cadeias de 0s e 1s.
●
As instruções variam de processador para processador.
Vantagens: produz o único conjunto de instruções que um
computador entende sem um tradutor, criando códigos
concisos e eficientes além de serem consideravelmente
menores do que uma versão escrita em C.
Desvantagens: pouca portabilidade (em geral, um
programa para um processador não serve para outro);
programas não são estruturados e de difícil compreensão;
manutenção e correção de erros extremamente difícil.
19. compilador
Um programa de computador que recebe um texto em
uma linguagem e gera texto equivalente em outra
linguagem. O texto usado na entrada é chamado de
código-fonte e o texto na saída é chamado de código-
objeto
Codigo fonte
entrada
Codigo objeto
compilador máquina
saída
20. compilador
●
Durante a compilação, o código fonte é analisado
(análise léxica, sintática e semântica), é gerado um
código intermediário e são construídas tabelas de
símbolos, alocam-se as áreas de memória para
variáveis e atribui-se os registradores a serem
utilizados, e é finalmente gerado o código objeto em
linguagem binária de máquina.
●
Em alguns compiladores, é gerado um código
intermediário em Assembly (que pode ser visualizado
pelo programador) e que em seguida passa pelo
montador para gerar finalmente o código objeto em
linguagem de máquina.
21. Primeiro compilador: A-0 (1952)
Grace Hopper, programadora do Harvard Mark I
Em 1949 contratada para desenvolver software para o
UNIVAC
A-0: programas que calculam seno, coseno, etc.
gravados em fita.
Programa desvia execução para posição na fita. Não é
exatamente um compilador....mas deu grandes ideias
para serem refinadas depois
Evoluções: A1 até A-3 → pseudocódigo
22. Termos usuais
Código-Fonte: Criado via editor de textos, contém os comandos da
linguagem de programação (C++, Pascal...) e serve como entrada para
o compilador.
Código-Objeto (PO) ou Arquivo Objeto: Criado pela conversão do PF
em linguagem de máquina. É gerado pelo montador, compilador ou
interpretador, quando não há erros no PF (extensões do código-objeto
mais comuns: .OBJ, .o)
Ligador ou Linkeditor: Combina o PO com as bibliotecas necessárias
a geração do PE (por exemplo, extensões das bibliotecas .DLL ou .LIB).
Programa Executável: Código passível de execução pelo SO
(extensão do PE: .EXE)
Tempo de Compilação: Intervalo de tempo decorrido para conversão
do PF em PO.
Tempo de Execução: Começa após a ativação do PE.
23. Evolução linguagens
No começo dos anos 90, o Fortran e o Pascal renasceram e
voltaram a ser surpreendentemente populares, mesmo quando
a C++ e a C dominavam o cenário. No meio dessa década, o
JavaScript e o Java cresceram rapidamente, ao lado de
linguagens mais jovens como Perl, PHP ou Visual Basic.
Nos anos 2000, o C começou a perder protagonismo para
algumas das alternativas já citadas ou outras mais novas,
como C#, Python ou Objetive C. Esta última cresceu com o
auge do iOS, e se consolidou com a popularidade absoluta do
Java, JavaScript e Python (esta última crescendo no âmbito da
IA), enquanto que as demais alternativas lutando para manter
a sua relevância.
24. Os mais veteranos na programação são fiéis ao Fortran e
Cobol, e grandes empresas seguem com sistemas quase
insubstituíveis e baseados nessas linguagens. Sem falar nas
plataformas de nicho, como Scala, R, Clojure ou Rust, que
geram muito interesse na comunidade de desenvolvedores.
Linha de Tempo das linguagens
https://en.wikipedia.org/wiki/Timeline_of_programming
_languages
25. Paradigmas de linguagem de prog
Atualmente existem quatro paradigmas de linguagens
de programação em uso comum:
●
Imperativas (e.g. C, Pascal, Fortran)
●
Funcionais (e.g. LISP, Scheme)
●
Lógicas/Declarativas (e.g. Prolog)
●
Orientadas-a-Objetos (e.g. Java, C++, C#)