Diferenças entre edições de "Linguagens de Programação"
(→Ano Letivo 2020/2021) |
(→Ano Letivo 2023/2024) |
||
(Há 63 revisões intermédias de 10 utilizadores que não estão a ser apresentadas) | |||
Linha 6: | Linha 6: | ||
== Planos da Unidade Curricular (PUC): == | == Planos da Unidade Curricular (PUC): == | ||
+ | |||
+ | *[https://wiki.dcet.uab.pt/files/images/6/61/21077-LP_PUC_2023_2024.pdf PUC Linguagens de Programação 2023-2024] | ||
+ | *[https://wiki.dcet.uab.pt/files/images/b/be/PUC_LP_2021_2022.pdf PUC Linguagens de Programação 2021-2022] | ||
*[https://wiki.dcet.uab.pt/files/images/e/e7/PUC_LP_2020-21.pdf PUC Linguagens de Programação 2020-2021] | *[https://wiki.dcet.uab.pt/files/images/e/e7/PUC_LP_2020-21.pdf PUC Linguagens de Programação 2020-2021] | ||
*[https://wiki.dcet.uab.pt/files/images/0/07/Plano_da_Unidade_Curricular_LP_2020.pdf PUC Linguagens de Programação 2019-2020] | *[https://wiki.dcet.uab.pt/files/images/0/07/Plano_da_Unidade_Curricular_LP_2020.pdf PUC Linguagens de Programação 2019-2020] | ||
Linha 14: | Linha 17: | ||
== 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 2020/2021 | + | === Ano Letivo 2023/2024 === |
− | * [https://wiki.dcet.uab.pt/files/images/4/43/1efolio-21077_OCaml_2021.pdf E-fólio A] - Possíveis Resoluções: [https://github.com/PauloJMNicolau/efolioA_LP 1(3.82v)] | + | *[https://wiki.dcet.uab.pt/files/images/6/6a/EfolioA-21077_OCaml_Java_2024.zip E-fólio A] |
− | * [https://wiki.dcet.uab.pt/files/images/5/51/2efolio-21077_Prolog_2021.pdf E-fólio B] - Possiveis Resoluções: [https://github.com/PauloJMNicolau/efolioB_LP 1(-)] | + | *[https://wiki.dcet.uab.pt/files/images/4/4f/2efolio-21077_Prolog_Java_2024.pdf E-fólio B] |
+ | *[https://wiki.dcet.uab.pt/files/images/9/92/21077-efolio_global-normal_2324.pdf E-fólio Global] | ||
+ | |||
+ | === Ano Letivo 2022/2023 === | ||
+ | *[https://wiki.dcet.uab.pt/files/images/6/63/1efolio-21077-2023.pdf E-fólio A] | ||
+ | *[https://wiki.dcet.uab.pt/files/images/b/b4/LinguagensProgramacaoEfolioB2022_2023.pdf E-fólio B] | ||
+ | *[https://wiki.dcet.uab.pt/files/images/4/4e/Efolio_global_2022_2023.pdf E-fólio Global] | ||
+ | *[https://wiki.dcet.uab.pt/files/images/4/4a/Global_recurso.pdf E-fólio Global Recurso] - [https://wiki.dcet.uab.pt/files/images/f/f7/2100622efolioGlobalLPRecurso.pdf Proposta de Resolução (12V)] | ||
+ | |||
+ | === Ano Letivo 2021/2022 === | ||
+ | * [https://wiki.dcet.uab.pt/files/images/6/6f/1efolio-21077_OCaml_2022.pdf E-fólio A] | ||
+ | |||
+ | * [https://wiki.dcet.uab.pt/files/images/b/b9/2efolio-21077_Prolog_2022.pdf E-fólio B] | ||
+ | * [https://wiki.dcet.uab.pt/files/images/2/25/Enunciado_efolio_global-enunciado_21077.pdf E-fólioGlobal] - Possível Resolução: [https://wiki.dcet.uab.pt/files/images/6/63/1802876efolioGlobal_resolu%C3%A7%C3%A3o.pdf (11V aproximadadamente)] | ||
+ | * [https://wiki.dcet.uab.pt/files/images/7/77/Enunciado_Exame2022.pdf Exame] | ||
+ | * [https://wiki.dcet.uab.pt/files/images/c/c9/21077-LP-ExameRecurso-2021-22.pdf Exame de Recurso] | ||
+ | |||
+ | === Ano Letivo 2020/2021 === | ||
+ | * [https://wiki.dcet.uab.pt/files/images/4/43/1efolio-21077_OCaml_2021.pdf E-fólio A] - Possíveis Resoluções: [https://github.com/PauloJMNicolau/efolioA_LP 1(3.82v)] - [https://github.com/RenatoMBDuarte/21077_LP_EfolioA 2(4v)] | ||
+ | * [https://wiki.dcet.uab.pt/files/images/5/51/2efolio-21077_Prolog_2021.pdf E-fólio B] - Possiveis Resoluções: [https://github.com/PauloJMNicolau/efolioB_LP 1(4v)] - [https://github.com/RenatoMBDuarte/21077_LP_EfolioB 2(4v)] | ||
+ | * [https://wiki.dcet.uab.pt/files/images/2/28/Enunciado_efolio_global-enunciado_21077_20210609.pdf E-fólio Global] - [https://wiki.dcet.uab.pt/files/images/f/f7/21077_Global_2021.pdf Proposta de Resolução (12V)] | ||
+ | * [https://wiki.dcet.uab.pt/files/images/d/d3/Enunciado_exame-enunciado_21077_20210609.pdf Exame] | ||
+ | * [https://wiki.dcet.uab.pt/files/images/4/40/Enunciado_exame-enunciado_21077_20210927.pdf Exame de Recurso] | ||
+ | * [https://wiki.dcet.uab.pt/files/images/f/f8/2020-2021_z_efolios_LP2021_criteriosEGlobal.pdf Critérios Correcção Efolio/Exame] | ||
=== Ano Letivo 2019/2020: === | === Ano Letivo 2019/2020: === | ||
*[https://wiki.dcet.uab.pt/files/images/7/74/1efolioA-21077_OCaml_2020.pdf E-fólio A] | *[https://wiki.dcet.uab.pt/files/images/7/74/1efolioA-21077_OCaml_2020.pdf E-fólio A] | ||
*[https://wiki.dcet.uab.pt/files/images/1/14/2efolioB-21077_Prolog_2020.pdf E-fólio B] | *[https://wiki.dcet.uab.pt/files/images/1/14/2efolioB-21077_Prolog_2020.pdf E-fólio B] | ||
− | *[https://wiki.dcet.uab.pt/files/images/4/46/Efolio_global-enunciado_21077.pdf E-fólio Global] | + | *[https://wiki.dcet.uab.pt/files/images/4/46/Efolio_global-enunciado_21077.pdf E-fólio Global] ->[https://wiki.dcet.uab.pt/files/images/1/1f/ResolucaoEGLOBAL_2019_LP.pdf Resolução do professor] |
*[https://wiki.dcet.uab.pt/files/images/e/ef/Exame_Recurso_LP_1920.pdf Exame Recurso] | *[https://wiki.dcet.uab.pt/files/images/e/ef/Exame_Recurso_LP_1920.pdf Exame Recurso] | ||
Linha 73: | Linha 99: | ||
== Corpo Docente: == | == Corpo Docente: == | ||
− | * Nos anos letivos de 2018/2019 a | + | * Nos anos letivos de 2018/2019 a 2023/2024: [https://portal.uab.pt/dcet/docentes/#content Prof. Ricardo Baptista] [https://www.inesctec.pt/pt/pessoas/ricardo-jose-baptista#short_bio [1]] |
+ | * No ano letivo de 2017/2018: [https://www2.uab.pt/departamentos/DCT/detaildocente.php?doc=152 Prof. Bruno Sousa] | ||
* Nos anos letivos de 2012/2013 a 2016/2017: [https://www2.uab.pt/departamentos/DCT/detaildocente.php?doc=34 Prof. Jorge Morais] | * Nos anos letivos de 2012/2013 a 2016/2017: [https://www2.uab.pt/departamentos/DCT/detaildocente.php?doc=34 Prof. Jorge Morais] | ||
Linha 89: | Linha 116: | ||
'''OCaml''' | '''OCaml''' | ||
− | + | Oficial OCaml Tutorials [https://ocaml.org/learn/tutorials/ OCaml.org] | |
Introdução OCaml - UBI [http://www.di.ubi.pt/~desousa/OCaml/aula_ocaml1-pp.pdf PDF] | Introdução OCaml - UBI [http://www.di.ubi.pt/~desousa/OCaml/aula_ocaml1-pp.pdf PDF] | ||
Linha 106: | Linha 133: | ||
== Materiais de Apoio== | == Materiais de Apoio== | ||
− | |||
− | |||
− | + | Aborda-se três diferentes paradigmas de programação: | |
− | |||
− | |||
− | |||
Programação Funcional; | Programação Funcional; | ||
Linha 122: | Linha 144: | ||
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! | 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 |
+ | |||
+ | The OCaml top level | ||
+ | REPL -> https://ocaml.org/learn/tutorials/up_and_running.html | ||
+ | UTOP -> https://opam.ocaml.org/blog/about-utop/ | ||
+ | |||
+ | Compilador (opcional dado que é suficiente trabalhar apenas em top level) | ||
+ | https://ocaml.org/learn/tutorials/a_first_hour_with_ocaml.html#Compiling-OCaml-programs | ||
− | |||
− | |||
Bibliografia | Bibliografia | ||
− | + | Jason Hickey, "Introduction to the Objective Caml Programming Language", 2004 | |
[http://wiki.dcet.uab.pt/files/images/3/32/Exercicios_resolvidos_OCaml.pdf ExerciciosResolvidosOCaml] | [http://wiki.dcet.uab.pt/files/images/3/32/Exercicios_resolvidos_OCaml.pdf ExerciciosResolvidosOCaml] | ||
Linha 140: | Linha 167: | ||
http://www.swi-prolog.org/ | http://www.swi-prolog.org/ | ||
Bibliografia | Bibliografia | ||
− | Sterling | + | Leon Sterling and Ehud Shapiro, The Art of Prolog (2nd Edition), MIT Press, 1994 |
Nota: | Nota: | ||
Linha 152: | Linha 179: | ||
IDE | IDE | ||
− | + | Netbeans (12.4) | |
Bibliografia | Bibliografia | ||
− | + | F. Mário Martins, Java 8 - POO + Construções Funcionais, FCA | |
− | |||
− | |||
− | |||
− | |||
− |
Edição atual desde as 19h54min de 11 de junho de 2024
Índice
- 1 Guia Informativo Oficial
- 2 Planos da Unidade Curricular (PUC):
- 3 Enunciados e Resoluções de e-Fólios, p-Fólios e Exames de anos anteriores
- 3.1 Ano Letivo 2023/2024
- 3.2 Ano Letivo 2022/2023
- 3.3 Ano Letivo 2021/2022
- 3.4 Ano Letivo 2020/2021
- 3.5 Ano Letivo 2019/2020:
- 3.6 Ano Letivo 2018/2019:
- 3.7 Ano Letivo 2017/2018:
- 3.8 Ano Letivo 2016/2017:
- 3.9 Ano Letivo 2015/2016:
- 3.10 Ano Letivo 2014/2015:
- 3.11 Ano Letivo 2013/2014:
- 3.12 Ano Letivo 2012/2013:
- 4 Corpo Docente:
- 5 Links úteis:
- 6 Materiais de Apoio
Guia Informativo Oficial
Planos da Unidade Curricular (PUC):
- PUC Linguagens de Programação 2023-2024
- PUC Linguagens de Programação 2021-2022
- PUC Linguagens de Programação 2020-2021
- PUC Linguagens de Programação 2019-2020
- PUC Linguagens de Programação 2018-2019
- PUC Linguagens de Programação 2016-2017
- PUC Linguagens de Programação 2015-2016
- PUC Linguagens de Programação 2014-2015
Enunciados e Resoluções de e-Fólios, p-Fólios e Exames de anos anteriores
Ano Letivo 2023/2024
Ano Letivo 2022/2023
Ano Letivo 2021/2022
- E-fólio B
- E-fólioGlobal - Possível Resolução: (11V aproximadadamente)
- Exame
- Exame de Recurso
Ano Letivo 2020/2021
- E-fólio A - Possíveis Resoluções: 1(3.82v) - 2(4v)
- E-fólio B - Possiveis Resoluções: 1(4v) - 2(4v)
- E-fólio Global - Proposta de Resolução (12V)
- Exame
- Exame de Recurso
- Critérios Correcção Efolio/Exame
Ano Letivo 2019/2020:
Ano Letivo 2018/2019:
Ano Letivo 2017/2018:
- Efólio A - Instruções de resolução (Código)
- Efólio B
- P-Fólio Normal - Critérios - Código Resolução Pfólio
Ano Letivo 2016/2017:
Ano Letivo 2015/2016:
- E-fólio A
- E-fólio B
- P-fólio Época Normal
- P-fólio Época Recurso
- Exame Época Normal
- Exame Época Recurso
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 2018/2019 a 2023/2024: Prof. Ricardo Baptista [1]
- No ano letivo de 2017/2018: Prof. Bruno Sousa
- 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
Oficial OCaml Tutorials OCaml.org
Introdução OCaml - UBI PDF
Apontamentos feitos por Cátia Santos @ 2020 Resumo de OCAML
PROLOG
Video introdutório sobre Prolog Prolog Tutorial (5 estrelas)
Site livro online Learn Prolog Now
Lista de manuais em Prolog [1]
Apontamentos feitos por Cátia Santos @ 2020 Resumo de PROLOG
Materiais de Apoio
Aborda-se 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
The OCaml top level
REPL -> https://ocaml.org/learn/tutorials/up_and_running.html UTOP -> https://opam.ocaml.org/blog/about-utop/
Compilador (opcional dado que é suficiente trabalhar apenas em top level)
https://ocaml.org/learn/tutorials/a_first_hour_with_ocaml.html#Compiling-OCaml-programs
Bibliografia
Jason Hickey, "Introduction to the Objective Caml Programming Language", 2004
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
Leon Sterling and Ehud Shapiro, The Art of Prolog (2nd Edition), 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
Netbeans (12.4)
Bibliografia
F. Mário Martins, Java 8 - POO + Construções Funcionais, FCA