A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Paradigmas de Linguagens de Programação Introdução Professor: Armando Hage Belém-2008.

Apresentações semelhantes


Apresentação em tema: "Paradigmas de Linguagens de Programação Introdução Professor: Armando Hage Belém-2008."— Transcrição da apresentação:

1 Paradigmas de Linguagens de Programação Introdução Professor: Armando Hage Belém-2008

2 Resumo Objetivos Motivação Sintaxe e Semântica Processadores de Linguagem Critérios para avaliação de uma ling. de programação Conceitos de uma ling. de programação Paradigmas Geração das Linguagens de Programação

3 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)

4 Motivação Linguagens de Programação são usadas continuamente por um analista de sistemas Projetos disciplinares Estágio Empresas (Novos ou antigos projetos) Pós-graduação Existem dezenas de linguagens de programação Características diferentes

5 Motivação Quais características de uma linguagem de programação são importantes para a aplicação? Como comparar estas características? Qual linguagem usar? Como comparar diversas linguagens? Como estudar novas linguagens? Como projetar novas linguagens? Por que a linguagem X é usada na aplicação Y?

6 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)

7 Sintaxe e Semântica A sintaxe de uma LP diz respeito à forma dos programas Como seus elementos (expressões, comandos, etc) são organizados para formar um programa. A semântica de uma LP diz respeito ao significado dos programas Como seus elementos se comportam quando são executados nos computadores. Elementos aparentemente similares podem ter semânticas diferentes! Elementos aparentemente distintos, podem te semânticas equivalentes!

8 Sintaxe e Semântica A sintaxe da LP influencia como os programas são escritos pelos programadores, lidos por outros e analisada pelo computador Compiladores corrigem a sintaxe A semântica da LP determina como os programas são compostos pelos programadores, entendidos por outros e interpretados pelo computador Desentendimentos semânticos podem nos levar a produzir o programa errado ou com comportamentos indesejados e imprevisíveis.

9 Sintaxe e Semântica A sintaxe pode ser descrita: Gramáticas: Extended Backus-Naur Form (EBNF) Metamodelos A semântica pode ser descrita: Denotacional Operacional Axiomática

10 Requisitos de uma LP Uma LP para ser digna do nome tem que satisfazer alguns requisitos: Tem que ser universal – todo problema que pode ser resolvido pelo computador tem que ter uma solução programável na LP Tem que ser implementável num computador Tem que ser capaz de ter uma implementação aceitavelmente eficiente

11 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

12 Processadores de Linguagens Uma LP deve ser implementada através: Compilador – programa traduzido para linguagem de máquina (C,Pascal,COBOL, Ada, etc.); Interpretador – programa fonte interpretado por outro programa (interpretado) que entende o programa fonte (sh, awk, LISP, ML, PROLOG, Smalltalk, etc.); Misto de ambos (Perl, Java, etc.) Compilação -> execução de programa rápida e não requer máquina virtual acompanhando o código executável Interpretação -> facilita depuração Ideal: ter uma implementação compilada e uma outra interpretada.

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 de procedural, 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 Programa Saída 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ão objetos)

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

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 Modelo Computacional do Paradigma Orientado a Aspectos Entrada Programa Saída Estado Estado Entrada Programa Saída Estado Entrada Programa Saída Estado Entrada Programa Saída Estado Entrada Programa Saída 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 como polimorfismo, funções de alta ordem e avaliação sob demanda Aplicação: prototipação em geral e IA

27 Modelo Computacional do Paradigma Funcional Entrada Programa Saída

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 Programa Saída

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

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 Critérios para Avaliação de uma LP Legibilidade Simplicidade Ortogonalidade Instruções de Controle Tipos de Dados e Estruturas Sintaxe Capacidade de Escrita Simplicidade e Ortogonalidade Suporte para abstração Expressividade

35 Critérios para Avaliação de uma LP Confiabilidade Verificação de tipos Manipulação de exceções Aliasing Legibilidade e capacidade de escrita Custo Treinamento Escrita de programas Compilação Execução Sistemas de implementação Confiabilidade Manutenção

36 Conceitos de uma LP

37 Quais características de uma linguagem de programação são importantes para a aplicação? Como comparar estas características? Qual linguagem usar? Como comparar diversas linguagens? Como estudar novas linguagens? Como projetar novas linguagens? Por que a linguagem X é usada na aplicação Y? Paradigma de programação

38 Paradigmas de Linguagens de Programação Imperativo Procedural – Pascal, FORTRAN, COBOL, C, ADA Orientado a Objetos (Smalltalk, objectPascal, C++, Java) Declarativo Funcional – LISP, ML Lógico – Prolog Concorrente Paralelo – n processadores+1 memória (ADA, concurrent Pascal); Distribuido - n processadores+m memórias (Java); Paradigmas Hibridos OOLP, etc.

39 Gerações das LPs Linguagens de Baixo Nível X Linguagens de Alto Nível

40 Linguagens de Programação Linguagem de baixo nível – É a mais primitiva, podendo ser executadas diretamente no Hardware. – O processo de conversão é chamado de montagem e é realizada por um programa Montador(Assembler) – Ex:Assembly Language

41 Linguagens de Programação Linguagem de alto nível – Foi um avanço significativo na comunicação com os computadores, com menos instruções que as de linguagens de montagem. – Idealizada para a resolução de problemas sem preocupações com o tipo de CPU, memória ou onde será executado. – Comando- instruções específicas dadas pelo programador – Ex.:FORTRAN,Pascal, Basic, C, C++, Java

