Versão oficial da ficha de disciplina »
Apresentação
Sigla: PP
Ano: 1º
Semestre: 2º
Créditos: 7,5 ECTS
Horas/Semana: 3h teóricas
Nº de Turmas: 1 teórica
Aulas Teóricas: João Correia Lopes (JCL)
Língua de Ensino
Português
Objectivos
Dotar os alunos de uma visão global dos vários paradigmas de programação com ênfase nos conceitos, implementação e adequação às classes de problemas, levando-os a perceber os compromissos no desenho de linguagens e as vantagens e desvantagens na utilização das linguagens mais usadas em programação.
Ao completar esta disciplina, o aluno deve ser capaz de:
- Distinguir o papel das linguagens de programação de mais alto nível
- Distinguir os vários paradigmas de programação
- Descrever os problemas associados à implementação de linguagens de programação
- Enumerar as inovações associadas à linguagem LISP
- Descrever características e problemas da linguagem imperativa Algol 60: sistema de tipos rico e estruturado, anomalias em "Pass-by-name", goto e gestão de memória, princípio da ortogonalidade (atribuição em variáveis procedure)
- Descrever características e limitações da linguagem imperativa Pascal: Limites de array fazem parte do tipo
- Descrever características e limitações da linguagem imperativa C: arrays vs. apontadores
- Descrever características do ML: garbage collection, funções de ordem elevada, funções parciais, funções curried, padrões, células referência
- Descrever a utilização de tipos em linguagens de programação
- Descrever o algoritmo de inferência de tipos do ML
- Descrever implementações de polimorfismo
- Descrever as necessidades de gestão de memória colocadas pela chamada a funções e passagem de parâmetros nas suas variadas formas
- Descrever os conceitos principais relacionados com o controlo de execução de programas
- Descrever o propósito e a semântica de excepções em ML e em C++
- Descrever o suporte para a modularidade de programas
- Descrever o suporte para a abstracção em programas
- Descrever os conceitos principais do paradigma de Orientação por Objectos
- Descrever as características principais da linguagem de programação Simula.
- Descrever as características principais da linguagem de programação Smalltalk
- Descrever características da linguagem de programação C++: eficiência
- Descrever características da linguagem de programação Java: segurança
- Descrever algumas características da linguagem de programação Prolog
- Enumerar vantagens da programação usando concorrência
Programa
- O papel das linguagens de programação
- Funções, recursão, listas e o LISP
- Compiladores, sintaxe e cálculo-lambda
- A família Algol e o ML
- Sistemas de tipos e inferência de tipos
- Âmbito, funções e gestão de memória
- Abstracção de dados e modularidade
- Conceitos em linguagens orientadas por objectos, o Simula e o Smalltalk
- Objectos e eficiência em tempo de execução em C++
- Portabilidade e segurança em Java
- O paradigma de programação em lógica e o Prolog
- Concorrência e distribuiução
Bibliografia Principal
- John C. Mitchell, Concepts in Programming Languages, Cambridge University Press, 2003, ISBN=0-521-78098-5 [Biblioteca]
Bibliografia Complementar
- Ravi Sethi, Programming Languages: Concepts and Constructs, 2nd Edition, International Edition, Addison-Wesley, 1996, ISBN=0-321-21074-3 [Biblioteca]
- George Springer, Daniel P. Friedman, Scheme and the Art of Programming, MIT Press, 1989, ISBN: 0-262-19288-8 [Biblioteca]
- K. Arnold, J. Gosling, The Java Programming Language, Adisson-Wesley, 3rd Edition, 2000, ISBN=0-201-70433-1 [Biblioteca]
- Leon Sterling, Ehud Shapiro, The Art of Prolog - 2nd Edition: Advanced Programming Techniques, MIT Press, 1994, ISBN=0-262-69163-9 [Biblioteca]
- Simon Thompson, Haskell: The Craft of Functional Programming, 2nd Edition, Addison-Wesley, 1999, ISBN=0-201-34275-8 [Biblioteca]
Métodos de Ensino
Aulas de exposição teórica e discussão de tópicos relevantes e apresentação de trabalhos, do tipo ensaio, a serem realizados por cada estudante.
Software
Modo de Avaliação
Avaliação distribuída com exame final.
Componentes de Avaliação
A avaliação inclui um exame e um trabalho prático, realizado ao longo do semestre, com as componentes indicadas.
Descrição | Tipo | Tempo (horas) | Data de Conclusão |
---|---|---|---|
Aulas da disciplina (estimativa) | Aulas | 39 | — |
T1: Tipos e verificação de tipos | Trabalho | 24 | 2010/03/18 |
T2: Gestão de memória | Trabalho | 24 | 2010/03/25 |
T3: Objectos e eficiência em execução em C++ | Trabalho | 24 | 2010/04/29 |
T4: Portabilidade e segurança em Java | Trabalho | 24 | 2010/05/13 |
T5: Programação em Lógica e Prolog | Trabalho | 24 | 2010/05/20 |
Estudo | 1 | — | |
Total | 160 | — |
Cálculo da Classificação Final
A nota final será calculada usando a fórmula: Nota = 50% Trabalho + 50% Exame, sendo:
Trabalho = T1 + T2 + T3 + T4 + T5
Obtenção de Frequência
A disciplina tem uma componente de avaliação distribuída, em que são avaliadas componentes do trabalho prático, a entregar antes das datas limite. Serão admitidos a exame os alunos que obtenham 50% na avaliação distribuída. A aprovação na disciplina está condicionada à obtenção de 50% no exame.
Provas e Trabalhos Especiais
Não há provas nem trabalhos especiais.
Avaliação Especial (TE, DA, ...)
A avaliação distribuída, realizada durante o semestre de funcionamento da disciplina, é exigida a todos os alunos, independentemente do regime de inscrição.
Melhoria de Classificação Final/Distribuída
A nota de exame pode ser melhorada em época de recurso. O trabalho prático pode ser repetido na edição seguinte da disciplina.