
Linguagens e Ambientes de Programação
Código
8147
Unidade Orgânica
Faculdade de Ciências e Tecnologia
Departamento
Departamento de Informática
Créditos
6.0
Professor responsável
Artur Miguel de Andrade Vieira Dias, Luís Manuel Marques da Costa Caires
Horas semanais
5
Total de horas
73
Língua de ensino
Português
Objectivos
- Compreender a funcionalidade e a arquitectura dos ambientes de suporte à programação e à execução de programas.
- Compreender o mecanismo de execução e avaliar o custo computacional, associados às construções das linguagens de programação modernas.
- Perceber as características e os cenários de utilização de um conjunto reduzido mas representativo de linguagens de programação (C, C++, Java, Caml), incluindo linguagens de scripting (JavaScript).
- Aprender rapidamente a utilizar, no futuro, e de forma apropriada, linguagens de programação desconhecidas.
- Possuir uma visão global dos aspectos envolvidos desde a especificação até à execução de programas expressos nas linguagens de programação modernas.
- Resolver de forma adequada problemas pequenos mas característicos usando as linguagens de programação abordadas.
- Identificar as abstracções comuns e as diferenças de fundo entre a forma como estas são suportadas em diferentes linguagens de programação.
- Construir uma aplicação simples onde seja usada mais do que uma linguagem de programação, através de um mecanismo de interoperatibilidade.
- Exprimir ou aproximar os mecanismos disponíveis numa dada linguagem de programação numa outra linguagem que os não possua como primitivos.
- Usar correctamente um ambiente moderno de execução de programas, e as ferramentas de apoio ao desenvolvimento.
- Seleccionar o paradigma de programação mais adequado para abordar cada problema.
- Gerir o tempo.
- Trabalhar em equipa, discutindo soluções e conceitos.
- Desenvolver capacidades de pensamento analítico, comparativo e crítico.
Conteúdo
- Princípios
- Interpretação.
- Máquinas Virtuais; Compilação; Ligação; Carregamento.
- Níveis de Interpretação.
- Linguagens Procedimentais e Funcionais
- Papel dos tipos nas Linguagens de Programação.
- Verificação e Inferência de Tipos.
- Polimorfismo; Sobrecarga; Generalidade.
- Estruturação em blocos: Visibilidade; Ligação; Âmbito; Tempo de vida; semânticas de cópia e de referência.
- Procedimentos e Funções: nomes locais e globais; parametrização; modos de passagem de argumentos; valores funcionais.
- Gestão de Memória: Alocação estática; Alocação Dinâmica; Recolha de lixo.
- Controle Estruturado; Excepções; Continuações.
- A linguagem C e a linguagem ML: flexibilidade e manipulação a nível sistema versus robustez e abstracção.
- Linguagens baseadas em Objectos
- Ligação dinâmica; Ocultação de informação; Subtipificação; Herança.
- A linguagem C++ e a linguagem Java. OOP e eficiência de execução versus portabilidade e segurança.
- O ambiente Java: Arquitectura da JVM; Carregador; Ligador; Verificador; Mecanismos de segurança.
- Linguagens de Scripting e Domínios Específicos
- Linguagens para domínios específicos: características e objectivos. Estudo de casos: (bash; make; Cduce; ...).
- Linguagens de Scripting: características e objectivos. Estudo de casos (JavaScript, ...).
Bibliografia
- Artur Miguel Dias, "Folhas da cadeira de LAP", 2013.
- John C. Mitchell. Concepts in Programming Languages. Cambridge University Press, 2003.
- Ryan Stansifer. The Study of Programming Languages. Prentice-Hall International, Inc., 1995.
- Diversos tutoriais e mais alguma documentação disponível na NET.
Método de ensino
Nas aulas teóricas são transmitidos, exemplificados e discutidos os conceitos fundamentais da cadeira.
Nas aulas práticas os alunos resolvem pequenos problemas onde aplicam os conceitos estudados na cadeira.
Os trabalhos da cadeira são realizados essencialmente 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%
- P1- Projeto prático 1 - 10%
- P2- Projeto prático 2 - 10%
- P3- Projeto prático 3 - 10%
- ER - Exame de recurso - 70%
Cada um destes elementos de avaliação é cotado até 20 valores.
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 = (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
A nota de frequência é igual à nota da parte prática:
- FREQ = PRAT
Nota final e Aprovação
A nota final calcula-se assim:
- FINAL = 0.30 * FREQ + 0.70 * 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.
Frequências dos anos anteriores
Todas as frequências obtida nos anos anteriores são válidas no ano letivo corrente. Não é possível melhorar a nota de frequência obtida no passado.
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). Isto aplica-se tanto a quem dá informação como a quem recebe informação.