Versão oficial da ficha de disciplina »
Apresentação
Sigla: PPRO (PP)
Ano: 4º (1º)
Semestre: 2º
Créditos: 6 (7,5) ECTS
Horas/Semana: 3h teóricas
Nº de Turmas: 1 teóricas
Aulas Teóricas: João Correia Lopes (JCL)
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, nomeadamente: garbage collection, funções de ordem elevada, funções parciais, funções curried, padrões, células referência, características imperativas
- 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 as características da linguagem de programação C++
- Descrever as características da linguagem de programação Java
- Descrever algumas características da linguagem de programação Prolog
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
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 trabalho prático, em computador, fora das aulas.
Software
- Java SE 6 — Java para Unix, Macintosh ou Windows
- DrScheme — Scheme for para Unix, Macintosh ou Windows
- Yap Prolog — Prolog Linux, Solaris ou Windows
- Hugs — Haskell para Unix, Macintosh ou Windows
Modo de Avaliação
Avaliação distribuída com exame final.
Componentes de Avaliação
A avaliação inclui um exame e um trabalho pratico, realizado ao longo do semestre, com as componentes indicadas.
Descrição | Tipo | Tempo (horas) | Data de Conclusão |
---|---|---|---|
Aulas da disciplina (estimativa) | Aulas | 39 | — |
Requisitos do Utilizador (E1) | Trabalho | 27 | 19/03/2009 |
Interface com o Utilizador (E2) | Trabalho | 36 | 23/04/2009 |
Aplicação Multi-paradigma (E3) | Trabalho | 45 | 4/06/2009 |
Produto (P) | Trabalho | 0 | 4/06/2009 |
Apresentação e Discussão (A&D) | Trabalho | 3 | 4/06/2009 |
Estudo | 10 | — | |
Total | 160 | — |
Cálculo da Classificação Final
A nota final será calculada usando a fórmula: Nota = 50% Trabalho + 50% Exame, sendo:
Trabalho = 10% E1 + 10% E2 + 20% E3 + 50% P + 10% A&D.
Obtenção de Frequência
A disciplina tem uma componente de avaliação distribuída, em que são avaliadas componentes do trabalho pratico, 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 40% 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.