1 / 37

Paradigmas de Linguagens de Programação

Paradigmas de Linguagens de Programação. Augusto Sampaio acas@cin.ufpe.br http://www.cin.ufpe.br/~acas. Recife, primeiro semestre de 2013. Objetivos. Análise crítica de paradigmas e linguagens de programação: Visão geral dos paradigmas imperativo, orientado a objetos e funcional

luann
Download Presentation

Paradigmas de Linguagens de Programação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br http://www.cin.ufpe.br/~acas Recife, primeiro semestre de 2013

  2. Objetivos • Análise crítica de paradigmas e linguagens de programação: • Visão geral dos paradigmas imperativo, orientado a objetos e funcional • Discutir alternativas de projeto de linguagens • Estudo de linguagens através de ambientes de execução (interpretação)

  3. Tópicos a serem apresentados • Visão geral de linguagens e paradigmas • Uma linguagem de expressões e sua implementação em Java • Introdução à programação funcional • Implementando funções • Uma linguagem de comandos

  4. Tópicos a serem presentados • Implementando estruturas de controle, I/O e atribuição • Procedimentos e passagem de parâmetros • Implementando procedimentos • Tipos abstratos de dados • Implementando tipos abstratos de dados e classes • Implementando subtipos e herança • Outros conceitos e paradigmas apresentados nos projetos

  5. Metodologia de Ensino • A ênfase do curso é em conceitos • Java será utilizada como uma ferramenta prática de apoio • para ilustrar o paradigma OO • como meta-linguagem para construir interpretadores • Os conceitos estudados serão sedimentados através da implementação incremental de construções de linguagens dos diversos paradigmas

  6. Avaliação • 2 projetos em equipe (de até 4 pessoas) a serem realizados durante o decorrer do curso, ou um único projeto de maior complexidade • Prova explorando aspectos conceituais e de implementação das construções • Os projetos valem 50% e a prova 50% da média final

  7. Bibliografia • Conceitos e Paradigmas de Programação via Projeto de Interpretadores. Augusto Sampaio e Antônio Maranhão • Programming Language Design Concepts, David Watt and W. Findlay, John Wiley & Sons • Programming Language Concepts and Paradigms, David Watt, Prentice Hall • Programming Language, An Interpreter-Based Approach, Samuel Kamin, Addison Wesley • http://www.mozart-oz.org/ • Concepts, techniques and models of computer programming, Peter Van Roy and Seif Haridi • Introduction to Functional Programming, R. Bird and P. Wadler, Prentice Hall • Seu livro favorito sobre Java (Java 1.5 ou posterior)

  8. Visão Geral de LinguagenseParadigmas de Programação

  9. O que caracteriza uma Linguagem de Programação? • Gramática e significado bem definidos • Implementável (executável) com eficiência ‘‘aceitável’’ • Universal: deve ser possível expressar todo problema computável • Natural para expressar problemas (em um certo domínio de aplicação)

  10. Aspectos do estudo de linguagens • Sintaxe: gramática (forma) • Semântica: significado • Pragmática (ex.: metodologias) • Processadores: compiladores, interpretadores, editores, ambientes visuais ...

  11. Por que tantas linguagens? • Propósitos diferentes • Avanços tecnológicos • Interesses comercias • Cultura e background científico

  12. O que é um paradigma de programação? • Modelo, padrão ou estilo de programação suportado por linguagens que agrupam certas características comuns • A classificação de linguagens em paradigmas é uma conseqüência de decisões de projeto que impactam radicalmente a forma na qual uma aplicação real é modelada do ponto de vista computacional

  13. O Paradigma Imperativo • Programas centrados no conceito de um estado (modelado por variáveis) e ações (comandos) que manipulam o estado • Paradigma também denominado deprocedural, por incluir subrotinas ou procedimentos como mecanismo de estruturação • Primeiro paradigma a surgir e ainda é o dominante

  14. Modelo Computacional do Paradigma Imperativo Entrada Saída Programa Estado

  15. Vantagens do modelo imperativo • Eficiência (embute modelo de Von Neumann) • Modelagem “natural” de aplicações do mundo real • Paradigma dominante e bem estabelecido

  16. Desvantagens do paradigma imperativo • Relacionamento indireto entre E/S resulta em: • difícil legibilidade • erros introduzidos durante manutenção • descrições demasiadamente operacionais focalizam o como e não o que

  17. O Paradigma Orientado a Objetos • Não é um paradigma no sentido estrito: é uma subclassificacão do imperativo • A diferença é mais de metodologia quanto à concepção e modelagem do sistema • A grosso modo, uma aplicação é estruturada em módulos (classes) que agrupam um estado (atributos) e operações (métodos) sobre este • Classes podem ser estendidas e/ou usadas como tipos (cujos elementos sãoobjetos)

  18. Entrada Saída Programa Entrada Saída Programa Estado Estado Entrada Saída Programa Entrada Saída Entrada Saída Programa Programa Estado Estado Estado Modelo Computacional do Paradigma Orientado a Objetos ... . . . . . . . . .

  19. Vantagens do Paradigma Orientado a objetos • Todas as do estilo imperativo • Classes estimulam projeto centrado em dados: modularidade, reusabilidade e extensibilidade • Aceitação comercial crescente

  20. Problemas do Paradigma OO • Semelhantes aos do paradigma imperativo, mas amenizadas pelas facilidades de estruturação

  21. O Paradigma Orientado a Aspectos • Não é um paradigma no sentido estrito • A diferença é mais de metodologia quanto à concepção e modelagem do sistema • É uma nova forma de modularização: • Para “requisitos” que afetam várias partes de uma aplicação

  22. O Paradigma Orientado a Aspectos • A grosso modo, uma aplicação é estruturada em módulos (aspectos) que agrupam pontos de interceptação de código (pointcuts) que afetam outros módulos (classes) ou outros aspectos, definindo novo comportamento (advice) • Aspectos podem ser estendidos e/ou usados como tipos

  23. Entrada Saída Programa Entrada Saída Programa Estado Estado Entrada Saída Programa Entrada Saída Entrada Saída Programa Programa Estado Estado Estado Modelo Computacional do Paradigma Orientado a Aspectos Aspecto Aspecto ... . . . . . . . . .

  24. Vantagens do Paradigma Orientado a Aspectos • Todas as do paradigma OO • Útil para modularizar conceitos que a Orientação a Objetos não consegue (crosscutting concerns) • Em especial, aqueles ligados a requisitos não funcionais • Aumenta a extensibilidade e o reuso

  25. Problemas do Paradigma Orientado a Aspectos • Semelhantes aos do OO • Ainda é preciso diminuir a relação entre classes e aspectos • Problemas de conflito entre aspectos que afetam a mesma classe

  26. O Paradigma Funcional • Programas são funções que descrevem uma relação explícita e precisa entre E/S • Estilo declarativo: não há o conceito de estado nem comandos como atribuição • Conceitos sofisticados comopolimorfismo, funções de alta ordem e avaliação sob demanda • Aplicação: prototipação em geral, IA, concorrência, ...

  27. Modelo Computacional do Paradigma Funcional Entrada Saída Programa

  28. Visão Crítica do Paradigma Funcional • Vantagens • Manipulação de programas mais simples: • - Prova de propriedades • - Transformação (exemplo: otimização) • - Concorrência explorada de forma natural • Problemas • “O mundo não é funcional!” • Implementações ineficientes • Mecanismos primitivos de E/S e formatação

  29. O Paradigma Lógico • Programas são relações entre E/S • Estilo declarativo, como no paradigma funcional • Na prática, inclui características imperativas, por questão de eficiência • Aplicações: prototipação em geral, sistemas especialistas, banco de dados, ...

  30. Modelo Computacional do Paradigma Lógico Entrada Saída Programa

  31. Visão Crítica do Paradigma Lógico • Vantagens • Em princípio, todas do paradigma funcional • Permite concepção da aplicação em um alto nível de abstração (através de associações entre E/S) • Problemas • Em princípio, todos do paradigma funcional • Linguagens usualmente não possuem tipos, nem são de alta ordem

  32. Outros “Paradigmas” • Agentes • Linguagens de domínio específico • ...

  33. Tendência: integração de paradigmas • A principal vantagem é combinar facilidades de mais de um paradigma, aumentando o domínio de aplicação da linguagem • Exemplos: linguagens lógicas ou funcionais com o conceito de estado e comandos • A integração deve ser conduzida com muita cautela, para que não se viole os princípios básicos de cada paradigma.

  34. Outras Classificações • Linguagens de 1a., 2a., 3a. 4a. e 5a. gerações • Programação seqüencial versus concorrente • Programação linear versus programação visual (visual programming) • ...

  35. 1950........................................................................................................1950........................................................................................................ FORTRAN 1960.......................ALGOL-60...........COBOL......LISP......................... SIMULAALGOL-68PL/IBASIC 1970..................Pascal............................................................................ Modula-2ML Miranda Eifell C++ Delphi Java C# Um breve histórico SmalltalkCPROLOG 1980....................Ada...........DBASE-II.................................................. 1990.....................................................................Haskell..........Godel... Erlang F# Imperativo Orientado a objetos Funcional Lógico

  36. Evolução centrada em níveis crescentes de abstração • Linguagens de máquina • Endereços físicos e operation code • Linguagens Assembly • Mnemônicos e labels simbólicos • Linguagens de “alto nível” • Variáveis e atribuição (versus acesso direto à memória) • Estruturas de dados (versus estruturas de armazenamento)

  37. Evolução centrada em níveis crescentes de abstração • Estruturas de controle (versus jumps e gotos) • Estrutura de blocos como forma de encapsulamento • Generalização e parametrização (abstração de tipos de valores)

More Related