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

Da wiki Wiki Universidade Aberta
(Materiais de Apoio)
(Materiais de Apoio)
Linha 124: Linha 124:
  
 
Compilador
 
Compilador
     https://ocaml.org/learn/tutorials/up_and_running.html
+
     https://ocaml.org/learn/tutorials/up_and_running.html -> Top Level
 +
    https://opam.ocaml.org/blog/about-utop/ -> Top Level altamente recomendado
 
Bibliografia
 
Bibliografia
 
     Jason Hickey, "Introduction to the Objective Caml Programming Language", 2004
 
     Jason Hickey, "Introduction to the Objective Caml Programming Language", 2004

Revisão das 23h29min de 22 de setembro de 2021


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 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:

Compilador

   https://ocaml.org/learn/tutorials/up_and_running.html -> Top Level
   https://opam.ocaml.org/blog/about-utop/ -> Top Level altamente recomendado

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