12.07.2015 Views

Paradigmas de Linguagens de Programação - Departamento de ...

Paradigmas de Linguagens de Programação - Departamento de ...

Paradigmas de Linguagens de Programação - Departamento de ...

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Razões para Estudar Conceitos<strong>de</strong> LPs❂ Aumentar a capacida<strong>de</strong> <strong>de</strong> expressaridéias• A profundida<strong>de</strong> com que pensamos éinfluenciada pelo po<strong>de</strong>r expressivo dalinguagem com a qual nos comunicamos;• É difícil para as pessoas expressar estruturasque elas não conseguem <strong>de</strong>screver;• Programadores sofrem o mesmo problema!!!UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 3


Razões para Estudar Conceitos<strong>de</strong> LPs❂ Permitir simular estruturas <strong>de</strong> outraslinguagens naquela que estiver usando• In<strong>de</strong>x em FORTRAN, substring em C• subprograma em Pascal, função sem retornoem CUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 4


Razões para Estudar Conceitos<strong>de</strong> LPs❂ Melhorar o entendimento da importânciada implementação• Permite usar a linguagem maisinteligentemente, pois estará avaliando asconseqüências <strong>de</strong> suas <strong>de</strong>cisõesUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 7


Razões para Estudar Conceitos<strong>de</strong> LPs❂ Melhorar a habilida<strong>de</strong> <strong>de</strong> projetar novaslinguagens• Um dia você po<strong>de</strong>rá precisar projetar uma• Mesmo que não, a experiência éenriquecedoraUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 8


Domínios <strong>de</strong> Programação❂ Aplicações Científicas• Estruturas <strong>de</strong> dados simples• Operações em ponto-flutuante• Primeira linguagem:– FORTRAN (Formula Translator)UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 10


Domínios <strong>de</strong> Programação❂ Aplicações Comerciais• Início da década <strong>de</strong> 50• 1960: COBOL (Até hoje...)• Produção <strong>de</strong> relatórios, armazenamento <strong>de</strong>informações, etc.• Muitas funções se tornaram aplicações bem<strong>de</strong>finidas e consolidadas:– planilhas, folhas <strong>de</strong> pagamento, etc.UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 11


Domínios <strong>de</strong> Programação❂ Inteligência Artificial• Primeira Linguagem:– LISP (funcional) - 1959• Linguagem mais usada:– PROLOG• Dialeto híbrido:– OBJLOG (lógica + OO)UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 12


Domínios <strong>de</strong> Programação❂ Programação <strong>de</strong> Sistemas• Softwares do sistema:– Sistema Operacional.• Eficiência na execução• Características <strong>de</strong> baixo nível• Linguagem mais utilizada: C– Quase todo o Unix é escrito nelaUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 13


Domínios <strong>de</strong> Programação❂ <strong>Linguagens</strong> <strong>de</strong> Scripts• Consiste em se agrupar uma lista <strong>de</strong>comandos em um arquivo a ser executado• Auxiliam na execução <strong>de</strong> tarefas do dia-a-dia• Perl– crescimento sensível <strong>de</strong> importância com a WWW– <strong>de</strong>senvolvimento <strong>de</strong> aplicações que usam CGI• Shell (UNIX)UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 14


