Linguagens de Programação

Apresentação

Está é a página da disciplina Linguagens de Programação, do professor Fabio Mascarenhas, para o semestre de 2015.2. As aulas da disciplina são às segundas e quartas, das 13 às 15 horas.

O objetivo dessa disciplina é expor os alunos aos diferentes paradigmas de programação, mostrando a eles o que está “atrás da cortina” desses paradigmas. Os alunos aprenderão como a maneira de funcionamento das linguagens com as quais eles já estão familizarizados é apenas uma possibilidade em um grande espaço de linguagens possíveis. Para isso faremos tanto o estudo de “linguagens símbolo” dos diferentes paradigmas, quanto a construção e estudo de pequenos interpretadores para linguagens que são exemplos estilizados dos mesmos paradigmas.

Os alunos precisam ter uma boa desenvoltura com programação, em especial com estruturas de dados e funções recursivas. Não é necessário conhecimento da teoria de linguagens formais, ou de técnicas de compilação; o enfoque desse curso é o comportamento das linguagens e não análise sintática ou geração de código.

Ementa

Introdução à programação funcional pura; programação funcional com Scala: funções como valores, case classes, pattern matching; padrões de programação funcional: listas, mapas e folds; o interpretador de fun, uma mini-linguagem funcional; regras de escopo de seu efeito em funções de primeira classe; acrescentando tipos a fun; o familiar revisitado: microC, uma linguagem imperativa com ponteiros e funções de primeira ordem; lvalues vs. rvalues; a essência da programação em objetos.

Avaliação

A avaliação será feita por provas e por pequenos trabalhos práticos. A nota das provas corresponderá a 60% da nota final (6 pontos) e a dos trabalhos a 40% (4 pontos). Serão três provas, uma na metade do período e as outras duas no final, e será feita uma média aritmética das duas maiores notas. Não haverá prova final ou segunda chamada. A média final é 5,0.

Datas das Provas

P1: 16/12/2015

P2: 07/03/2016

P3: 14/03/2016

As provas serão feitas no mesmo horário da aula.

Lista de Discussão

Temos um grupo no Facebook para perguntas e avisos sobre a matéria. Acessem aqui.

Livros

Uma boa referência para os assuntos das nossas primeiras aulas, sobre programação funcional, é o capítulo 1 do Structure of Interpretation of Computer Programs, de Abelson e Sussman.

Não existe um livro texto único para essa disciplina. O que mais se aproxima disso é a segunda parte (do capítulo 15 em diante) do livro Programming and Programming Languages, de Shriram Krishnamurthi, por adotar a estratégia de explicar conceitos de linguagens de programação através do estudo de pequenos interpretadores. Outro livro que adota a mesma estratégia é o Essentials of Programming Languages, de Friedman e Wand.

Os livros acima usam respectivamente Pyret e Racket como linguagens de implementação dos seus interpretadores, enquanto vamos usar Scala, que tem uma sintaxe mais familiar para programadores C e Java que Racket, e ferramentas mais robustas do que Pyret. O curso de programação funcional com Scala do criador da linguagem, Martin Odersky, é um bom tutorial para o subconjunto de Scala que vamos usar.

Provavelmente o melhor livro para uma visão de alto nível dos conceitos de linguagens de programação é o Programming Language Pragmatics, de Michael Scott. É uma boa referência para resumos de vários temas que serão cobertos em sala.

Notas de Aula

As notas de aula serão publicadas aqui no decorrer do semestre.

14/10 - Slides, projeto Eclipse

#### 19/10 - Slides, projeto Eclipse #### 21/10 - Slides, projeto Eclipse #### 04/11 - Slides, projeto Eclipse #### 11/11 - Slides, projeto Eclipse #### 16/11 - Slides, projeto Eclipse #### 23/11 - Slides, projeto Eclipse #### 25/11 - Slides, projeto Eclipse #### 30/11 - Slides, projeto Eclipse #### 02/12 - Slides, projeto Eclipse #### 07/12 - Slides, projeto Eclipse #### 09/12 e 14/12 - Revisão para a P1 #### 04/01 - Slides, projeto Eclipse #### 06/01 - Slides, projeto Eclipse, SML/NJ (smlnj.msi) #### 11/01 - Slides, projeto Eclipse #### 13/01 - Slides, projeto Eclipse #### 18/01 - Slides, projeto Eclipse #### 25/01 - Slides, projeto Eclipse #### 27/01 - Slides, projeto Eclipse #### 01/02 - Slides, projeto Eclipse #### 03/02 - Slides, projeto Eclipse #### 15/02 - Slides, projeto Eclipse #### 17/02 - Slides, projeto Eclipse #### 22/02 - Slides, projeto Eclipse #### 24/02 - Slides, projeto Eclipse #### 29/02 - Slides, projeto Eclipse

Listas de Exercício

As listas de exercício são sempre individuais, a não ser que seja dito o contrário para alguma lista.

24/10/2015 - Primeira Lista, entrega até 03/11/2015, respostas

#### 18/11/2015 - Segunda Lista, entrega até 02/12/2015, respostas #### 04/12/2015 - Terceira Lista, entrega até 18/12/2015 #### 03/02/2016 - Quarta Lista, entrega até 19/02/2016, respostas #### 02/03/2016 - Quinta Lista, entrega até 16/03/2016

Provas

Primeira Prova e gabarito

Instalando Scala

Recomendo o download da IDE (ambiente integrado de desenvolvimento) para Scala baseado em Eclipse, a Scala IDE, que é o que usarei em sala. O código fonte que acompanha as notas de aula será fornecido como projetos que poderão ser importados diretamente na IDE.

Contato

Podem entrar em contato pelo meu email que responderei assim que possível. Também tenho um horário de atendimento de alunos na minha sala, segundas e quartas de 15 às 16 horas. A sala é a E-2013 do DCC.


Última Atualização: 2016-05-18 10:58