42 Gerações das LPs 1ª GERAÇÃO - programação física, linguagens de máquina ª GERAÇÃO - Linguagens de baixo nível(Assembly, Autocoder) CLA C ADD D STO Y CLA A ADD B DIV Y STO X

43 Gerações das LPs 3ª GERAÇÃO - Linguagens de alto nível Científicas - FORTRAN, Algol Comerciais – COBOL Universais - PL/I, ADA Sistemas - Pascal, Modula 2, C, C++, Java Especiais - SIMULA, LISP, SNOBOL, PROLOG, APL, RPG

44 Gerações das LPs

45 Montagem Tradruz um programa em linguagem de montagem para um equivalente em linguagem binária Código fonte Código Objeto Funções Substiuir os código de operações simbólicas e nomes simbólicos por valores numéricos Reservar espaço na memória Examinar cada instrução

46 Fluxo do processo de montagem Código Fonte Código Objeto Montagem Montador Programa original Programa Resultante

47 Compilação É quando se converte para linguagem de máquina um programa escrito em uma linguagem de alto nível. É o processo de análise de um programa fonte(código fonte) e sua conversão em um programa equivalente descrito em linguagem d máquina, o programa objeto(código objeto). Diferente da Montagem por ser mais complexa e demorada.

48 Fluxo do processo de compilação Código Fonte Código Objeto Compilação Compilador Programa original Programa Resultante *Mais complexa e demorada, pode gerar várias instruções de máquina em um único comando

49 Ligação ou Linkedição É util quando o programdor necessita codificar determinadas operações que já existem dentro do sistema operacional. Ex.:Operaçãoes de entrada e saída O código é buscado onde estiver e incorporado ao programa. Bibliotes (librarys)-Coleção de códigos objeto. Resulta em um conjunto de código de máquina, interligados e prontos para funcionar chamados de módulos de carga ou código executável

50 Fluxo do processo de compilação e linkedição Programa Fonte Código Objeto Compilação Compilador Programainicial Ligação Código Executável Ligador Biblioteca C Biblioteca B Biblioteca A

51 Próxima Aula Valores e Tipos

52 Memória do computador É um espaço formado por bits, agrupados em bytes dividido em unidades endereçáveis 2 UNIDADES: aritméticológica:contém instruções dados: contém valores

53 Valores Um valor é um espaço de memória que pode ser: Avaliado Armazenado Incorporado Parâmetro de uma função ou procedimento Retornado por uma função ou procedimento

54 Valores Em pascal, são exemplos de valores: Caracteres, inteiros, etc... Registros, arrays, etc... ponteiros Referências para variáveis Abstração de procedimento Abstração de função

55 Valores Em Pascal, referências à variáveis, abstração de função e de procedimento, não podem ser armazenados ou incorporados em estruturas de dados,mas podem ser passadas como parâmetros. Em ML, não existe abstração de procedimento. No entanto, referências à variáveis e abstração de função podem ser usadas da mesma forma que qualquer outro valor.

56 Tipos Um tipo é um conjunto de valores que exibem um comportamento uniforme sob operações que podem ser realizadas sobre estes valores. Exemplo: {true, false} Operações: and, or, not, etc...

57 Tipos Classificação de tipos: Primitivos Compostos Recursivos

58 Tipos Primitivos São aqueles cujos valores são atômicos Não podem ser decompostos em valores mais simples. Os tipos primitivos já são definidos na própria LP. Exemplos: boolean = {true, false} integer = {..., -2, -1, 0, 1, 2,... } real = {..., -1.0,..., 0.0,... –1.0,... } char = {..., ´a´, ´b´,..., ´*´,... } (enumeração) = (seg, ter, qua, qui, sex, sab, dom) (intervalo) = ou A.. Z

59 Tipos Compostos Tipos compostos ou estruturados são tipos cujos valores são compostos a partir de valores mais simples Classificação: Produto cartesiano (tuplas e registros) Uniões disjuntas (registros variantes e uniões) Mapeamentos (arrays e funções) Conjuntos potência (conjuntos) Tipos recursivos (estruturas de dados dinâmicas)

60 Produtos Cartesianos Por meio do produto cartesiano, valores de dois tipos (possivelmente diferentes) são emparelhados. Sejam S e T dois tipos quaisquer. O produto cartesiano S x T é definido como: S x T = { (x,y) | x in S; y in T } Cardinalidade: #(SxT) = #S x #T N-tuplas S1 x S2 x S3 x... x Sn

61 Produtos Cartesianos

62

63 Produtos Cartesianos em Pascal type Dia : 1..31; type Mês = (jan, fev, mar, abr, mai, jun, jul, ago, set,out, nov, dez); type Data = record d : Dia; m : Mes; end var niver : Data; niver.d = 18; niver.m := jul;

64 Uniões Disjuntas Na união disjunta os valores são escolhidos de dois tipos (normalmente diferentes) Sejam S e T dois tipos quaisquer. A união disjunta S+T é definida como: S + T = {esquerda x | x in S} È {direita y | y in T} Cardinalidade: #(S + T) = #S + #T S1 + S2 + S Sn

65 Uniões Disjuntas

66 Uniões Disjuntas em Pascal


Carregar ppt "Paradigmas de Linguagens de Programação Introdução Professor: Armando Hage Belém-2008."

Apresentações semelhantes


Anúncios Google