Linguagens de Programação Profa Jerusa Marchi Departamento de Informática e Estatística Universidade Federal de Santa Catarina e-mail: [email protected] Linguagens de Programação – p. 1/5 Linguagens de Programação O que é uma Linguagem de Programação? Método padronizado para expressar instruções para um computador Conjunto de regras sintáticas e semânticas usadas para definir um programa de computador Permite ao programador especificar precisamente em quais dados o computador deve atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob cada circunstância Linguagens de Programação – p. 2/5 Linguagens de Programação A especificação de um programa ou código fonte deve seguir as regras sintáticas e semânticas definidas pela linguagem de programação O código fonte é traduzido para código de máquina, que é executado pelo processador Produtividade - linguagens de alto nível Portabilidade - tornar o código fonte independente da máquina alvo Linguagens de Programação – p. 3/5 Por que estudar LP Aumentar a capacidade de expressar idéias conhecimento facilita a expressão e a abstração conhecer as construções suportadas por alguma linguagem permite desenvolver ou simular tais construções em outras linguagens Linguagens de Programação – p. 4/5 Por que estudar LP Embasamento para escolher linguagens adequadas A melhor linguagem para o desenvolvimento de um programa é a linguagem que melhor representa/trata o problema que se deseja solucionar O conhecimento leva ao uso mais eficaz dos recursos e facilidades presentes na linguagem Permite a evolução da área - desenvolvimento de novos recursos (expansões) Linguagens de Programação – p. 5/5 Por que estudar LP Facilita o aprendizado de novas linguagens Evolução contínua da área exige aprendizado constante Conhecimento dos conceitos facilita e acelera o aprendizado Entender melhor a implementação Permite entender por que uma linguagem foi implementanda de tal forma Permite o uso mais eficiente e racional dos recursos Linguagens de Programação – p. 6/5 Por que estudar LP Poder projetar novas linguagens O entendimento do que existe, permite avaliar e propor novas soluções Usar os modelos de especificação e técnicas de compilação na solução de outros problemas Contribuir para o avanço da computação Se quem usa conhece, o tempo para aceitação de boas linguagens será reduzido Linguagens de Programação – p. 7/5 Classificação de LP Quanto à Geração Quanto ao Domínio de Aplicação Quanto à implementação Quanto ao Paradigma Linguagens de Programação – p. 8/5 Classificação de LP Quanto à Geração 1a Geração: linguagem de máquina (chaves lógicas) 2a Geração: linguagem simbólica (Assembly) representação simbólica da linguagem de máquina precisa ser traduzido para a linguagem de máquina (assembler ou montador) 3a Geração: linguagens estruturadas orientadas a procedimentos Fortran, Algol, Pascal, C, COBOL, Basic, Ada, etc. 4a Geração: linguagens orientadas à aplicação lotus, excel, sql, etc. 5a Geração: linguagens voltadas para o desenvolvimento da inteligência artificial Prolog, LISP, Gödel, etc. Linguagens de Programação – p. 9/5 Classificação de LP Quanto ao domínio de Aplicação Aplicações Científicas Aplicações Empresariais Inteligência Artificial Programação de Sistemas Domínios Específicos Linguagens de Programação – p. 10/5 Classificação de LP Aplicações Científicas Estruturas de dados simples (vetores, matrizes) Pouca E/S Alta utilização de CPU Exemplos: Fortran, Algol 60, Matlab, Scilab e derivadas Linguagens de Programação – p. 11/5 Classificação de LP Aplicações Empresariais Facilidades para representação/manipulação de dados alfanuméricos Facilidade para geração de relatórios Exemplos: Cobol, Sistemas e Linguagens voltadas ao Gerenciamento de Banco de Dados (SQL, Oracle, etc.) Linguagens de Programação – p. 12/5 Classificação de LP Inteligência Artificial Foco está na manipulação simbólica Exemplos: LISP, Prolog, Haskell, Scheme, etc Linguagens de Programação – p. 13/5 Classificação de LP Programação de Sistemas desenvolvimento de software básico (SO, compiladores) recursos de baixo nível e bom desempenho Exemplos: PL/I, C e derivadas Linguagens de Programação – p. 14/5 Classificação de LP Domínios Específicos Linguagens de Scripting: Javascript, perl, php Linguagens de simulação: GPSS, Arena Linguagens de Tempo Real: RTJava, RTCC Linguagens de Programação – p. 15/5 Classificação de LP Quanto à Implementação Compiladas geração de código de baixo nível vantagem - eficiência na execução Fortran, cobol, C, Ada Interpretadas simulação de uma máquina em software vantagem - rapidez no desenvolvimento desvantagem - maior tempo de execução Basic, APL, PHP, SQL, Prolog, Haskell Linguagens de Programação – p. 16/5 Classificação de LP Quanto à Implementação Híbridas compilação para um código intermediário e interpretação deste código o código intermediário pode ou não ser transparente interpretação do código intermediário vantagem - portabilidade desvantagem - necessidade de uma máquina virtual Java, C# Linguagens de Programação – p. 17/5 Classificação de LP Quanto ao Paradigma de Programação Classificação usual Linguagens Imperativas · Procedurais, Estruturadas · Orientadas a Objetos Linguagens Declarativas · Lógicas · Funcionais Linguagens de Programação – p. 18/5 Linguagens Imperativas Linguagens Procedurais e Estruturadas baseadas na arquitetura de von Neumann blocos, procedures (funções) e recursão geralmente são fortemente tipadas implementação baseada em pilha estruturas de controle convencionais natureza top-down Linguagens de Programação – p. 19/5 Linguagens Estruturadas Vantagens Facilita a organização de prog. e sistemas Permite ocultar informação Eficiência Algumas também possuem facilidades para prog. de grandes sistemas Linguagens de Programação – p. 20/5 Linguagens Estruturadas Desvantagens gerenciamento de grandes sistemas pode ser trabalhoso abstrações menos naturais sintaxe e semântica mais complexas reuso possível, porém não explícito Linguagens de Programação – p. 21/5 Linguagens Imperativas Exemplos Algol, Pascal, C, Modula e ADA Aplicações programação científica programação de sistemas Linguagens de Programação – p. 22/5 Linguagens Imperativas Linguagens Orientadas a objetos objetos e classes atributos, métodos e mensagens abstração de dados (ocultamento de informação) ligação dinâmica e polimorfismo herança Linguagens de Programação – p. 23/5 Linguagens Orientadas a Objetos Vantagens reutilização produtividade projeto e programação integrados afinidade com o mundo real facilita manutenção/extensão de software Linguagens de Programação – p. 24/5 Linguagens Orientadas a Objetos Desvantagens complexidade conceitual maior eficiência pode ficar comprometida implementações mal projetadas/programadas Linguagens de Programação – p. 25/5 Linguagens Orientadas a Objetos Exemplos Simula, Smaltalk (pura) C++, Java, Delphi (Object Pascal) Aplicações programação de grandes sistemas em geral Linguagens de Programação – p. 26/5 Paradigma Imperativo Exemplo: Fatorial em C int fatorial (int n) { int i; for (i = n - 1; i >= 1; i-) n = n * i; return n; } Linguagens de Programação – p. 27/5 Linguagens Declarativas Linguagens Lógicas baseada no cálculo dos predicados (lógica de 1a ordem) baseada em definições recursivas, não possui estruturas de controle não possui tipos de dados, casamentos baseados em unificação de variáveis e constantes lógicas fatos, regras e consultas processo de inferência para produzir resultados (Prova de teoremas - Método da Resolução) Exemplo - Prolog e seus dialetos Linguagens de Programação – p. 28/5 Linguagens Lógicas Vantagens facilidades específicas para suas áreas de aplicação Preocupação em o que fazer, e não em como fazer Desvantagens problemas de eficiência, necessidade de controle da recursão carência de métodos para programação de grandes sistemas Aplicações área de IA - sistemas baseados em conhecimento, sistemas especialistas, proc. de linguagem natural gerenciamento de BD Linguagens de Programação – p. 29/5 Paradigma Lógico Exemplo: Fatorial em Prolog fatorial(0,1). fatorial(N,R) :- N1 is N - 1, fatorial(N1, R1), R is N * R1. Linguagens de Programação – p. 30/5 Linguagens Declarativas Linguagens Funcionais baseado em funções matemáticas funções primitivas + formas para construção de funções complexas não possuem variáveis, atribuição e iteração podem ou não ser puras presença de alguns recursos imperativos repetição feita via recursão execução - avaliação de funções normalmente interpretadas, embora possam ser compiladas Linguagens de Programação – p. 31/5 Linguagens Funcionais Vantagens sintaxe e semântica mais simples nível de programação mais elevado concorrência controlada pelo sistema de execução Desvantagens baixa eficiência comunidade reduzida de usuários Linguagens de Programação – p. 32/5 Linguagens Funcionais Exemplos LISP, Scheme, ML, Haskell Aplicações Computação simbólica Processamento de listas Aplicações de IA - Sistemas especialistas, Representação de conhecimento Linguagens de Programação – p. 33/5 Paradigma Funcional Exemplo: Fatorial em LISP (defun fatorial (n) (if (<= n 1) 1 (* n (fatorial (- n 1)))) ) ) Linguagens de Programação – p. 34/5 Linguagens de Programação O que levar em consideração no desenvolvimento ou na avaliação de linguagens de programação? tipos de dados estruturas de controle abstração funcional programação de grandes sistemas concorrência tratamento de exceções Linguagens de Programação – p. 35/5 Linguagens de Programação tipos de dados declaração vinculação estática ou dinâmica tipagem forte ou fraca construção de tipos abstratos Linguagens de Programação – p. 36/5 Linguagens de Programação estruturas de controle seleção repetição desvio incondicional entrada/saída comandos compostos Linguagens de Programação – p. 37/5 Linguagens de Programação abstração funcional subprogramas definição chamada passagem de parâmetros valor referência suporte à recursão formas de agrupamento módulos classes etc Linguagens de Programação – p. 38/5 Linguagens de Programação programação de grandes sistemas compilação em separado (ou independente) Linguagens de Programação – p. 39/5 Linguagens de Programação Concorrência Nível instrução comando unidade programa Tarefas e threads Sincronização Cooperação e Competição Mecanismos de sincronização Monitores Semáforos Troca de mensagens Linguagens de Programação – p. 40/5 Linguagens de Programação Tratamento de Exceções Tratar eventos (errôneos ou não) que são detectáveis por software ou hardware Exemplos leitura de disco overflow de ponto-flutuante índice inválido Linguagens de Programação – p. 41/5 Linguagens de Programação A linguagem deve auxiliar o programador no projeto, documentação e validação de programas Principais Critérios: legibilidade regibilidade confiabilidade Objetivos tradução eficiente execução eficiente portabilidade Linguagens de Programação – p. 42/5 Legibilidade facilidade para ler, escrever, entender e documentar programas até a década de 70 - levava-se em conta a eficiência e a legibilidade de máquina a partir de 70 - ciclo de vida do software - importância da manutenção linguagens com um conjunto pequeno de construções básicas simplicidade na declaração de tipos linguagens que permitam documentar o texto fonte Linguagens de Programação – p. 43/5 Legibilidade compromisso com a expressividade restrições léxicas (permitir identificar facilmente os elementos do programa) clareza sintática (permitir identificar claramente as estruturas/blocos do programa) concisão semântica (permitir identificar facilmente o significado das construções) Linguagens de Programação – p. 44/5 Regibilidade Linguagens de programação auxiliam no projeto de programas fornecendo mecanismos que facilitam a expressão da metodologia adotada, o que permite que o programador possa se concentrar no entendimento e na solução do problema Propriedades: simplicidade expressividade ortogonalidade Precisão na definição (formal se possível!) Linguagens de Programação – p. 45/5 Simplicidade A linguagem deve ser fácil de dominar suas características devem ser facilmente aprendidas e lembradas o resultado de qualquer combinação dessas características deve ser previsível e facilmente entendido A simplicidade é prejudicada se a linguagem oferecer várias maneiras diferentes para a especificação de um mesmo conceito a linguagem permite que diferentes conceitos sejam expressos com a mesma notação exemplo: a sobrecarga de operadores, multiplicidade de recursos para uma mesma operação Linguagens de Programação – p. 46/5 Expressividade Medida de naturalidade com que uma estratégia de resolução do problema pode ser transformada em uma estrutura de programa estruturas de controle, tipos de dados e abstração funcional Linguagens de Programação – p. 47/5 Ortogonalidade permitir que qualquer composição seja feita usando as primitivas básicas exemplo de falta de ortogonalidade: permitir que funções retornem somente um subconjunto específico de tipos primitivos Compromisso entre ortogonalidade e simplicidade Linguagens de Programação – p. 48/5 Precisão na Definição Definições sintáticas e semânticas precisas (definições formais) Linguagens de Programação – p. 49/5 Confiabilidade o programa faz o que foi programado, reagindo bem a qualquer instância do problema características boas: tratamento de exceções, tipagem forte, modularidade características ruins: goto, variáveis globais Linguagens com definições sintáticas e semânticas rigorosas são mais confiáveis Linguagens de Programação – p. 50/5 Especificação de Linguagens A especificação dos aspectos léxicos, sintáticos e semânticos pode ser Formal Informal Mista Linguagens de Programação – p. 51/5 Especificação de Linguagens Aspectos Léxicos Sintáticos Semântico Mecanismos Formais Gramáticas Regulares, Autômatos finitos Expressões Regulares Gramáticas Livres de Contexto Autômatos de pilha Gramáticas de Atributos Ações Semânticas Semântica Denotacional Linguagens de Programação – p. 52/5 Especificação de Linguagens Especificação Mista GLC + Ações Semânticas ⇒ Tradução Dirigida pela Sintaxe ⇒ Geração de Código Linguagens de Programação – p. 53/5 Especificação de Linguagens Limite entre aspectos léxicos e sintáticos Tomados em separados pois: os aspectos léxicos são mais simples aumenta a legibilidade da Especificação Sintática maior eficiência na etapa de análise Linguagens de Programação – p. 54/5 Especificação de Linguagens Limite entre aspectos sintáticos e semânticos Não muito claro Sintaxe independente de contexto Sintaxe dependente de contexto Significado Semântico Na prática considera-se a sintaxe independente do contexto com aspecto sintático enquanto que as demais são aspectos semânticos. Linguagens de Programação – p. 55/5