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

Post on 17-Apr-2015

105 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Paradigmas de Linguagens de Programação

IntroduçãoProfessor: Armando Hage

Belém-2008Belé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

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)

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

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?

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)

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!

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.

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

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

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

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.

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

Modelo Computacional do Paradigma Imperativo

Entrada Programa Saída

Estado

Vantagens do modelo imperativo

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

real Paradigma dominante e bem estabelecido

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

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)

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

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

Problemas do Paradigma OO

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

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

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

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

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

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

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

Modelo Computacional do Paradigma Funcional

Entrada Programa Saída

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

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

Modelo Computacional do Paradigma Lógico

Entrada Programa Saída

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

Outros “Paradigmas”

Agentes

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.

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

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

Conceitos de uma LP

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

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.

Gerações das LPs

Linguagens de Baixo Nível

X

Linguagens de Alto Nível

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

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

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

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

Gerações das LPs

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

Fluxo do processo de montagem

Código Fonte

Código Objeto

Montagem Montador

Programa original

Programa Resultante

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.

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

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

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

Próxima Aula

Valores e Tipos

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

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

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

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.

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

Tipos

Classificação de tipos: Primitivos Compostos Recursivos

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’

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)

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

Produtos Cartesianos

Produtos Cartesianos

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;

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

Uniões Disjuntas

Uniões Disjuntas em Pascal

top related