Domínios <strong>de</strong> Programação❂ <strong>Linguagens</strong> <strong>de</strong> Propósito Específico• Aten<strong>de</strong>m a um <strong>de</strong>terminado domínio <strong>de</strong>problema– GPSS (General Purpose Statistic Simulation)– RPG (Report(Generator)– ANS.1 (Abstract(Sintaxe One)UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 15


Critérios Para Avaliar LPs❂ Faz-se necessário avaliar ascaracterísticas das diversas LPs,observando-se os impactos sobre oprocesso <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong> software❂ Precisamos <strong>de</strong> Critérios...UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 16


Critérios Para Avaliar LPs❂ Legibilida<strong>de</strong>❂ Aplicabilida<strong>de</strong>❂ Escritabilida<strong>de</strong>❂ CustosUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 17


Legibilida<strong>de</strong>❂ Facilida<strong>de</strong> com que um programa po<strong>de</strong> serlido e entendido❂ Conseqüência da “Crise“<strong>de</strong> Software”❂ Booch (1970) propôs o conceito <strong>de</strong> ciclo <strong>de</strong>vida❂ Deve ser consi<strong>de</strong>rada no contexto dodomínio do problemaUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 18


Legibilida<strong>de</strong>❂ Simplicida<strong>de</strong>• Afeta fortemente a legibilida<strong>de</strong>• <strong>Linguagens</strong> com um gran<strong>de</strong> número <strong>de</strong>componentes básicos são mais difíceis <strong>de</strong>apren<strong>de</strong>r do que aquelas com um númeroreduzido• Alguns programadores apren<strong>de</strong>m apenas umsubconjunto da linguagemUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 19


Legibilida<strong>de</strong>• Multiplicida<strong>de</strong> <strong>de</strong> Características:count = count + 1; count += 1;count++;++countcount;• Sobrecarga <strong>de</strong> Operadores• Simplicida<strong>de</strong> <strong>de</strong>mais po<strong>de</strong> ser um problema:– Assembly (reduzido número <strong>de</strong> estruturas)UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 20


Legibilida<strong>de</strong>❂ Ortogonalida<strong>de</strong>• Um conjunto <strong>de</strong> construções po<strong>de</strong> sercombinado para formar um outro conjunto– Apontadores em C (apontam p/ qualquer tipo)– Adição em Assembly (adição separada)• Ortogonalida<strong>de</strong> <strong>de</strong>mais po<strong>de</strong> causarproblemas:– ALGOL 68UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 21


Legibilida<strong>de</strong>❂ Declarações <strong>de</strong> Controle• Um programa que po<strong>de</strong> ser lido (quase)linearmente do início ao fim é muito mais fácil<strong>de</strong> enten<strong>de</strong>r do que um programa repleto <strong>de</strong><strong>de</strong>svios (goto’s(goto’s)– FORTRAN– BASIC• Estruturas <strong>de</strong> controle (if(if-then-else, while, , for)permitem uma leitura mais compreensívelUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 22


Legibilida<strong>de</strong>❂ Tipos e Estruturas <strong>de</strong> Dados• A possibilida<strong>de</strong> <strong>de</strong> <strong>de</strong>finir estruturas e tipos <strong>de</strong>dados também afeta a legibilida<strong>de</strong>INT fim_<strong>de</strong>_arquivo = 1;BOOLEAN fim_<strong>de</strong>_arquivo = true;while( not fim_<strong>de</strong>_arquivo == 1)while( not fim_<strong>de</strong>_arquivo )UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 23


Legibilida<strong>de</strong>❂ Sintaxe• A forma dos elementos tem um efeitosignificativo sobre a linguagem– I<strong>de</strong>ntificadores– FORTRAN 77 (6 caracteres)– BASIC ANSI (1 caractere ou 1 caractere seguido <strong>de</strong> 1número)– Java (não tem limite)UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 24


Legibilida<strong>de</strong>– Palavras Especiais:– PASCAL (begin-end)– FORTRAN 90 e ADA (if-endif)– FORTRAN 90 permite que se <strong>de</strong>fina variáveis com nomesdo e end» if if > then then then = else else else = endif endif– Forma e significado– A aparência <strong>de</strong>ve ao menos parcialmente indicar opropósito.» static em C;UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 25


Escritabilida<strong>de</strong>❂ Indica o quão facilmente uma linguagempo<strong>de</strong> ser usada em um <strong>de</strong>terminadodomínio <strong>de</strong> problema❂ Deve ser consi<strong>de</strong>rada no contexto dodomínio do problema da linguagem❂ COBOL versus CUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 26


Escritabilida<strong>de</strong>❂ Simplicida<strong>de</strong> e Ortogonalida<strong>de</strong>• Se uma linguagem tiver um gran<strong>de</strong> número <strong>de</strong>construções, programadores po<strong>de</strong>m não sefamiliarizar com todas– Mal uso <strong>de</strong> algumas e <strong>de</strong>suso <strong>de</strong> outras• Ortogonalida<strong>de</strong> <strong>de</strong>mais po<strong>de</strong> prejudicar aescritabilida<strong>de</strong>UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 27


Escritabilida<strong>de</strong>❂ Suporte para Abstração• Possibilida<strong>de</strong> <strong>de</strong> se <strong>de</strong>finir e usar estruturascomplexas sem que os aspectos internos <strong>de</strong>iplementação <strong>de</strong>ssas estruturas sejam vistospelo programador– Implementação <strong>de</strong> uma Árvore Binária em FORTRAN,Pascal e em JavaUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 28


Escritabilida<strong>de</strong>❂ Expressivida<strong>de</strong>• Po<strong>de</strong> se referir a diversas características– count++;(C, C++, Java)– for (Pascal, C)UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 29


Confiabilida<strong>de</strong>❂ Um programa é dito confiável se eleexecuta <strong>de</strong> acordo com suasespecificações sob quaisquercircunstânciasUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 30


Confiabilida<strong>de</strong>❂ Checagem <strong>de</strong> Tipos• Verifica se os valores atribuídos aos tiposestão <strong>de</strong> acordo com os <strong>de</strong>finidos• Quando uma linguagem faz uma verificaçãorigorosa <strong>de</strong> seus tipos, diz-se que ela éfortemente tipada.– Java e Pascal – C UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 31


Confiabilida<strong>de</strong>❂ Manipulação <strong>de</strong> Exceções• É a possibilida<strong>de</strong> <strong>de</strong> um programa interceptarum erro em tempo <strong>de</strong> execução, tomar asmedidas a<strong>de</strong>quadas e continuar (ou não) aexecução– Java, C++ e Ada – Pascal, C e FORTRAN UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 32


Confiabilida<strong>de</strong>❂ “Aliasing”• É a possibilida<strong>de</strong> <strong>de</strong> se ter duas ou maisreferências para um mesmo local da memória• É uma técnica perigosa <strong>de</strong> programação– C (apontadores e Unions)– Java não possui essa proprieda<strong>de</strong>UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 33


Confiabilida<strong>de</strong>❂ Legibilida<strong>de</strong> e Escritabilida<strong>de</strong>• Quanto mais fácil <strong>de</strong> escrever um programa,maior a probabilida<strong>de</strong> <strong>de</strong>le estar certo• Quanto mais fácil <strong>de</strong> escrever um programa,maior a facilida<strong>de</strong> <strong>de</strong> corrigi-loe <strong>de</strong> (re(re-)escrevê-loUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 34


Custo❂ É uma função <strong>de</strong> algumas outrascaracterísticas• 1) Custo <strong>de</strong> Treinamento– ortogonalida<strong>de</strong> e simplicida<strong>de</strong>• 2) Custo <strong>de</strong> escrever programas na linguagem– escritabilida<strong>de</strong>• 3) Custo <strong>de</strong> compilar programasUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 35


Custo• 4) Custo <strong>de</strong> executar programas– projeto da linguagem• 5) Custo do sistema <strong>de</strong> implementação• 6) Custo da confiabilida<strong>de</strong> pobre• 7) Custo <strong>de</strong> manutenção– muitas outras características, sobretudo alegibilida<strong>de</strong>UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 36


