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
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
Os elementos de avaliação são os seguintes, e têm os pesos na nota final:
- T1 - Teste 1 - 35%
- T2 - Teste 2 - 35%
- PP - Projetos práticos - 30%
- ER - Exame de recurso - 70%
Cada um destes elementos de avaliação é cotado até 20 valores.
O valor de PP é a média aritmética de 3 projetos práticos. Não há nota mínima em qualquer deles. Os projetos são efectuados 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 = PP
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
A nota de frequência é igual à nota da parte prática:
- FREQ = PRAT
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.
Nota final e Aprovação
A nota final calcula-se assim:
- FINAL = 0.3 * FREQ + 0.7 * TEOR
A aprovação na cadeira é determinada pela seguinte condição:
- Aprovação = FREQ >= 9.5 e TEOR >= 9.5
As notas intermédias são arredondadas para duas casas decimais.
A nota final é um número inteiro.
Validade da frequência obtida neste ano
A frequência obtida no ano letivo corrente será valida no próximo ano letivo, pelo menos.
Frequências dos anos anteriores
Todas as frequências obtida nos anos anteriores são válidas no ano letivo corrente e transitam automaticamente. Também se permite-se fazer melhoria da nota de frequência.
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: