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 [email protected] 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.