Modelos de
Linguagem de
Programação I
Aula 02
Prof. Silvestri
www.eduardosilvestri.com.br
Classificação
As linguagens de programação podem ser classificadas
e sub-classificadas de várias formas.
Classificação da ACM
A Association for Computing Machinery (Associação
para Maquinaria da Computação), ou ACM, foi fundada
em 1947 como a primeira sociedade cientifica e
educacional dedicada a computação. Seus membros
são aproximadamente 78000 em 2006. Sua sede fica
na cidade de Nova York.
Classificação – ACM
A ACM mantém um sistema de classificação com os
seguintes sub-itens:
• Linguagens aplicativas, ou de aplicação
• Linguagens concorrentes, distribuídas e paralelas
• Linguagens de fluxo de dados
• Linguagens de projeto
• Linguagens estensíveis
• Linguagens de montagem e de macro
• Linguagens de microprogramação
Classificação – ACM
• Linguagens não determinísticas
• Linguagens não procedurais
• Linguagens orientadas a objeto
• Linguagens de aplicação especializada
• Linguagens de muito alto nível
Classificação – ACM
Programação Concorrente
É o paradigma de programação para a construção de
programas para a execução concorrente (simultânea)
de várias tarefas computacionais interativas, que
podem ser implementadas como programas
separados ou como um conjunto de thread criadas
por um único programa. Essas tarefas também podem
ser executadas por um único processador, vários
processadores em um único equipamento ou
processadores distribuídos por uma rede.
Classificação – ACM
Programação Concorrente
Programação concorrente é relacionada com
programação paralela, mas foca mais na interação
entre as tarefas. A interação e a comunicação correta
entre as diferentes tarefas, além da coordenação do
acesso concorrente aos recurso computacionais são
as principais questões discutidas durante o
desenvolvimento de sistemas concorrentes. Pioneiros
na área de programação concorrente incluem Edsger
Dijkstra, Per Brinch Hansen, e C. A. R. Hoare.
Classificação – ACM
Programação Distribuida
Um sistema distribuído segundo a definição de Andrew
Tanenbaum é uma "coleção de computadores
independentes que se apresenta ao usuário como um
sistema único e consistente"; outra definição, de
George Coulouris, diz: "coleção de computadores
autônomos interligados através de uma rede de
computadores e equipados com software que permita
o compartilhamento dos recursos do sistema:
hardware, software e dados".
Classificação – ACM
Programação Distribuida
Assim, a computação distribuída consiste em adicionar
o poder computacional de diversos computadores
interligados por uma rede de computadores ou mais
de um processador trabalhando em conjunto no
mesmo computador, para processar
colaborativamente determinada tarefa de forma
coerente e transparente, ou seja, como se apenas um
único e centralizado computador estivesse
executando a tarefa. A união desses diversos
computadores com o objetivo de compartilhar a
execução de tarefas, é conhecida como sistema
distribuído.
Classificação – ACM
Programação Paralela
Computação paralela é caracterizada pelo uso de várias
unidades de processamento ou processadores para
executar uma computação. Como um exemplo atual
de uso de computação paralela, pode-se citar o
Google, que usa vários servidores para realizar
buscas na internet com rapidez.
Classificação – ACM
Programação Paralela
O interesse por problemas cada vez mais complexos
tem levado a necessidade de computadores cada vez
mais potentes para resolve-los. Entretanto, limitações
físicas e econômicas têm restringido o aumento da
velocidade dos computadores seqüenciais, ou seja,
computadores que executam instruções em série,
uma após a outra pela UCP (Unidade Central de
Processamento).
Classificação – ACM
Programação Paralela
Por outro lado, problemas computacionais usualmente
podem ter algumas de suas partes dividida em
pedaços que poderiam ser solucionados ao mesmo
tempo, ou processadas em paralelo. Processamento
paralelo é então uma forma pela qual a demanda
computacional é suprida através do uso simultâneo
de recursos computacionais como processadores
para solução de um problema.
Classificação – ACM
Linguagens de Montagem
Uma linguagem de montagem ou assembly é uma
notação legível por humanos para o código de
máquina que uma arquitectura de computador
específica usa. A linguagem de máquina, que é um
mero padrão de bits, torna-se legível pela substituição
dos valores em bruto por símbolos chamados
mnemônicos.
Classificação – ACM
Linguagens de Montagem
Por exemplo, enquanto um computador sabe o que a
instrução-máquina IA-21 (10110000 01100001) faz,
para os programadores é mais fácil recordar a
representação equivalente em intruções mnemônicas
MOV AL, 61h. Tal instrução ordena que o valor
hexadecimal 61 (97, em decimal) seja movido para o
registrador 'AL'.
Classificação – ACM
Linguagens de Orientação a Objetos
A orientação a objetos, também conhecida como
Programação Orientada a Objetos (POO) ou ainda em
inglês Object-Oriented Programming (OOP) é um
paradigma de análise, projeto e programação de
sistemas de software baseado na composição e
interação entre diversas unidades de software
chamadas de objetos.
Classificação – ACM
Linguagens de Orientação a Objetos
Em alguns contextos, prefere-se usar modelagem
orientada ao objeto, em vez de projeto.
A análise e projeto orientados a objetos têm como meta
identificar o melhor conjunto de objetos para
descrever um sistema de software. O funcionamento
deste sistema se dá através do relacionamento e troca
de mensagens entre estes objetos.
Classificação – ACM
Linguagens de Orientação a Objetos
Na programação orientada a objetos, implementa-se um
conjunto de classes que definem os objetos presentes
no sistema de software. Cada classe determina o
comportamento (definidos nos métodos) e estados
possíveis (atributos) de seus objetos, assim como o
relacionamento com outros objetos.
Smalltalk, Perl, Python, Ruby, Php, ColdFusion, C++,
Object Pascal, Java, Javascript, ActionScript ,C# e
VB.NET são exemplos de linguagens de programação
com suporte a orientação a objetos.
Classificação - Paradigmas de Programação
Um paradigma de programação fornece (e determina) a
visão que o programador possui sobre a estruturação
e execução do programa. Por exemplo, em
programação orientada a objetos, programadores
podem abstrair um programa como uma coleção de
objetos que interagem entre si, enquanto em
programação funcional os programadores abstraem o
programa como uma sequência de funções
executadas de modo empilhado.
Classificação - Paradigmas de Programação
Assim como diferentes grupos em engenharia de
software propõem diferentes metodologias, diferentes
linguagens de programação propõem diferentes
paradigmas de programação. Algumas linguagens
foram desenvolvidas para suportar um paradigma
específico (Smalltalk e Java suportam o paradigma de
orientação a objetos enquanto Haskell e Scheme
suportam o paradigma funcional), enquanto outras
linguagens suportam múltiplos paradigmas (como o
LISP, Python e o C++).
Classificação - Paradigmas de Programação
Os paradigmas de programação são muitas vezes
diferenciados pelas técnicas de programação que
proíbem ou permitem. Por exemplo, a programação
estruturada não permite o uso de goto. Esse é um dos
motivos pelo qual novos paradigmas são
considerados mais rígidos que estilos tradicionais.
Apesar disso, evitar certos tipos de técnicas pode
facilitar a prova de conceito de um sistema, podendo
até mesmo facilitar o desenvolvimento de algoritmos.
Classificação - Paradigmas de Programação
O relacionamento entre paradigmas de programação e
linguagens de programação pode ser complexo pelo
fato de linguagens de programação poderem suportar
mais de um paradigma.
Classificação - Paradigmas de Programação
•
Programação estruturada, em contraste a Programação orientada a objetos
•
Programação imperativa, em contraste de programação declarativa
•
Programação de passagem de mensagens, em contraste de programação
imperativa
•
Programação procedural, em contraste de programação funcional
•
Programação orientada a fluxos, em contraste de programação orientada a
eventos
•
Programação escalar, em contraste de programação vetorial
•
Programação restritiva, que complementa a programação lógica
•
Programação orientada a aspecto (como em AspectJ)
•
Programação orientada a regras (como em Mathematica)
•
Programação orientada a tabelas (como em Microsoft FoxPro)
•
Programação orientada a fluxo de dados (como em diagramas)
•
Programação orientada a políticas
•
Programação orientada a testes
•
Programação genérica
Classificação – Grau de Abstração
• Linguagem de programação de baixo nível, próximas
a máquina, como Assembly
• Linguagem de programação de alto nível, no nível da
especificação de algoritmos, como Pascal e Fortran
• Linguagem de programação de muito alto nível, no
nível da especificação declarativa, como SQL
Classificação – Geração
• Primeira geração, as linguagens de baixo nível
(Assembly)
• Segunda geração, as primeiras linguagens (Fortran,
ALGOL,...)
• Terceira geração, as procedurais e estruturadas
(Pascal, C).
• Quarta geração, linguagens que geram programas em
outras linguagens, linguagens de consulta (SQL).
• Quinta geração, linguagens lógicas (Prolog).
Dúvidas
www.eduardosilvestri.com.br
Eduardo Silvestri
silvestri@eduardosilvestri.com.br
Questões
1. Quais os tipos de linguagem declaradas pela ACM,
explique e diferencie.
2. Explique e diferencie programação concorrente,
distribuída e paralela.
3. Explique programação Orientada a Objetos.
4. Descreva alguns paradigmas da linguagem de
programação.
Publicação
1. Publicar o mapa conceitual da aula.
Download

Classificação - Linguagem de Programação