Paradigmas de Programação Aula I Apresentação Prof.: Edilberto M. Silva http://www.edilms.eti.br Prof. Edilberto Silva / edilms.eti.br
Professor EDILBERTO M. SILVA edilms@yahoo.com Bacharel em Ciência da Computação Mestre em Gestão do Conhecimento e da Tecnologia da Informação KDT, KDD, DSS, Gestão da Informação PRESI/RADIOBRÁS Gerência Técnica em Desenvolvimento Analista de Sistemas e DBA SQL Server PP - Prof. Edilberto Silva - http://edilms.eti,br 2
Ementa Linguagens de programação: evolução, características; Estruturas sintáticas: notações e gramáticas; Linguagens: imperativas, funcionais, orientadas a objetos, programação lógica; programação concorrente. Objetivos Estudar os princípios de projeto e as características dos principais modelos de linguagens de programação e sua adequação à solução de problemas. PP - Prof. Edilberto Silva - http://edilms.eti,br 3
para que estudá-los? Capacidade crescente de expressar idéias. A profundidade que se consegue pensar é influenciada pelo poder da linguagem com a qual se está comunicando os pensamentos. Aumenta-se a habilidade de aprender novas linguagens. Melhora-se a compreensão do significado da implementação. Habilidade maior de projetar novas linguagens. Avanço da computação. PP - Prof. Edilberto Silva - http://edilms.eti,br 4
Conteúdo Paradigmas de Programação 1) Programação Imperativa. 2) Programação Orientada a Objetos. 3) Programação Funcional. 4) Programação em Lógica. Imperativa: Fortran, Pascal, C Orientada a Objetos: Smalltalk, C++, Java Funcional: LISP Lógica: PROLOG PP - Prof. Edilberto Silva - http://edilms.eti,br 5
Linguagens de Programação O que caracteriza uma linguagem de programação? Sintaxe e semântica bem definidas; Implementável (executável) com eficiência aceitável. Universal: deve ser possível expressar todo problema computável. Natural para expressar soluções de problemas (em um certo domínio de aplicação). PP - Prof. Edilberto Silva - http://edilms.eti,br 6
Por que tantas? C, C++, Java, Basic, COBOL, Lisp, Haskell, Modula- 2, Oberon, Prolog, Java, C#, Pascal, PL/1, Ada, Smalltalk, Símula, Algol, Eiffel, Fortran (1957), ASM, Scheme, CLOS, Maude, Python, Glass, etc. Propósitos Diferentes; Avanços Tecnológicos. Interesses comerciais. Cultura e background científico. PP - Prof. Edilberto Silva - http://edilms.eti,br 7
Paradigma O que significa um paradigma? Como se traduz este significado para o contexto da programação? Como se pode caracterizar um paradigma? 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 têm impacto na forma segundo a qual uma aplicação real é modelada do ponto de vista computacional. PP - Prof. Edilberto Silva - http://edilms.eti,br 8
Características Comuns Abstração for i:=1 to n do begin x:=x*i; If(x mod 2)=0 then writeln(x, é par ) else writeln(x, é ímpar ); end; Teoria Prática Concretização Um problema do mundo real é descrito em termos de variáveis (nome, tipo, endereço), ciclos, condicionais, atribuições, expressões (valor, tipo), entrada e saída, comandos. PP - Prof. Edilberto Silva - http://edilms.eti,br 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) PP - Prof. Edilberto Silva - http://edilms.eti,br 10
Aspectos do estudo de linguagens Sintaxe: gramática (forma) Semântica: significado Pragmática (ex.: metodologias) Processadores: compiladores, interpretadores, editores, ambientes visuais... PP - Prof. Edilberto Silva - http://edilms.eti,br 11
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 PP - Prof. Edilberto Silva - http://edilms.eti,br 12
Modelo Computacional do Paradigma Imperativo Entrada Programa Saída Estado PP - Prof. Edilberto Silva - http://edilms.eti,br 13
Visão Crítica do Paradigma Imperativo Vantagens Eficiência (embute modelo de Von Neumann) Modelagem natural de aplicações do mundo real Paradigma dominante e bem estabelecido Problemas 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 PP - Prof. Edilberto Silva - http://edilms.eti,br 14
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 e operações (métodos) sobre este Classes podem ser estendidas e/ou usadas como tipos (cujos elementos são objetos) PP - Prof. Edilberto Silva - http://edilms.eti,br 15
Modelo Computacional do Paradigma Orientado a Objetos Entrada Programa Saída Entrada Programa Saída Estado Estado Entrada Programa Saída Entrada Programa Saída... Entrada Programa Saída Estado Estado Estado...... PP - Prof. Edilberto Silva - http://edilms.eti,br 16
Visão Crítica do Paradigma Vantagens Orientado a objetos Todas as do estilo imperativo Classes estimulam projeto centrado em dados: modularidade, reusabilidade e extensibilidade Aceitação comercial crescente Problemas Semelhantes às do paradigma imperativo, mas amenizadas pelas facilidades de estruturação PP - Prof. Edilberto Silva - http://edilms.eti,br 17
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 PP - Prof. Edilberto Silva - http://edilms.eti,br 18
Modelo Computacional do Paradigma Funcional Entrada Programa Saída PP - Prof. Edilberto Silva - http://edilms.eti,br 19
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 PP - Prof. Edilberto Silva - http://edilms.eti,br 20
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: sistemas especialistas e banco de dados PP - Prof. Edilberto Silva - http://edilms.eti,br 21
Modelo Computacional do Paradigma Lógico Entrada Programa Saída PP - Prof. Edilberto Silva - http://edilms.eti,br 22
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 PP - Prof. Edilberto Silva - http://edilms.eti,br 23
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. PP - Prof. Edilberto Silva - http://edilms.eti,br 24
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) Ex.: Visual BASIC, Delphi, Visual Cafe... PP - Prof. Edilberto Silva - http://edilms.eti,br 25
Um breve histórico 1950... FORTRAN 1960...ALGOL-60...COBOL...LISP... SIMULA ALGOL-68 PL/I BASIC 1970...Pascal... Smalltalk C PROLOG Modula-2 ML 1980...Ada...DBASE-II... Miranda Eifell C++ 1990...Haskell...Godel... Java Delphi Orientado a objetos Imperativo Funcional Lógico PP - Prof. Edilberto Silva - http://edilms.eti,br 26
Referências Bibliográficas BIBLIOGRAFIA BÁSICA SEBESTA, R. W. Conceitos de Linguagens de Programação. Porto Alegre: Bookman, 2000. MELO, A; SILVA, F. Princípios de Linguagem de Programação. São Paulo: Edgard Blücher, 2003. BIBLIOGRAFIA COMPLEMENTAR GHEZZI, Carlos; JAZAYERI, Mehdi. Conceitos de Linguagens de Programação. Rio de Janeiro: Campus, 1985. Varejão, Flávio. Linguagens de Programação: Conceitos e Técnicas: JAVA, C e C++ e outras. Rio de Janeiro: Campus, 2004. VILLAS, Marcos Vianna; VILLASBOAS, Luiz Felipe. Programação, Conceitos Teóricos e Linguagem. Rio de Janeiro: Campus, 1997. Ziviani, Nívio. Projeto de algoritmos com implementações em Pascal e C. 3.ed. São Paulo: Pioneira, 2004 PP - Prof. Edilberto Silva - http://edilms.eti,br 27