paradigmas de linguagens de programação introdução professor: armando hage belém-2008

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

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

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

Paradigmas de Linguagens de Programação

IntroduçãoProfessor: Armando Hage

Belém-2008Belém-2008

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

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

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

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)

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

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

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

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?

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

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)

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

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!

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

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.

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

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

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

Requisitos de uma LPRequisitos 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

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

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

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

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.

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

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

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

Modelo Computacional do Paradigma Imperativo

Entrada Programa Saída

Estado

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

Vantagens do modelo imperativo

Eficiência (embute modelo de Von Neumann) Modelagem “natural” de aplicações do mundo

real Paradigma dominante e bem estabelecido

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

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

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

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)

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

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

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

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

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

Problemas do Paradigma OO

Semelhantes aos do paradigma imperativo, mas amenizadas pelas facilidades de estruturação

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

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

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

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

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

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

AspectoAspecto

AspectoAspecto

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

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

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

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

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

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

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

Modelo Computacional do Paradigma Funcional

Entrada Programa Saída

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

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

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

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, ...

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

Modelo Computacional do Paradigma Lógico

Entrada Programa Saída

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

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

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

Outros “Paradigmas”

Agentes

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

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.

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

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

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

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

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

Conceitos de uma LP

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

Conceitos de uma LP

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

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

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.

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

Gerações das LPs

Linguagens de Baixo Nível

X

Linguagens de Alto Nível

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

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

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

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

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

Gerações das LPs

1ª GERAÇÃO - programação física, linguagens de máquina0010 0010 0001 0011 1000 0100 0010 0001 0001 0010 0101 0100 1000

2ª GERAÇÃO - Linguagens de baixo nível(Assembly, Autocoder) CLA C ADD D STO Y CLA A ADD B DIV Y STO X

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

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

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

Gerações das LPs

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

Montagem

Tradruz um programa em linguagem de montagem para um equivalente em linguagem binária

Código fonteCódigo ObjetoFunçõ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

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

Fluxo do processo de montagem

Código Fonte

Código Objeto

Montagem Montador

Programa original

Programa Resultante

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

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.

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

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 *Mais complexa e demorada, pode gerar várias instruções de máquina em um único comandomáquina em um único comando

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

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

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

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

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

Próxima Aula

Valores e Tipos

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

Valores e Tipos

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

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

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

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

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

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

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.

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

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 ...

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

Tipos

Classificação de tipos: Primitivos Compostos Recursivos

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

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) = 0..10 ou ‘ A’ ..’ Z’

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

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)

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

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

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

Produtos Cartesianos

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

Produtos Cartesianos

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

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 = recordd : Dia;m : Mes;endvar niver : Data;niver.d = 18;niver.m := jul;

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

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 + S3 + ... + Sn

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

Uniões Disjuntas

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

Uniões Disjuntas em Pascal