Linguagens e Ambientes de Programação

Objetivos

Saber:
 1 - Perceber as características e os cenários de utilização de um conjunto de linguagens de programação modernas: Caml, C, JavaScript, Java.
 2 - Compreender a funcionalidade e a arquitectura dos ambientes de suporte à programação e execução de programas.
 3 - Possuir uma visão global dos aspectos envolvidos desde a especificação até à execução de programas.

Fazer:
 4 - Resolver problemas pequenos, mas característicos, usando bem as linguagens de programação abordadas, dentro dum ambiente de desenvolvimento moderno.
 5 - Identificar as abstracções comuns e as diferenças de fundo entre diferentes linguagens de programação.
 6 - Exprimir ou aproximar os mecanismos disponíveis numa dada linguagem de programação numa outra que não os possua como primitivos.

Caracterização geral

Código

8147

Créditos

6.0

Professor responsável

João Ricardo Viegas da Costa Seco

Horas

Semanais - 5

Totais - 73

Idioma de ensino

Português

Pré-requisitos

Os alunos deverão ter realizado as unidades curriculares de Introdução à Programação e de Programação Orientada pelos Objectos.

Bibliografia

  • "OCaml programming: Correct + Efficient + Beautiful" de Michael R. Clarkson et al.

Método de ensino

Nas aulas teóricas, os conceitos fundamentais da cadeira são transmitidos, exemplificados e discutidos. Cerca de metade dos conceitos são convenientemente introduzidos no momento do estudo de linguagens concretas (e.g. inferência de tipos em OCaml, programação baseada em protótipos). A outra metade dos conceitos é discutida de forma independente, recorrendo às linguagens anteriormente estudadas para efeitos de ilustração (e.g. ligações, sistemas de tipos, polimorfismo de acordo com a nomenclatura de Cardelli).


Nas aulas práticas, os alunos resolvem pequenos problemas onde aplicam os conceitos e técnicas estudados. Alguns desses problemas têm caráter teórico, mas a maioria são problemas de programação.

Os projetos da cadeira são realizados principalmente fora das aulas.

Método de avaliação

Componentes da Avaliação

A avaliação é constituída por duas componentes: a componente laboratorial e a componente teórico-prática.

Componente Laboratorial e Frequência

A componente laboratorial é composta por três trabalhos. Cada trabalho consiste no desenho, na implementação e validação de programas funcionais para resolver um conjunto de problemas dados, consiste ainda na elaboração de um relatório e na realização de uma discussão. As duas primeiras partes do trabalho (programas e relatórios) são realizadas em grupo de dois alunos; a discussão é individual.

Um grupo entrega um trabalho se o seu programa for aceite pelo sistema de avaliação automática adotado e o respetivo relatório for entregue dentro do prazo da forma prescrita no respectivo enunciado. As notas dos trabalhos aceites variam entre 10 e 20 valores. O sistema de avaliação automática será indicado no enunciado de cada trabalho.

As discussões (para aferir o conhecimento que cada aluno tem sobre os trabalhos que entregou) são obrigatórias, presenciais e individuais. A discussão de um trabalho consiste em fazer alterações ao código do trabalho entregue para que o novo programa resolva uma variante do problema original, definida no enunciado da discussão, que difere pouco do problema resolvido no trabalho. As notas das discussões e os respetivos critérios são os seguintes:

20: a alteração está globalmente certa;

16: a alteração está confusa ou muito incompleta, mas o caminho poderia ser aquele;

12: a alteração não está certa, havendo "algumas coisas bem e outras muito mal";

4: "não foi feita qualquer alteração" ou "as alterações feitas são ínfimas" ou "as alterações feitas não fazem sentido".

Regra geral, a nota de um aluno num trabalho é o mínimo entre a nota do trabalho que entregou (realizado em grupo) e a sua nota na discussão desse trabalho (que é zero, se o aluno faltou). A nota de um aluno num trabalho pode ser inferior à obtida pela regra anterior, caso o desempenho do seu colega de grupo na discussão de todos os trabalhos seja muito mau (avaliado com 4). Consequentemente, as notas dos dois elementos do grupo podem ser diferentes (e variam entre 0 e a nota do trabalho).

A nota da componente laboratorial (CompL) é a média das notas do aluno nos três trabalhos (P1, P2 e P3) com pesos 0.25, 0.25 e 0.5, respetivamente.

A fórmula é a seguinte:

CompL = 0.25 x P1 + 0.25 x P2 + 0.5 x P3.

Para obter frequência, é necessário que CompL >= 9.5 .

