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-03-02 17:52