Linguagens de Programação
Introdução
Desenvolvimento dos SOs e dos softwares de rede seriam impossíveis sem a criação das linguagens de programação
Dificuldade de se trabalhar com o código binário
Desenvolvimento de linguagens próximas da descrição em pseudocódigo dos algoritmos foi crucial
Tais linguagens evitam complexidade dos registradores, dos endereços de memória e ciclos de máquina
Programadores puderam se concentrar na análise dos passos necessários na resolução de seus problemas, e não nos detalhes da arquitetura de um dado computador
1) Perspectiva Histórica das Linguagens
1a Geração:
programadores escreviam algoritmos diretamente em código binário ou hexadecimal
1a melhoria: substituição do código numérico por mnemônicos.
156C LD R5, VALOR
166D LD R6, IMPOSTO
5056 ADDI R0, R6, 56
306E ST R0, TOTAL
C000 HLT
Tradução dos mnemônicos:
primeiro pelo próprio programador
depois por um programa auxiliar (tradutor)
2a Geração:
Linguagem de montagem composta por mnemônicos (linguagem ‘assembly’)
Programa tradutor que faz a tradução para o código binário
(programa ‘assembler’)
Desvantagens:
dependência da arquitetura do computador
raciocínio muito voltado aos detalhes da máquina
3a Geração:
Primitivas (comandos, tipos de dados, etc) são de alto nível
Cada primitiva de alto nível é implementada por uma sequência de instruções de baixo nível (código binário)
Compilador é o programa que traduz o código escrito em linguagem de alto nível para o de baixo nível
Resultado: linguagem de alto nível se torna independente do tipo de máquina e de sua arquitetura específica
4a Geração: pacotes de software p/ personalização de progs.
5a Geração: linguagem declarativa usando a prog. lógica
2) Paradigmas de Programação
Diferenciação das linguagens provocada por diferentes formas de programação (Fig. 5.1)
Múltiplas trajetórias das linguagens (Fig. 5.2)
Paradigma Imperativo (procedimental)
É o enfoque tradicional (baseado no ciclo de máquina)
“define o processo de programação como sendo o desenvolvimento de uma sequência de comandos que, quando executados, manipula dados para obter o resultado desejado”
Pergunta chave: “Qual é o procedimento que resolve o problema?”
Análise do problema de forma a se descobrir um método sistemático de resolução do problema
Paradigma Declarativo (lógico)
Pergunta chave: “Qual é o problema?”
Estratégia: descobrir um algoritmo geral para solucionar problemas
Programador tem que descrever precisamente o problema e não os passos para a sua solução
Baseia-se na disciplina da lógica formal
Obstáculo: como achar um algoritmo geral que resolva determinado tipo de problemas
Paradigma Funcional
Baseado em “caixas pretas”
As caixas pretas são as funções
Cada função faz uma transformação nos dados de entradas e retorna uma saída (o resultado da transform.)
Exemplo da média de uma sequência de números:
Divide( Soma(Numeros), Conta(Numeros) )
Exemplo da ordenação em ordem alfabética de palavras de um documento:
Ordena(EliminaDup( EliminaSinais(Docum) ) )
Programação consiste em construir funções complexas através do aninhamento de funções mais simples
Programação funcional é naturalmente modular
Paradigma da Orientação por Objetos (OOP)
Baseado na modularização de dados e rotinas
O módulo da OOP é a classe
Uma classe contém dados e rotinas
As rotinas de uma classe manipulam unicamente os dados da classe (encapsulamento)
Um objeto é a execução em tempo real de uma classe
Vantagens:
mais fácil de depurar (achar os erros de prog.)
facilita a reutilização de software (das classes)
Influiu decisivamente na área de Engenharia de Software e nos projetos de Bancos de Dados
Conceitos tradicionais de programação (leitura)
variáveis, constantes e literais
tipos de dados
estruturas de dados
comandos de atribuição
comandos de controle
comentários