UNIVERSIDADE FEDERAL DO PARÁ Centro de Ciências Exatas e Naturais Pós-Graduação em Ciência da Computação - PPGCC Nome: Programação de Computadores Ementa: A disciplina objetiva apresentar e exercitar as características fundamentais de cada paradigma de programação relevante hoje em dia, objetivando oferecer elementos ao aluno para realizar a escolha adequada da linguagem para uma dada situação. Bibliografia Básica: WATT, David (with contributions by Willian Findlay), Programming Language Design Concepts, Chichester,England: John Wiley & Sons Ltda, 2004, 473p. Complementar: GHEZZI, Carlo. Programming Languages Concepts (3rd Edition). New York: John Wiley & Sons Ltda, 1998, 427p. MELO, Ana Cristina Vieira de; SILVA, Flávio Soares Corrêa da. Princípios de Linguagens de Programação. São Paulo: Editora Edgard Blücher, 2003, 211p. PROGRAMA: PARTE I – CONCEITOS FUNDAMENTAIS DE LINGUAGENS DE PROGRAMAÇÃO 1 - Valores e tipos: tipos primitivos, compostos, recursivos, sistemas de tipos, questões de implementação. 2 - Variáveis e armazenamento: variáveis simples e compostas, cópia e referência semântica, tempo de vida, ponteiros, expressões com efeitos colaterais, questões de implementação. 3 – Vinculação e escopo: vinculação e ambientes, escopo, declarações, blocos. 4 – Abstração de procedimento: funções e procedimentos, parâmetros e argumentos, questões de implementação PARTE II - CONCEITOS AVANÇADOS DE LINGUAGENS DE PROGRAMAÇÃO 1 - Abstração de dados: unidades de programas, blocos e encapsulamento, tipos abstratos, objetos e classes, questões de implementação. 2 - Abstração genérica: unidades genéricas e instanciação, parâmetros tipo e classe, questões de implementação. 3 - Sistemas de tipos: polimorfismo de inclusão, polimorfismo de parâmetro, sobrecarga, conversão de tipos, 4 – Fluxos de controle: seqüenciadores, desvios, escapes, exceções, questões de implementação. 5 – Concorrência: programas e processos, problemas com concorrência, interação entre processos, primitivas de concorrência, abstrações de controle concorrentes. PARTE III – PARADIGMAS 1 Programação imperativa: conceitos-chave, estudos de caso: C e ADA. 2 Programação Orientada a objetos: conceitos-chave, estudos de caso: C++, Java, Ada95. 3 – Programação concorrente: conceitos-chave, estudos de caso: Ada95, Java. 4 – Programação Funcional: conceitos-chave, estudos de caso: Haskell, Lisp. 5 – Programação em lógica: conceitos-chave, estudos de caso: Prolog. 6 – Linguagens de Scripting: conceitos-chave, estudo de caso: Python. PARTE IV – Conclusões 1 - Seleção de uma linguagem de programação: critérios, avaliação. 2 – Projeto de uma linguagem de programação: seleção de conceitos, regularidade, simplicidade, eficiência, sintaxe, ciclos de vida de linguagens, tendências futuras.