2018-1
| Departamento | Computação |
| Unidade | Instituto de Ciências Exatas e Biológicas |
| Carga horária semanal | 2 teóricas + 2 práticas = 4 total |
| Duração em semanas | 18 |
| Carga horária semestral | 72 horas-aula |
| Pré-requisitos | BCC201 – Introdução à Programação |
| Cursos | Ciência da Computação: obrigatória 3o período |
Ao final do curso espera-se que os alunos possuam os seguintes conhecimentos e habilidades:
Conhecimento das características fundamentais de linguagens funcionais modernas;
Noções básicas sobre o modelo de execução de programas em linguagens funcionais;
Noções básicas sobre sistemas de tipos e inferência de tipos;
Capacidade de distinção entre polimorfismo paramétrico, de sobrecarga e de inclusão;
Entendimento dos diferentes mecanismos de avaliação de expressões em linguagens de programação;
Capacidade para comparar características de linguagens de diferentes paradigmas;
Habilidade para programar em uma linguagem funcional moderna;
Entendimento sobre a implementação da noção de estado em linguagens funcionais puras;
Noções de derivação de programas a partir da especificação e sobre prova de correção de programas em linguagens funcionais.
Características dos principais paradigmas de programação.
Princípios do paradigma de programação funcional.
Principais características das linguagens de programação funcional:
recursão,
abstração funcional,
funções de ordem superior,
tipos de dados algébricos,
polimorfismo,
inferência de tipos,
avaliação estrita e avaliação lazy, e
sobrecarga.
Estudo de uma linguagem funcional moderna e desenvolvimento de programas nesta linguagem, enfocando aspectos de correção, modularidade e reuso de código.
Aulas expositivas sobre o conteúdo. Os conceitos serão apresentados através da solução de problemas que requerem aplicação de tais conceitos. Será dada uma forte ênfase na implementação como instrumento para garantir a assimilação dos conceitos da programação funcional.
Aulas práticas onde o aluno terá a oportunidade de escrever programas e trechos de programas usando os conceitos e construções sendo estudados. Para tanto deverá seguir roteiros com as tarefas a serem realizadas.
Exercícios de implementação de programas e trechos de programas para assimilação dos conceitos apresentados.
Exercícios de implementação mais elaborados para consolidar os conceitos estudados.
A avaliação será feita por um conjunto de provas escritas, um conjunto de trabalhos práticos, e um conjunto de mini testes. A princípio os mini testes acontecerão semanalmente ao fnal da aula teórica.
A tabela a seguir enumera as atividades de avaliação previstas, com os respectivos pesos na formação da nota final, e datas de realização.
| avaliação | peso | data | assuntos | |
|---|---|---|---|---|
| Prova 1 | 2,5 | 25/04/2018 | Qua | |
| Prova 2 | 2,5 | 04/06/2018 | Seg | |
| Prova 3 | 2,5 | 11/07/2018 | Qua | |
| Testes | 1,5 | Semanalmente | ||
| Trabalhos | 1,0 | |||
| Exame especial | 16/07/2018 | Seg | De acordo com a resolução CEPE 2.880 |
A nota geral de cada conjunto de avaliações será dada pela média aritmética das notas obtidas nas atividades individuais desenvolvidas naquela forma de avaliação.
A nota final será dada pela média ponderada das atividades avaliativas, conforme consta na tabela anterior.
As atividades deverão ser submetidas através do site da disciplina na plataforma Moodle da UFOP: http://www.moodlepresencial.ufop.br/course/view.php?id=16533
|
|
Haskell Programming from First Principles |
|
|
Learn You a Haskell for Great Good!: A Beginner’s Guide |
|
|
Haskell: The Craft of Functional Programming |
|
|
Programming in Haskell |
Este assunto deve ser muito simples. Não entregue trabalhos de outra pessoa como sendo seus, e não compartilhe suas soluções com outros alunos.
Você deve se sentir livre para discutir os problemas propostos e os projetos de programação com os colegas, mas todo trabalho que você submeter ao professor deve ser de sua própria autoria. Ou seja, você deve elaborar suas próprias soluções para os problemas e implementar seus projetos de programação você mesmo.
Se você discutir suas idéias com outros estudantes, não tem problema, mas faça uma observação sobre o mesmo na submissão do seu trabalho.
As atividades propostas são para trabalho individual.
Existe um grupo de discussão sobre o conteúdo da disciplina no Google Groups que deverá ser utilizado ativamente pelos alunos, professor e monitores durante o curso.
O professor e os monitores poderão propor questões para discussão no grupo, bem como problemas para serem resolvidos.
Caberá aos alunos discutir as questões e problemas propostos, apontando soluções básicas e/ou soluções alternativas ou comentando o assunto. Os alunos poderão também propor algum problema ou levantar alguma questão para discussão que julgarem interessante.
O endereço do grupo de discussão é http://groups.google.com/group/bcc222.
Cada aluno deverá se inscrever imediatamente no grupo e começar a participar das discussões.
Nas aulas será utilizada a linguagem Haskell para desenvolver os conceitos de programação funcional.
Para desenvolvimento de programas em Haskell serão usados:
GHC: compilador de Haskell. Pode ser instalado como parte da Plataforma Haskell.
Visual Studio Code: editor de texto.
Os roteiros das aulas estão disponíveis em progfunc.pdf. Atualizado em 06/02/2018.
| # | Dia | Assusntos | Referências (apostila) | |
|---|---|---|---|---|
| 01 | 12/03 | Apresentação da disciplina | ||
| 02 | 14/03 | Paradigmas de Programação | 1 | |
| 03 | 19/03 | Introdução à linguagem Haskell | ||
| 04 | 21/03 | Ferramentas de desenvolvimento | 2 | |
| 05 | 26/03 | Valores, tipos, expressões, variáveis, funções, equações | ||
| 06 | 28/03 | Declarações locais | ||
| 07 | 02/04 | Expressão condicional | ||
| 08 | 04/04 | Tuplas, listas, opcionais | ||
| 09 | 09/04 | Polimorfismo | ||
| 10 | 11/04 | Recursividade | ||
| 11 | 16/04 | Casamento de padrão | ||
| 12 | 18/04 | Processamento de listas | ||
| 13 | 23/04 | (Continuação) | ||
| 14 | 25/04 | Prova 1 | ||
| 15 | 30/04 | Expressão lambda, funções de ordem superior, aplicação parcial de função | ||
| 16 | 02/05 | (Continuação) | ||
| 17 | 07/05 | Programas interativos | ||
| 18 | 09/05 | (Continuação) | ||
| 19 | 14/05 | (Continuação) | ||
| 20 | 16/05 | (Continuação) | ||
| 21 | 21/05 | (Continuação) | ||
| 22 | 23/05 | Tipos algébricos | ||
| 23 | 28/05 | (Continuação) | ||
| 24 | 30/05 | Classes de tipos | ||
| 25 | 04/06 | Prova 2 | ||
| 26 | 06/06 | Avaliação lazy | ||
| 27 | 11/06 | Prova de propriedade de programas | ||
| 28 | 13/06 | Funtores | ||
| 29 | 18/06 | Mônadas | ||
| 30 | 20/06 | (Continuação) | ||
| 31 | 25/06 | (Continuação) | ||
| 32 | 27/06 | (Continuação) | ||
| 33 | 02/07 | Parsers | ||
| 34 | 04/07 | (Continuação) | ||
| 35 | 09/07 | (Continuação) | ||
| 36 | 11/07 | Prova 3 | ||
| 18/07 | Exame especial |
| # | Data entrega | Solução |
|---|---|---|
| 1 | 09/04/2018 Seg 10:00hs | |
| 2 | ||
| 3 | 20/05/2018 Seg 10:00hs | |
| 4 | 23/05/2018 Qua 23:55hs |
| # | Submeter até | Assunto |
|---|---|---|
| 1 | 27/05/2018 Dom | Programas interativos |
Última atualização: 2018-07-02 13:27:33 por José Romildo Malaquias.