Linguagens e Ambientes de Programação

Objectivos

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

Artur Miguel de Andrade Vieira Dias, Luís Manuel Marques da Costa Caires

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

  • Artur Miguel Dias, Folhas da cadeira, incluíndo lista de exercícios.
  • Jason Hickey, Anil Madhavapeddy, Yaron Minsky, "Real World OCaml", O''''''''Reilly Media, 2013.
  • Brian Kernighan, Dennis M. Ritchie, "The C Programming Language", 2nd ed., Prentice Hall, 1988.
  • Marijn Haverbeke, "Eloquent JavaScript", 2nd ed., No Starch Press, 2014.
  • John C. Mitchell. Concepts in Programming Languages. Cambridge University Press, 2003.
  • Ryan Stansifer. The Study of Programming Languages. Prentice-Hall International, Inc., 1995.

Método de ensino

Esta cadeira tem um forte caráter aplicado e cerca de 70% da nota dos testes e exames depende da capacidade do aluno usar bem as linguagens estudadas para resolver problemas de programação.

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

Elementos de avaliação

Eis os elementos de avaliação, com indicação dos pesos na nota final:

  • T1 - Teste 1 - 35%
  • T2 - Teste 2 - 35%
  • P1, P2, P3 - Projetos práticos - 30% (10% cada)
  • ER - Exame de recurso - 70%

Todos os elementos elementos de avaliação são cotados até 20 valores.

Os testes e exame são presenciais e não é permitido o uso de instrumentos eletrónicos.

Os testes e exame têm consulta limitada.  Os alunos podem trazer uma (1) folha A4 com apontamentos, escrita ou impressa dos dois lados. No topo superior esquerdo da frente da folha escreve-se o nome abreviado do aluno e o respetivo número.

Nos projetos práticos, não há nota mínima. Os projetos são efetuados por grupos de dois alunos. Poderão haver discussões de alguns projetos para alguns grupos.

Notas das componentes prática e teórica

A nota da componente prática é definida como:

  • PRAT = (P1 + P2 + P3) / 3 

A nota da componente teórica é definida de duas formas diferentes, consoante o momento em que a nota é obtida:

  • TEOR = (T1 + T2) / 2
  • TEOR = ER

Frequência

Para obter frequência é necessário que:

  • PRAT >= 9.5

A frequência é um elemento indispensável para obter aprovação nesta cadeira. No caso de alunos ERASMUS, é possível fazer os projetos à distância.

Aprovação e Nota final

A aprovação na cadeira é determinada pela seguinte condição:

  • Aprovação = PRAT >= 9.5 && TEOR >= 9.5

Em caso de aprovação, a nota final calcula-se assim:

  • FINAL = 0.3 * PRAT + 0.7 * TEOR

As notas intermédias são arredondadas para duas casas decimais.  A nota final é arredondada para um número inteiro.

Validade da frequência obtida neste ano

A frequência obtida no ano letivo corrente será válida no próximo ano letivo, pelo menos.

Frequências dos anos anteriores

Todas as frequências obtidas nos anos anteriores são válidas no ano letivo corrente e as respetivas notas da parte prática transitam automaticamente. Também se permite fazer melhoria da nota da parte prática (realizando todos os projetos práticos), no caso de alunos ainda não aprovados.

Componente teórica do ano anterior

Tendo sido obtida, no ano letivo anterior, nota positiva na componente teórica mas nota negativa na componente prática, o aluno pode solicitar que a nota positiva transite para o ano letivo corrente. Para aproveitar esta possibilidade é preciso fazer um pedido explicito ao docente. O que transita é a nota teórica global e não a nota de testes individuais. Esta possibilidade só se aplica a notas do ano letivo anterior e não a notas de anos letivos mais antigos.

Fraude

Qualquer tipo de fraude em qualquer elemento de avaliação implica a impossibilidade de fazer a cadeira no ano lectivo corrente (mesmo que haja exames marcados).

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: