Diferenças entre edições de "Linguagens de Programação"
(→Ano Letivo 2015/2016:) |
(→Ano Letivo 2015/2016:) |
||
Linha 10: | Linha 10: | ||
== Enunciados e Resoluções de e-Fólios, p-Fólios e Exames de anos anteriores: == | == Enunciados e Resoluções de e-Fólios, p-Fólios e Exames de anos anteriores: == | ||
=== Ano Letivo 2015/2016: === | === Ano Letivo 2015/2016: === | ||
− | * [http://wiki.dcet.uab.pt/files/images/c/c9/E-FolioALP-15-16.pdf E-Fólio A] | + | *[http://wiki.dcet.uab.pt/files/images/c/c9/E-FolioALP-15-16.pdf E-Fólio A] |
*[http://wiki.dcet.uab.pt/files/images/5/58/EFolioBLP-15-16.pdf E-Fólio B] | *[http://wiki.dcet.uab.pt/files/images/5/58/EFolioBLP-15-16.pdf E-Fólio B] | ||
− | *[http://wiki.dcet.uab.pt/files/images/ | + | *[http://wiki.dcet.uab.pt/files/images/2/21/1ex-21077_Pf%C3%B3lio-2016.pdf Pfólio Época Normal] |
*[http://wiki.dcet.uab.pt/files/images/b/bc/2ex-21077_Pf%C3%B3lio2016.pdf Pfólio Época Recurso] | *[http://wiki.dcet.uab.pt/files/images/b/bc/2ex-21077_Pf%C3%B3lio2016.pdf Pfólio Época Recurso] | ||
*[http://wiki.dcet.uab.pt/files/images/0/07/1ex-21077-2016.pdf Exame Época Normal] | *[http://wiki.dcet.uab.pt/files/images/0/07/1ex-21077-2016.pdf Exame Época Normal] |
Revisão das 13h32min de 8 de julho de 2017
Índice
Guia Informativo Oficial
Planos da Unidade Curricular (PUC):
Enunciados e Resoluções de e-Fólios, p-Fólios e Exames de anos anteriores:
Ano Letivo 2015/2016:
Ano Letivo 2014/2015:
Ano Letivo 2013/2014:
Ano Letivo 2012/2013:
- e-fólio A
- e-fólio B
- e-fólio C
- p-fólio Época Normal de 18-fev-2013
- Exame Época Normal de 18-fev-2013
- p-fólio Época de Recurso de 24-jul-2013
- Exame Época de Recurso de 24-jul-2013
Corpo Docente:
- Nos anos letivos de 2012/2013 a 2016/2017: Prof. Jorge Morais
Links úteis:
Java
The Java™ Tutorials Tutorial da Oracle
Livro online Introduction to Programming using Java 7ed Livro muito bem escrito e de fácil leitura.
Livro Introduction to programming in Java
OCaml
Livro online Real World Ocaml
PROLOG
Video introdutório sobre Prolog Prolog Tutorial (5 estrelas)
Site livro online Learn Prolog Now
Lista de manuais em Prolog [1]
Materiais de Apoio
2013/2014
Neste ano a ordem das linguagens de programação foi, primeiro Java depois Prolog e por fim OCaml. Os e-fólios foi resolver o mesmo problema utilizando as diferentes linguagens.
2009/2010
Foram abordados três diferentes paradigmas de programação:
Programação Funcional; Programação Lógica; Programação por Objectos.
OCaml
A programação funcional constituiu uma parte significativa de toda a matéria (6 semanas). Foi utilizada a linguagem OCaml da qual apenas se estudou a parte funcional. A leitura da bibliografia fornecida não foi difícil nem muito demorada mas foi fundamental fazer bastantes exercícios. Há alguns conceitos novos, por vezes contrastantes com os de outros paradigmas, o que pode causar alguma dificuldade de adaptação. A ideia fundamental é a de que uma computação complexa se obtém pela composição de funções (como na matemática) e cada função apenas devolve um valor, não alterando o estado de outras "variáveis" - os chamados side-effects. Aqui tudo são (converte-se em) valores, até mesmo uma função "é" um valor e pode ser utilizada como argumento de outras funções, sendo estas denominadas funções de ordem superior. Esta é uma das características mais poderosas deste tipo de linguagens. Outros conceitos que importa interiorizar para nos adaptarmos a este paradigma são coisas como static binding, currying, closure, polimorfismo... mas a "força motriz" da programação funcional é mesmo a recursividade. Os algoritmos são sempre recursivos, não há ciclos iterativos do tipo while ou for. Até os tipos podem também ser recursivos!
Recursos utilizados:
Compilador
http://caml.inria.fr/resources/index.en.html
Bibliografia
Chailloux, E.; Manoury, P.; Pagano, B., Developing Applications With Objective Caml, INRIA 1995-2005
Prolog
Deste paradigma fez-se apenas uma pequena introdução, mas mesmo assim é imprescindível estudar a bibliografia e, mais uma vez, praticar bastante. Esta linguagem de programação assenta num conceito completamente diferente das restantes. Aqui nada é avaliado/convertido em valores. Aquilo com que se trabalha são factos e regras. Toda a computação consiste em verificar se uma determinada proposição é falsa ou verdadeira, verificando os factos existentes e as regras sobre eles definidos. Este processo tem por base o conceito de "unificação", fundamental para entender a linguagem. Até mesmo a aritmética - o único lugar da linguagem onde se calcula o valor de uma expressão - funciona de uma forma inesperada. É interessante (e espantoso) aquilo que se consegue fazer pensando sempre em "é falso ou verdadeiro?". No vocabulário deste paradigma estão palavras como clausula, termo, predicado, aridade, query... e recursividade! Uma grande parte da computação é conseguida de forma recursiva.
Recursos utilizados:
Compilador
http://www.swi-prolog.org/
Bibliografia
Sterling, L.; Shapiro, E., The Art of Prolog, MIT Press, 1994
Nota: Nestes dois paradigmas é essencial esquecer tudo (quase tudo) o que se sabe de programação e embarcar numa viagem por terras desconhecidas, culturas diferentes. Tal como nessa circunstância, não devemos tentar empregar (forçar) as técnicas e procedimentos que já conhecemos mas antes tentar perceber qual é a "filosofia", qual é a "cultura".
Java
Neste caso foi muito mais rápida a fase inicial, com muita coisa semelhante ao que se faz em C/C++, mas é tudo muito mais trabalhoso. É um grande contraste com os paradigmas anteriores (especialmente o funcional) o número de linhas de código que é necessário escrever para fazer mesmo a coisa mais simples. É importante dominar o conceito de apontador e referência para entender os problemas de violação do encapsulamento - um dos princípios fundamentais em POO - mas em Java não se faz nada parecido com a manipulação dos endereços de memória como em C ou C++. Se quisermos caracterizar numa frase esta linguagem (exagerando um bocadinho) podemos dizer que em Java tudo são objectos. Até os tipos numéricos têm umas "embalagens" para funcionar como tal. O vocabulário desta linguagem é já conhecido: classe, método, atributo, instância, interface, composição, herança, polimorfismo, overloading... switch e instanceof são coisas a evitar, faz-se muito foreach com as colecções e os tipos podem ser parametrizados.
Recursos utilizados:
IDE
Eclipse
Bibliografia
David J. Eck, Introduction to Programming Using Java, 2006 Martins, F. M. J., Java 6 e Programação Orientada Pelos Objectos, FCA, 2009
A unidade curricular estava bem organizada, sendo a bibliografia acessível e suficiente, exceptuando o caso do Prolog em que o livro é de qualidade, bom para conhecer os conceitos fundamentais, mas mais complexo e difícil de ler. No entanto foi fornecido um tutorial on-line que vai directo ao assunto, traduzido, tornando a aprendizagem mais rápida.
Os e-fólios foram equilibrados, 4 valores cada, e o grau de dificuldade estava de acordo com aquilo que foi trabalhado ao longo do semestre. O primeiro e-fólio foi sobre a programação funcional, com um problema sobre árvores binárias. O segundo e-fólio consistiu em fazer um programa em Java para simular uma leiloeira on-line, tipo eBay, que recebendo um ficheiro de comandos com diversas transacções produzia outro ficheiro com o resultado dessas transacções. Embora laborioso e com alguma extensão, o grau de dificuldade estava de acordo com as actividades propostas e no livro encontrava-se tudo o que era necessário para construir uma solução, sem ser necessário inventar algoritmos complexos, para os quais não tínhamos tido qualquer tipo de formação.