Diferenças entre edições de "Linguagens de Programação"
(Reformatada a página de acordo com o modelo de secções e subsecções que está a ser usado em outras UC) |
|||
Linha 1: | Linha 1: | ||
+ | [[Category:Informática]] | ||
− | 2009/2010 | + | == Planos da Unidade Curricular (PUC): == |
+ | |||
+ | |||
+ | == Enunciados e Resoluções de e-Fólios, p-Fólios e Exames de anos anteriores: == | ||
+ | |||
+ | === Ano Letivo 2013/2014: === | ||
+ | |||
+ | === Ano Letivo 2012/2013: === | ||
+ | |||
+ | * [http://wiki.dcet.uab.pt/files/images/0/06/LPefolioA.pdf e-fólio A] | ||
+ | |||
+ | * [http://wiki.dcet.uab.pt/files/images/5/5f/LPefolioB.pdf e-fólio B] | ||
+ | |||
+ | * [http://wiki.dcet.uab.pt/files/images/2/2d/LPefolioC.pdf e-fólio C] | ||
+ | |||
+ | === Ano Letivo 2011/2012: === | ||
+ | |||
+ | == Corpo Docente: == | ||
+ | |||
+ | * Nos anos letivos 2012/2013 e 2013/2014: [https://www2.uab.pt/departamentos/DCT/detaildocente.php?doc=34 Prof. Jorge Morais] | ||
+ | |||
+ | == Links úteis: == | ||
+ | |||
+ | == Materiais de Apoio== | ||
+ | === 2009/2010 === | ||
Foram abordados três diferentes paradigmas de programação: | Foram abordados três diferentes paradigmas de programação: | ||
Linha 10: | Linha 35: | ||
OCaml | 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: | Recursos utilizados: | ||
Linha 23: | Linha 48: | ||
Prolog | 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: | Recursos utilizados: | ||
Linha 33: | Linha 58: | ||
Nota: | 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 | 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: | Recursos utilizados: | ||
Linha 47: | Linha 72: | ||
Martins, F. M. J., Java 6 e Programação Orientada Pelos Objectos, FCA, 2009 | 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. | ||
+ | === 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. | ||
[[Category:Informática]] | [[Category:Informática]] |
Revisão das 22h26min de 18 de julho de 2014
Índice
Planos da Unidade Curricular (PUC):
Enunciados e Resoluções de e-Fólios, p-Fólios e Exames de anos anteriores:
Ano Letivo 2013/2014:
Ano Letivo 2012/2013:
Ano Letivo 2011/2012:
Corpo Docente:
- Nos anos letivos 2012/2013 e 2013/2014: Prof. Jorge Morais
Links úteis:
Materiais de Apoio
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.
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.