Diferenças entre edições de "Linguagens de Programação"

Da wiki Wiki Universidade Aberta
(Ano Letivo 2013/2014:)
(Corpo Docente:)
(Há 124 revisões intermédias de 25 utilizadores que não estão a ser apresentadas)
Linha 1: Linha 1:
 
[[Category:Informática]]
 
[[Category:Informática]]
 +
[[Category:Engenharia_Informática]]
  
 
==Guia Informativo Oficial==
 
==Guia Informativo Oficial==
 
*[http://www2.uab.pt/guiainformativo/detailuc.php?uc=121 Guia Informativo de Linguagens de Programação]
 
*[http://www2.uab.pt/guiainformativo/detailuc.php?uc=121 Guia Informativo de Linguagens de Programação]
  
== 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/0/07/Plano_da_Unidade_Curricular_LP_2020.pdf PUC Linguagens de Programação 2019-2020]
 +
*[https://wiki.dcet.uab.pt/files/images/2/25/PUC_LP_1819.pdf PUC Linguagens de Programação 2018-2019]
 +
*[http://wiki.dcet.uab.pt/files/images/f/f4/Plano_da_Unidade_Curricular-2016-2017.pdf PUC Linguagens de Programação 2016-2017]
 +
*[http://wiki.dcet.uab.pt/files/images/9/96/PUC_LP_2015_16.pdf PUC Linguagens de Programação 2015-2016]
 +
*[http://wiki.dcet.uab.pt/files/images/6/62/PUC_LP.pdf PUC Linguagens de Programação 2014-2015]
  
== 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 2023/2024 ===
 +
 
 +
=== 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: ===
 +
*[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/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]
 +
 
 +
=== Ano Letivo 2018/2019: ===
 +
*[https://wiki.dcet.uab.pt/files/images/8/88/1efolio-21077_OCaml.pdf E-fólio A]
 +
*[https://wiki.dcet.uab.pt/files/images/5/53/2efolio-21077_Prolog.pdf E-fólio B]
 +
 
 +
*[https://wiki.dcet.uab.pt/files/images/b/ba/LP_-_Normal_-_2018_2019.pdf P-fólio Normal]
 +
*[https://wiki.dcet.uab.pt/files/images/5/5b/LP_-_Normal_-_2018_2019_Exame.pdf Exame Normal]
 +
*[https://wiki.dcet.uab.pt/files/images/f/fd/LP_-_Recurso_-_2018_2019.pdf P-fólio Recurso]
 +
*[https://wiki.dcet.uab.pt/files/images/a/a1/LP_-_Recurso_-_2018_2019_Exame.pdf Exame Recurso]
 +
 
 +
=== Ano Letivo 2017/2018: ===
 +
*[https://wiki.dcet.uab.pt/files/images/4/4d/1efolio-21077_OCaml_2017_2018.pdf Efólio A] - [https://wiki.dcet.uab.pt/files/images/a/ab/1efolio-21077_OCaml_instrucoes_resolucao.pdf Instruções de resolução] [https://wiki.dcet.uab.pt/files/images/7/7c/EfolioA_instrucoesresolucao.ml.pdf (Código)]
 +
*[https://wiki.dcet.uab.pt/files/images/d/d1/1efolio-21077_Prolog.pdf Efólio B]
 +
*[https://wiki.dcet.uab.pt/files/images/f/fa/1pfolio-21077_1718.pdf P-Fólio Normal] - [https://wiki.dcet.uab.pt/files/images/4/40/Criterios_21077.pdf Critérios] - [https://wiki.dcet.uab.pt/files/images/e/ea/CODIGO_PFOLIO.pdf Código Resolução Pfólio]
 +
 
 +
*[https://wiki.dcet.uab.pt/files/images/9/9f/2pfolio-21077_1718.pdf P-Fólio Recurso] - [https://wiki.dcet.uab.pt/files/images/c/c1/21077-criterios_pfolio_recurso.pdf Critérios]
 +
 
 +
=== Ano Letivo 2016/2017: ===
 +
*[http://wiki.dcet.uab.pt/files/images/9/9c/LP-efolioA-2017.pdf Efólio A]
 +
*[http://wiki.dcet.uab.pt/files/images/0/06/LP-efolioB-2017.pdf Efólio B]
 +
*[https://wiki.dcet.uab.pt/files/images/4/41/1ex-21077-2017_Pf%C3%B3lio.pdf P-Fólio Normal]
 +
*[https://wiki.dcet.uab.pt/files/images/a/a8/1ex-21077-2017.pdf Exame Normal]
 +
 
 +
=== 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/5/58/EFolioBLP-15-16.pdf E-fólio B]
 +
*[http://wiki.dcet.uab.pt/files/images/2/21/1ex-21077_Pf%C3%B3lio-2016.pdf P-fólio Época Normal]
 +
*[http://wiki.dcet.uab.pt/files/images/b/bc/2ex-21077_Pf%C3%B3lio2016.pdf P-fó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/9/9a/2ex-21077-2016.pdf Exame Época Recurso]
 +
 
 +
=== Ano Letivo 2014/2015: ===
 +
* [http://wiki.dcet.uab.pt/files/images/7/7a/P-folio_LP-29-JAN-2015.pdf P-Fólio Época Normal de 29-jan-2015]
  
 
=== Ano Letivo 2013/2014: ===
 
=== Ano Letivo 2013/2014: ===
*[http://wiki.dcet.uab.pt/files/images/d/d6/E-F%C3%B3lio_C_LP_14-15_.pdf E-Fólio C]
+
*[http://wiki.dcet.uab.pt/files/images/1/1f/E-F%C3%B3lio_A_LP_14-15_.pdf e-Fólio A]
*[http://wiki.dcet.uab.pt/files/images/2/2d/E-F%C3%B3lio_B_LP_14-15_.pdf E-Fólio B]
+
*[http://wiki.dcet.uab.pt/files/images/2/2d/E-F%C3%B3lio_B_LP_14-15_.pdf e-Fólio B]
*[http://wiki.dcet.uab.pt/files/images/1/1f/E-F%C3%B3lio_A_LP_14-15_.pdf E-Fólio A]
+
*[http://wiki.dcet.uab.pt/files/images/d/d6/E-F%C3%B3lio_C_LP_14-15_.pdf e-Fólio C]
 +
*[http://wiki.dcet.uab.pt/files/images/c/cc/Merged_document.pdf p-Fólio Recurso 23-jul-2014]
  
 
=== Ano Letivo 2012/2013: ===
 
=== Ano Letivo 2012/2013: ===
==== e-Fólios ====
 
 
* [http://wiki.dcet.uab.pt/files/images/0/06/LPefolioA.pdf e-fólio A]
 
* [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]
 +
* [http://wiki.dcet.uab.pt/files/images/7/71/1ex-21077_Pf%C3%B3lio.pdf p-fólio Época Normal de 18-fev-2013]
 +
* [http://wiki.dcet.uab.pt/files/images/4/4f/1ex-21077.pdf Exame Época Normal de 18-fev-2013]
 +
* [http://wiki.dcet.uab.pt/files/images/3/3b/2ex-21077_Pf%C3%B3lio.pdf p-fólio Época de Recurso de 24-jul-2013]
 +
* [http://wiki.dcet.uab.pt/files/images/e/e4/2ex-21077.pdf Exame Época de Recurso de 24-jul-2013]
  
* [http://wiki.dcet.uab.pt/files/images/5/5f/LPefolioB.pdf e-fólio B]
+
== Corpo Docente: ==
 +
* 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]
 +
 
 +
== Links úteis: ==
 +
 
 +
'''Java'''
 +
 
 +
The Java™ Tutorials [https://docs.oracle.com/javase/tutorial/ Tutorial da Oracle]
 +
 
 +
Livro online  [http://math.hws.edu/javanotes/ Introduction to Programming using Java 7ed] Livro muito bem escrito e de fácil leitura.
 +
 
 +
Livro [http://introcs.cs.princeton.edu/java/home/ Introduction to programming in Java]
 +
 
 +
 
 +
'''OCaml'''
 +
 
 +
Oficial OCaml Tutorials [https://ocaml.org/learn/tutorials/ OCaml.org]
  
* [http://wiki.dcet.uab.pt/files/images/2/2d/LPefolioC.pdf e-fólio C]
+
Introdução OCaml - UBI [http://www.di.ubi.pt/~desousa/OCaml/aula_ocaml1-pp.pdf PDF]
  
 +
Apontamentos feitos por Cátia Santos @ 2020 [https://wiki.dcet.uab.pt/files/images/e/ee/LP_-_Resumo_OCAML.pdf Resumo de OCAML]
  
==== p-Fólios e Exames ====
+
'''PROLOG'''
* [http://wiki.dcet.uab.pt/files/images/4/44/Exame-Epoca-Normal-UC-21077-LP-Linguagens-Programacao-20130218.pdf Exame Época Normal de 18-fev-2013]
 
* [http://wiki.dcet.uab.pt/files/images/5/51/Exame-Epoca-Recurso-UC-21077-LP-Linguagens-Programacao-20130725.pdf Exame Época de Recurso de 25-jul-2013]
 
  
=== Ano Letivo 2011/2012: ===
+
Video introdutório sobre Prolog [https://www.youtube.com/watch?v=SykxWpFwMGs Prolog Tutorial] (5 estrelas)
  
== Corpo Docente: ==
+
Site livro online [http://www.learnprolognow.org/lpnpage.php?pageid=top Learn Prolog Now]
  
* Nos anos letivos 2012/2013 e 2013/2014: [https://www2.uab.pt/departamentos/DCT/detaildocente.php?doc=34 Prof. Jorge Morais]
+
Lista de manuais em Prolog [https://github.com/jcoder58/PrologTutorials]
  
== Links úteis: ==
+
Apontamentos feitos por Cátia Santos @ 2020 [https://wiki.dcet.uab.pt/files/images/1/19/LP_-_Resumo_de_Prolog.pdf Resumo de PROLOG]
  
 
== Materiais de Apoio==
 
== Materiais de Apoio==
=== 2009/2010 ===
 
  
Foram abordados três diferentes paradigmas de programação:
+
Aborda-se três diferentes paradigmas de programação:
  
 
     Programação Funcional;
 
     Programação Funcional;
Linha 48: Linha 141:
 
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
  
Compilador
 
    http://caml.inria.fr/resources/index.en.html
 
 
Bibliografia
 
Bibliografia
     Chailloux, E.; Manoury, P.; Pagano, B., Developing Applications With Objective Caml, INRIA 1995-2005
+
     Jason Hickey, "Introduction to the Objective Caml Programming Language", 2004
  
[[ExerciciosResolvidosOCaml]]
+
[http://wiki.dcet.uab.pt/files/images/3/32/Exercicios_resolvidos_OCaml.pdf ExerciciosResolvidosOCaml]
  
 
Prolog
 
Prolog
Linha 66: Linha 164:
 
     http://www.swi-prolog.org/
 
     http://www.swi-prolog.org/
 
Bibliografia
 
Bibliografia
     Sterling, L.; Shapiro, E., The Art of Prolog, MIT Press, 1994
+
     Leon Sterling and Ehud Shapiro, The Art of Prolog (2nd Edition), MIT Press, 1994
  
 
Nota:
 
Nota:
Linha 78: Linha 176:
  
 
IDE
 
IDE
     Eclipse
+
     Netbeans (12.4)
 
Bibliografia
 
Bibliografia
     David J. Eck, Introduction to Programming Using Java, 2006
+
     F. Mário Martins, Java 8 - POO + Construções Funcionais, FCA
    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.
 

Revisão das 16h00min de 4 de março de 2024


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 2023/2024

Ano Letivo 2022/2023

Ano Letivo 2021/2022

Ano Letivo 2020/2021

Ano Letivo 2019/2020:

Ano Letivo 2018/2019:

Ano Letivo 2017/2018:

Ano Letivo 2016/2017:

Ano Letivo 2015/2016:

Ano Letivo 2014/2015:

Ano Letivo 2013/2014:

Ano Letivo 2012/2013:

Corpo Docente:

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

ExerciciosResolvidosOCaml

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