Consi<strong>de</strong>rações sobre osCritérios <strong>de</strong> Avaliação❂ Po<strong>de</strong> haver outros critérios:• portabilida<strong>de</strong>, generalida<strong>de</strong>, <strong>de</strong>finição, etc.❂ Critérios são subjetivos• legibilida<strong>de</strong>, escritabilida<strong>de</strong>, , etc.❂ Critérios têm valores diferentes, <strong>de</strong>pen<strong>de</strong>ndo daperspectiva:• implementadores, usuários, projetistasUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 37


Influências no Projeto <strong>de</strong> LPs❂ Arquitetura do Computador• Arquitetura <strong>de</strong> Von Neumann influenciou fortemente aadoção <strong>de</strong> linguagens imperativasMemóriaResultados das OperaçõesInstruções e dadosUCPALUUCUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 38


Influências no Projeto <strong>de</strong> LPs❂ Devido à Arquitetura <strong>de</strong> Von Neumann ascaracterísticas centrais das linguagensimperativas são:• variáveis células <strong>de</strong> memória• atribuições operaçõções• sequenciamentoUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 39


Influências no Projeto <strong>de</strong> LPs❂ Metodologias <strong>de</strong> Programação• orientação a processos• orientação a dadosUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 40


Categorias <strong>de</strong> <strong>Linguagens</strong>❂ Imperativas❂ Funcionais❂ Orientadas a Objeto❂ LógicasUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 41