A discussão do primeiro trabalho é feita no dia do primeiro teste, e a discussão dos segundo e terceiro trabalho são efetuadas no dia do segundo teste.

Componente Teórico-Prática

A componente teórico-prática é composta por dois testes (no período de aulas) ou por um exame indivisível (na Época de Recurso). As três provas são individuais, presenciais, escritas e sem consulta. Não são permitidos dispositivos eletrónicos (e.g. calculadoras, telemóveis, smartwatches, tablets e portáteis).

Há pré-inscrição nos testes.

A nota da componente teórico-prática (CompTP) é a média das notas dos testes (T1 e T2) ou a nota do exame (Ex):

CompTP = (T1 + T2) / 2 ou CompTP = Ex.

Para obter aprovação, é necessário que CompTP >= 9.5 .

Nota Final

A nota final (F) dos alunos com frequência é:

F = CompTP, se CompTP < 9.5 ;

F = 0.3 CompL + 0.7 CompTP, se CompTP >= 9.5 .

Todas as notas (P1, P2, P3, T1, T2, Ex, CompL e CompTP) são arredondadas às décimas, exceto a nota final (F) que é arredondada às unidades.

Frequência e Classificações Obtidas em Anos Anteriores

De acordo com o regulamento de avaliação em vigor, a frequência dos anos anteriores mantém-se tal como as suas classificações.

Consulta e Ferramentas de IA

A utilização de consulta na Internet e de ferramentas de IA (como, por exemplo, ChatGPT ou Copilot) é permitida nos projetos e exercícios da aula e proíbida nos testes escritos e discussões. O uso de ferramentas de IA têm de ser explicitamente referidas no código e relatório que for entregue. Considera-se que um aluno que use estas ferramentas durante a realização de um exercício de avaliação ou projeto e omita que as usou comete plágio.

Fraude e Plágio

As questões de fraude e plágio serão tratadas de acordo com o Regulamento de Avaliação de Conhecimentos da FCT NOVA.

Os alunos podem conversar com os colegas sobre os trabalhos e discutir soluções, mas não podem partilhar código (mesmo que sejam "poucas linhas") em nenhuma circunstância, oralmente ou por escrito. A escrita de código tem de ser uma tarefa individual ou interna a cada grupo, dependendo do elemento de avaliação a que se destina. Por exemplo, não é permitido mostrar código no ecrã, ditar código, enviar ficheiros com código nem colocá-los em sítios acessíveis a terceiros.

Parte-se do princípio do bom senso e que todos os intervenientes são pessoas razoáveis. Assume-se que quando os alunos trabalham em grupo, o fazem de forma justa e equilibrada, trabalho a trabalho. A contribuição de cada membro do grupo para o trabalho é da responsabilidade do grupo como um todo. Os vários trabalhos ao longo do semestre não têm que ser feitos sempre pelo mesmos grupos de alunos.

Resumidamente, considera-se que:

  • um grupo que dá ou que recebe código comete fraude;
  • um grupo em que só um dos membros trabalha comete fraude;
  • os alunos que realizam o trabalho em grupos maiores, partilhando código, cometem fraude.
  • A utilização de ferramentas de IA (como, por exemplo, ChatGPT ou Copilot) tem de ser explicitamente referida no código. Considera-se que um grupo que use estas ferramentas durante a realização de um trabalho e omita que as usou comete plágio.

Conteúdo

A – Ambientes de programação e execução
Interpretação. Máquinas Virtuais. Níveis de interpretação. Compilação. Ligação. Carregamento. Modelo de execução. Portabilidade. Segurança. Interoperabilidade. Ferramentas.

B - Linguagens procedimentais e funcionais
OCaml e C. Tipos: seu papel; verificação e inferência; polimorfismo; sobrecarga; tipificação estática e dinâmica. Estruturação em blocos: ligações; ambientes; resolução de nomes. Procedimentos e Funções: nomes locais e globais; parametrização; closures.

C - Linguagens baseadas em objectos
JavaScript e Java. Classes e protótipos. Ocultação. Subtipificação. Herança.

D - Linguagens de scripting e domínios específicos
JavaScript e Bash.

E - Técnicas de programação
Paradigmas de programação. Método indutivo em OCaml. Manipulação de apontadores em C. Modelação em JavaScript. Introdução à programação Web do lado do cliente.

F - Introdução à programação web.
Protocolo HTTP, formulários, scripting, AJAX. Modelo de eventos do lado do cliente e do lado do servidor.

G – Escolha duma linguagem
Fatores a considerar. Cenários.

Cursos

Cursos onde a unidade curricular é leccionada: