UFABC - MCTA016-13 - Paradigmas de Programação
Segundo Quadrimestre de 2019
Índice
Turmas: DA2MCTA016-13SA e NA2MCTA016-13SA
Professores: Emilio Francesquini
E-mail: e.francesquini@ufabc.edu.br
Avisos
- devem me mandar um e-mail manifestando o interesse até dia 20/09. Todos aqueles interessados em fazer a Rec.
- Notas finais online! Caso tenham alguma observação ou reclamação avisem-me o quanto antes!!
↑ novidades
- Notas da P2 online.
- Atenção às salas da SUB dia 04/09. A prova da manhã será aplicada pela Profa. Carla Lintzmayer.
- 08h00 → A-113-0
- 19h00 → A-108-0
- 08h00 → S-205-0
- 19h00 → A-108-0
Atenção às salas da P2 dia
28/08. A prova será aplicada pela Profa. Carla Lintzmayer.
Dia Nota máxima 25/08 10 26/08 9 27/08 8 28/08 5 29/08 em diante 0 - Notas da P1 online. Finalmente!
- Horário da P2 corrigido na programação de aulas.
prof.emilio.ufabc@gmail.com
Excepcionalmente o atendimento hoje será feito
online. Você poderá me encontrar no Google Hangouts no seguinte
endereço: - A monitoria do dia 12/08 excepcionalmente será às 9h.
- Atividade Bônus online. Prazo 11/08/2019 23h00.
- 5 e 6 disponíveis. Listas de exercícios
- Atenção: Com a definição pela prograd da data da reposição da aula perdida no dia 14/06, o calendário para o final do curso foi ligeiramente alterado. Avise-me por e-mail o quanto antes caso essas novas datas causem problemas.
- PDF, Código Exemplo). No oferecimento passado desta disciplina, o Caio Cesar Dionello e o Ricardo Rodrigues de Mendonça montaram um tutorial sobre o uso de GTK com Haskell. O tutorial está disponibilizado aqui (
- disponível aqui. Código completo do Arkanoid em Haskell usando Gloss
- Torneio de Haskell @ URI Online Judge
- Link de divulgação de notas no ar.
- atendimento de monitoria divulgados! Horários de
- Teoria das Categorias para Programadores do professor Fabrício Olivetti terão 1 ponto adicional na média final! TODOS que forem aprovados no curso de
- Links para submissão da proposta do projeto disponíveis.
- Amanhã dia 14/06 não teremos aula devido à greve.
- Teoria das Categorias para Programadores, pelo professor Fabrício Olivetti Curso gratuito:
- Página online
Informações Gerais
Turma Diurno (DA2MCTA016-13SA)
- Quartas das 10:00 às 12:00, Sala 409-2
- Sextas das 08:00 às 10:00, Sala S-008-0
Turma Noturno (NA2MCTA016-13SA)
- Quartas das 21:00 às 23:00, Sala 407-2
- Sextas das 19:00 às 21:00, Sala S-006-0
Atendimento
Horário | Seg | Ter | Qua | Qui | Sex |
---|---|---|---|---|---|
08:00 - 09:00 | Aula Teoria | ||||
09:00 - 10:00 | Aula Teoria | ||||
10:00 - 11:00 | Aula Prática | Atendimento (Emilio) | |||
11:00 - 12:00 | Atendimento (Pedro) | Aula Prática | Atendimento (Emilio) | ||
----- | |||||
17:00 - 18:00 | Atendimento (Emilio) | ||||
18:00 - 19:00 | Atendimento (Pedro) | Atendimento (Emilio) | |||
19:00 - 20:00 | Atendimento (Emilio) | Aula Teoria | |||
20:00 - 21:00 | Aula Teoria | ||||
21:00 - 22:00 | Aula Prática | ||||
22:00 - 23:00 | Aula Prática |
- Monitoria
- Monitor: Pedro Faustini - pedro.faustini@ufabc.edu.br
- Local: Sala de Atendimento aos alunos (ao lado da sala 501-2)
- Horários
- Segunda-feira das 11h às 12h
- Terça-feira das 18h às 19h
- Presencial
- Horários de atendimento
- Nos horários listados abaixo não é preciso confirmar ou marcar, apenas apareça! :-)
- Quinta-feira, das 17:00 às 20:00, Sala 531-2.
- Sexta-feira, das 10:00 às 12:00, Sala 531-2.
- Agendado por e-mail
- Verifique minha agenda e sugira pelo menos dois possíveis horários!
- Em sala de aula - Após as aulas
- Horários de atendimento
- Online
- Por e-mail.
Sobre a Disciplina
MCTA016-13 - Paradigmas de Programação
- TPI: 2-2-4
- Recomendação: Processamento da Informação, Programação Orientada a Objetos
Objetivos
Esta disciplina traz à atenção do aluno as diversas diferenças fundamentais entregrandes famílias de linguagens de programação, tanto em teoria como de forma prática. Estavisão tem efeitos importantes, nem sempre perceptíveis: ao apreciar diversas técnicas deprogramação e mecanismos peculiares de linguagens de programação diferentes, o estudanteexpande seu leque de técnicas e rompe sua rigidez de concepção a respeito do que vem a serprogramar. Além disso, há situações onde um paradigma se aplicará com mais sucesso do queoutro. Pode-se sem dúvida afirmar que a programação em diferentes paradigmas auxilia namelhoria da qualidade da programação de forma geral.
Conteúdo Programático
Visão comparativa entre os paradigmas de programação. Paradigmafuncional. Paradigma concorrente.
Fonte: Projeto Pedagógico do BCC 2017
Datas Importantes
- Prova 1 - 19/07/2019
- Prova 2 -
23/08/2019→ 28/08/2019 - Projeto - 25/08/2019
- Prova Substitutiva -
28/08/2019→ 04/09/2019 - Prova de Recuperação - A definir (Q3 2019)
Listas de Exercícios
Exercícios dados em aula:
- Cifra de César
- Recursão
- Sistemas de voto
- Tautologias
- Jogo da Zebra
- K-Means Paralelo (Arquivo de Entrada - Wine Quality Data)
Atividades Semanais
- Atenção 1: Repositórios criados fora do Github Classroom não serão considerados para correção.
- Atenção 2: Assegure-se de ter utilizado o link correspondente à sua própria turma!
- Atenção 3: Faça o primeiro acesso ao Github Classroom o quanto antes para verificar se o seu usuário foi criado corretamente.
Projeto de Programação
- Proposta de projeto
- Prazo até dia 23/06.
- Grupos de até 4 pessoas (não pode ser trocado mais tarde!)
- Uma única página (PDF, fonte 12pt) contendo, nomes e RAs dos integrantes, problema e proposta de implementação. Enviado pelo link abaixo.
- Projeto
- Prazo até dia 25/08.
- Mesmo grupo entregue na proposta!
- Entrega pelo link do GitHub Classroom abaixo.
Prazo | Diurno | Noturno | |
---|---|---|---|
Proposta | 23/06 | https://classroom.github.com/g/8pLlAv2G | https://classroom.github.com/g/NtRpptGd |
Projeto | 25/08 | Use o mesmo link acima (mesmo repositório para proposta e código). | Use o mesmo link acima (mesmo repositório para proposta e código). |
- Materiais de apoio
- Biblioteca GTK2HS - Tutorial por Caio Cesar Dionello e o Ricardo Rodrigues de Mendonça montaram um tutorial sobre o uso de GTK com Haskell. O tutorial está disponibilizado aqui (PDF, Código Exemplo).
- Biblioteca Gloss - Código completo do Arkanoid em Haskell.
Aulas
Sem. | Data | Assunto | Referências | Material |
---|---|---|---|---|
1ª | 05/06 - Aula 1 (P) | Introdução ao Haskell: ghc, ghci, cabal, stack, Emacs/Atom/Sublime/VSCode/VIM/… | [GH] 1,2; [SGS] 1; [ML] 2 | Apresentação do Curso; Introdução |
07/06 - Aula 2 (T) | Paradigmas de Programação | [GH] 1,2; [SGS] 1; [ML] 2 | Paradigmas de Programação | |
2ª | 12/06 - Aula 3 (P) | Tipos e classes padrões | [GH] 3; [SGS] 2; [ML] 3 | Tipos e classes padrões |
14/06 - Aula 4 (T) | Não houve aula devido às manifestações | |||
3ª | 19/06 - Aula 4 (P)->(T) | Cálculo λ | [GH] 4; [SGS] 4; Syntax and Semantics of Programming Languages (Lambda Calculus, Cap. 5) | Cálculo λ; Y-Combinator |
21/06 - Aula 5 - Corpus Christi | Não haverá aula. | |||
4ª | 26/06 - Aula 5 (P) | Funções, casamento de padrões, guardas, lambdas | [GH] 4; [SGS] 2; [ML] 4 | Funções |
28/06 - Aula 6 (T) | Listas | [GH] 5; [SGS] 2; [ML] 2 | Listas | |
5ª | 03/07 - Aula 7 (P) | QuickCheck, Cifra de César | [GH] 5 | QuickCheck; Cifra de César |
05/07 - Aula 8 (T) | Recursão | [GH] 6; [SGS] 2; [ML] 5 | Recursão | |
6ª | 10/07 - Aula 9 (P) | Exercícios de recursão! | [GH] 6; [SGS] 2; [ML] 5 | Exercícios |
12/07 - Aula 10 (T) | Funções de alta ordem | [GH] 7; [SGS] 4; [ML] 6 | Funções de alta ordem | |
7ª | 17/07 - Aula 11 (P) | Sistemas de Voto | [GH] 7 | Votos |
19/07 - Aula 12 (T) | Prova 1 | |||
8ª | 24/07 - Aula 13 (P) | Tipos de dados algébricos e classes | [GH] 8; [SGS] 3; [ML] 8 | ADTs; Exercício - Tautologias |
26/07 - Aula 14 (T) | Functors, Applicatives e Monads | [GH] 12; [SGS] 14; [ML] 11,12 | Monads | |
9ª | 31/07 - Aula 15 (P) | Lazyness - Computando π da maneira menos confiável do mundo | [GH] 15; Artigo de Jerzy Karczmarczuk1 | PDF; Código Fonte |
02/08 - Aula 16 (T) | Monoid, Foldable, Traversable | [GH] 14; [SGS] 13,14,15; [ML] 11 | State, Monoid, Foldable, Traversable | |
10ª | 07/08 - Aula 17 (P) | Monads - Estudo de Caso: State Transformer | [GH] 12; [SGS] 15,15; [ML] 13 | Jogo da Zebra; State Transformer (Código Fonte) |
09/08 - Aula 18 (T) | Estratégias de paralelismo | [SM] 1,2,3 | Paralelismo em Haskell; Exemplo: Fractal | |
11ª | 14/08 - Aula 19 (P) | K-Means paralelo | [SM] 3 | K-Means Paralelo (Arquivo de Entrada - Wine Quality Data) |
16/08 - Aula 20 (T) | Haskell concorrente | [SM] 7 | MVars | |
12ª | 21/08 - Aula 21 (P) | Prolog | Slides; aula.pl; aula.plt | |
23/08 - Aula 22 (T) | Aprendizado de Máquina em Haskell | Aprendizado de máquina funcional; Código | ||
13ª | 28/08 - Aula 23 (T) Reposição da aula de Sex. 21/06. 08h/19h | Prova 2 | ||
04/09 - Aula 24 (T) Reposição da aula de Sex. 14/06. 08h/19h | Prova Substitutiva |
Critério de avaliação
Honestidade Acadêmica
Entre outros, o código de ética da UFABC estabelece em seu artigo 25 que é eticamente inaceitável que os discentes:
I - fraudem avaliações;
II - fabriquem ou falsifiquem dados;
III - plagiem ou não creditem devidamente autoria;
IV - aceitem autoria de material academico sem participação na produção;
V - vendam ou cedam autoria de material acadêmico próprio a pessoas que não participaram da produção.Muitos ainda têm dúvidas sobre a interpretação das regras definidas pelo Código de Ética da UFABC. Por esta razão, diversos professores elaboraram um documento (disponível aqui) com vários exemplos e esclarecendo a interpretação das regras acima. Abaixo uma versão resumida. Sempre consulte o documento completo ou converse com o seu professor em caso de dúvidas!
- Regra 1 - Você não pode enviar para avaliação um trabalho que não seja de sua própria autoria ou que seja derivado/baseado em soluções elaboradas por outros.
- Regra 2 - Você não pode compartilhar a sua solução com outros alunos nem pedir aos seus colegas que compartilhem as soluções deles com você.
Regra 3 - Nos trabalhos enviados para avaliação você deve indicar eventuais assistências que você tenha recebido.
ATENÇÃO: todos os trabalhos enviados para avaliação poderão ser verificados por um sistema automatizado de detecção de plágio.
Qualquer violação às regras descritas acima implicará:
- Descarte dos conceitos atribuídos a TODAS as tarefas avaliativas regulares de TODOS os envolvidos, causando assim suas reprovações automáticas com conceito F.
- Possível denúncia à Comissão de Transgressões Disciplinares Discentes da Graduação, a qual decidirá sobre a punição adequada à violação que pode resultar em advertência, suspensão ou desligamento, de acordo com os artigos 78-82 do Regimento Geral da UFABC.
- Possível denúncia apresentada à Comissão de Ética da UFABC, de acordo com o artigo 25 do Código de Ética da UFABC.
A avaliação da disciplina será composta por três notas principais: provas, atividades e projeto. Considere:
- \(N_F\) é a nota final;
- \(N_{\text{Atividades}}\) é a nota das atividades semanais;
- \(N_{\text{Provas}}\) é a nota da prova;
- \(N_{\text{Projeto}}\) é a nota do projeto.
A nota final (\(N_F\)) será determinada pela média harmônica ponderada de \(N_{\text{Atividades}}\), \(N_{\text{Provas}}\) e \(N_{\text{Projeto}}\) com pesos 4, 3 e 3 respectivamente:
\begin{equation*} N_F = \frac{10}{\frac{4}{\max\{0.1, N_{\text{Atividades}}\}} + \frac{3}{\max\{0.1, N_{\text{Provas}}\}} + \frac{3}{\max\{0.1, N_{\text{Projeto}}\}}} \end{equation*}O conceito final (\(C_F\)) será obtido de acordo com a equação abaixo:
\begin{equation*} C_F = \begin{cases} \textbf{O} ,& \text{se ausência total exceder 25%}\\ \textbf{F} ,& \text{se } N_F \in [0,0;5,0) \\ \textbf{D} ,& \text{se } N_F \in [5,0;6,0) \\ \textbf{C} ,& \text{se } N_F \in [6,0;7,0) \\ \textbf{B} ,& \text{se } N_F \in [7,0;8,5) \\ \textbf{A} ,& \text{se } N_F \in [8,5;10,0] \\ \end{cases} \end{equation*}O gráfico abaixo mostra a relação entre \(N_{\text{Atividades}}\), \(N_{\text{Provas}}\), \(N_{\text{Projeto}}\) e os conceitos:
Avaliação Atividades
- Haverá uma atividade de laboratório por semana, totalizando 10 atividades ao longo do quadrimestre.
- O enunciado de cada atividade será divulgado toda quarta antes da aula prática no repositório da disciplina no GitHub.
- A solução dessas atividades deverá ser entregue apenas pelo Github, até o domingo da semana seguinte à liberação do enunciado (11 dias de prazo).
- A nota de cada laboratório poderá chegar a 10 caso o programa
execute corretamente em todos os casos de teste e será 0 caso
contrário.
- Exemplos de problemas que causam redução da nota: código mal escrito, nomes de variáveis/funções pouco claros, desorganização do código.
- Cada atividade terá um peso específico, divulgado em seu enunciado, que irá variar de acordo com sua complexidade.
- Não serão aceitas soluções fora do prazo.
- Não haverá laboratórios substitutivos.
- Essas atividades devem ser feitas individualmente.
Avaliação Provas
A nota da teoria \(N_{\text{Provas}}\) será será formada por duas provas \(P_1\) e \(P_2\). Todas as provas serão efetuadas em sala de aula, sem qualquer tipo de consulta.
Haverá também uma prova subsitutiva \(P_S\) que será aberta a todos os interessados, ainda que eles tenham feito tanto a \(P_1\) quanto a \(P_2\).
Atenção
A nota da \(P_S\) será utilizada obrigatoriamente em substituição à menor nota entre \(P_1\) e \(P_2\) ainda que isto diminua a nota final do aluno!
Assim, a nota de provas (\(N_{\text{Provas}}\)) será calculada conforme a seguinte fórmula:
\begin{equation*} N_{\text{Provas}} = \begin{cases} \frac{2 \cdot P_S + 3 \cdot P_2}{5} ,& \text{caso tenha feito a } P_S \text{ e } P_1 < P_2 \\ \frac{2 \cdot P_1 + 3 \cdot P_S}{5} ,& \text{caso tenha feito a } P_S \text{ e } P_2 \leq P_1 \\ \frac {2 \cdot P_1 + 3 \cdot P_2}{5} ,& \text{caso contrário} \end{cases} \end{equation*}Avaliação Projeto
O enunciado do projeto será anunciado em breve. Ele poderá ser feito em grupos de até 4 pessoas. A sua nota será dada pela qualidade do código (organização, documentação, …), complexidade do projeto, documentação, etc.
Recuperação
Conforme Resolução ConsEPE nº 182 fica assegurado a todos os alunos com \(C_F\) igual a D ou F o direito a fazer uso de mecanismos de recuperação.
A recuperação será feita através de uma prova \(P_R\), sem consulta, e a sua nota será utilizada para compor a o conceito pós-recuperação \(C_R\) conforme as equações abaixo:
\[N_R = \frac{P_R + N_F}{2}\]
Caso 1 \(C_F = D\):
\begin{equation*} C_R = \begin{cases} \textbf{C} ,& \text{se } N_R \geq 6,0 \\ \textbf{D} ,& \text{caso contrário} \end{cases} \end{equation*}Caso 2 \(C_F = F\):
\begin{equation*} C_R = \begin{cases} \textbf{D} ,& \text{se } N_R \geq 5,0 \\ \textbf{F} ,& \text{caso contrário} \end{cases} \end{equation*}Notas
Recursos Online
Grupos, listas, páginas, …
- Grupo de Estudos em Haskell da UFABC
- Não esqueça de assinar a lista de discussão: https://groups.google.com/d/forum/haskell-brasil
- Haskell Home Page
- #haskell IRC channel
- StackOverflow
- A lista Haskell-beginners é um bom lugar para buscar respostas para perguntas básicas
- A lista Haskell-cafe é boa para buscar respostas a perguntas mais elaboradas
- O Haskell Wiki tem uma lista de respostas às perguntas mais comuns
Disciplinas em Haskell
- MCTA016-13: Paradigmas de Programação (em Haskell), UFABC. 2018.
- CR062-2018: Programação Funcional em Haskell, UFABC. 2018.
- G51PGP: Programming Paradigms, University of Nottingham. 2019.
- CS653: Functional Programming, Indian Institute of Technology Kanpur. 2018.
- CIS 194: Introduction to Haskell, University of Pennsylvania. 2016, 2015, 2014, 2013.
- … mais exemplos aqui
Leituras
Ambientes
Para os primeiros exercícios semanais, os ambientes online podem ser suficientes. Mais adiante no curso você provavelmente vai querer um ambiente local na sua máquina
- Online
- repl.it - https://repl.it/
- CodeWorld - https://code.world/haskell
- Try Haskell - http://tryhaskell.org/
- Local
- Ambiente de programação (Linux)
- The Haskell Tool Stack
- Haskell Platform (Mac OS X, Windows, Linux)
Documentação
- Standard library documentation
- Hackage - Repositório de pacotes
- Hoogle - Procurando funções para as quais você não sabe o nome?
- Hayoo - Parecido com o Hoogle, porém mais completo (procura todo o Hackage, mas está frequentemente fora do ar…)
- Se você realmente precisar, a linguagem e a biblioteca padrão do Haskell são definidos pelo Haskell 2010 - Language Report
Bibliografia
Os principal texto utilizado neste curso será o GH Segunda Edição.
[GH]
- Programming in Haskell. 2nd Edition.
- Por Graham Hutton.
A primeira edição, que tem boa parte do conteúdo da segunda edição, está disponível na biblioteca:
1st Edition (antiga)
- Link Biblioteca: http://biblioteca.ufabc.edu.br/index.php?codigo_sophia=15287
[SGS]
- Real World Haskell.
- Por Bryan O'Sullivan, John Goerzen e Don Stewart.
- Disponível gratuitamente em: http://book.realworldhaskell.org/
[ML]
- Learn You a Haskell for Great Good!: A Beginner's Guide.
- Por Miran Lipovača.
- Disponível gratuitamente em: http://learnyouahaskell.com/
[SM]
- Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming.
- Por Simon Marlow.
- Disponível gratuitamente em: https://www.oreilly.com/library/view/parallel-and-concurrent/9781449335939/
Última atualização: 2019-09-06 00:46
Emacs 26.3 (Org-mode 9.2.5)
Nota al pie de página:
Segundo o próprio autor, o título do paper é "The Most Unreliable Technique in the World to Compute PI" mas, se você estiver atrás de um título com uma pegada mais científica, poderia ser "Infinite precision real fractions, and lazy carry propagation"