Imperativas❂ Do Latim: Imperare (significa “comandar”)❂ Baseiam-se em comandos que atualizamvariáveis armazenadas na memória❂ Em princípio, po<strong>de</strong>m ser implementadas <strong>de</strong>forma eficiente (<strong>de</strong>vido à arquitetura)❂ Domínio: Aplicações comerciais, S.O., etc.❂ Exemplos: Pascal, C, COBOL, etc.UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 42


Funcionais❂ Baseiam-se em princípios da matemáticapara realizar computações• Funções❂ Interação (Imperativa) x Recursão❂ Domínio: Matemática, I.A.❂ Exemplos: LISP, , ML, Scheme, CLOS, etc.UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 43


Orientadas a Objetos❂ Baseiam-se no conceito <strong>de</strong> classes❂ Atributos + Métodos = Classe;❂ Hoje aplica-se a praticamente todos osdomínios❂ Exemplos: Java, C++, Simula 67, etc.UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 44


Lógicas❂ Baseiam-se na noção <strong>de</strong> que um programaimplementa uma relação ao invés <strong>de</strong> ummapeamento❂ Domínio: Inteligência Artificial❂ Exemplo: PrologUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 45


Métodos <strong>de</strong> Implementação❂ Compilação❂ Interpretação Pura❂ Implementação Híbrida• Interpretação <strong>de</strong> Código ArmazenadoUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 46


Compilação❂ Consiste em se traduzir um programa fontepara um programa em linguagem <strong>de</strong>máquina (ou montagem), , que po<strong>de</strong> serexecutado (quase) diretamente❂ Execução rápida❂ Fortran, , C, COBOL, , Pascal, etc.UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 47


CompilaçãoOtimizaçãoDadosCódigoFonteAnalisadorLéxicoAnalisadorSintáticoGerador <strong>de</strong> Cod.Interm. (e AnalisadorSemântico)Gerador<strong>de</strong> CódigoComputadorResultadosTabela <strong>de</strong>SímbolosUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 48


Interpretação Pura❂ Executa (“interpreta”) os comandos docódigo fonte❂ Simula uma máquina virtual❂ “Debugging”” mais simples❂ 10 a 100 vezes mais lenta que a compilação❂ Scripts Shell, Prolog, etc.UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 49


Interpretação PuraCódigoFonteInterpretadorResultadosUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 50


Implementação Híbrida❂ Utiliza as duas abordagens anteriores❂ Traduz um programa fonte - <strong>de</strong> alto nível -para um programa intermediário <strong>de</strong> fácilinterpretação❂ Java (atualmente já é possível compilar),Perl, etc.UFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 51


Implementação HíbridaDadosCódigoFonteAnalisadorLéxicoAnalisadorSintáticoGerador <strong>de</strong> Código.IntermediárioInterpretadorResultadosUFPB/CCT/DSC <strong>Paradigmas</strong> <strong>de</strong> <strong>Linguagens</strong> <strong>de</strong> Programação 52

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!