Paradigmas da Programação
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Programação |
Ocorrência: 2011/2012 - 2S
Ciclos de Estudo/Cursos
Língua de trabalho
Português - Suitable for English-speaking students
Objetivos
1- ENQUADRAMENTO
Nos anos anteriores do curso, os estudantes aprenderam diversas linguagens de programação. Não lhes foi, no entanto, lecionada uma perspectiva global e sistemática das Linguagens de Programação.
2- OBJETIVOS ESPECÍFICOS
Dotar os estudantes 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.
3- CONHECIMENTO PRÉVIO
Os estudantes devem ter conhecimentos de linguagens de programação como Scheme, C, C++ ou Java e Prolog.
4- DISTRIBUIÇÃO PERCENTUAL
Componente Científica: 60%
Componente Tecnológica 40%
5- RESULTADOS DA APRENDIZAGEM
Ao completar esta disciplina, o aluno deve ser capaz de:
1. Distinguir o papel das linguagens de programação de mais alto nível
2. Distinguir os vários paradigmas de programação
3. Descrever os problemas associados à implementação de linguagens de programação
4. Enumerar as inovações associadas à linguagem LISP
5. 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)
6. Descrever características e limitações da linguagem imperativa Pascal: Limites de array fazem parte do tipo
7. Descrever características e limitações da linguagem imperativa C: arrays vs. apontadores
8. 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
9. Descrever a utilização de tipos em linguagens de programação
10. Descrever o algoritmo de inferência de tipos do ML
11. Descrever implementações de polimorfismo
12. Descrever as necessidades de gestão de memória colocadas pela chamada a funções e passagem de parâmetros nas suas variadas formas
13. Descrever os conceitos principais relacionados com o controlo de execução de programas
14. Descrever o propósito e a semântica de excepções em ML e em C++
15. Descrever o suporte para a modularidade de programas
16. Descrever o suporte para a abstracção em programas
17. Descrever os conceitos principais do paradigma de Orientação por Objectos
18. Descrever as características principais da linguagem de programação Simula.
19. Descrever as características principais da linguagem de programação Smalltalk
20. Descrever as características da linguagem de programação C++
21. Descrever as características da linguagem de programação Java
22. Descrever algumas características da linguagem de programação Prolog
23. Descrever algumas características das linguagens de "Scripting" como Perl e Python
24. Enumerar vantagens da programação usando concorrência
Programa
1. O papel das linguagens de programação.
2. Funções, recursão, listas e o LISP.
3. Compiladores e sintaxe, cálculo-lambda e semântica denotacional.
4. A família Algol e o ML.
5. Sistemas de tipos e inferência de tipos.
6. Âmbito, funções e gestão de memória.
7. Abstracção de dados e modularidade.
8. Conceitos em linguagens orientadas por objectos, o Simula e o Smalltalk.
9. Objectos e eficiência em tempo de execução em C++.
10. Portabilidade e segurança em Java.
11. O paradigma de programação em lógica e o Prolog.
12. Concorrência
13. Linguagens de "scripting"
Bibliografia Obrigatória
Mitchell, John C.;
Concepts in programming languages. ISBN: 0-521-78098-5
Bibliografia Complementar
Sethi, Ravi;
Programming languages. ISBN: 0-321-21074-3
Arnold, Ken;
The Java programming language. ISBN: 0-201-70433-1
Sterling, Leon;
The Art of Prolog. ISBN: 0-262-69163-9
Springer, George;
Scheme and the art of programming. ISBN: 0-07-060522-X
Thompson, Simon;
Haskell the craft of functional programming. ISBN: 0- 201-34275-8
Métodos de ensino e atividades de aprendizagem
Aulas de exposição teórica e discussão de tópicos relevantes e trabalho prático, em computador.
Software
Yap Prolog
Java SE 6
DrScheme
Palavras Chave
Ciências Físicas > Ciência de computadores > Programação
Tipo de avaliação
Avaliação distribuída sem exame final
Componentes de Avaliação
Descrição |
Tipo |
Tempo (Horas) |
Peso (%) |
Data Conclusão |
Participação presencial (estimativa) |
Participação presencial |
36,00 |
|
|
Realização de um trabalho prático |
Trabalho laboratorial |
70,00 |
|
2012-05-18 |
Apresentações do artigo e do trabalho |
Participação presencial |
1,00 |
|
|
|
Total: |
- |
0,00 |
|
Componentes de Ocupação
Descrição |
Tipo |
Tempo (Horas) |
Data Conclusão |
Estudo do conteúdo teórico |
Estudo autónomo |
36 |
|
Estudo de um artigo científico |
Estudo autónomo |
20 |
|
|
Total: |
56,00 |
|
Obtenção de frequência
A disciplina tem uma componente de avaliação distribuída, em que são avaliadas componentes do trabalho pratico (TP), a entregar antes das datas limite e a apresentação e discussão (AD) de um artigo influente na história da programação.
Para obter frequência o estudante deverá obter uma classificação igual ou superior a 40% na nota final (TP+AD).
Fórmula de cálculo da classificação final
A nota final será calculada usando a fórmula:
Nota = 70% Trabalho + 30% Apresentação e Discussão de um artigo, sendo:
Trabalho = 60% Qualidade do trabalho + 20% Relatório + 20% Apresentação e discussão oral do trabalho.
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
O trabalho prático pode ser repetido na edição seguinte da disciplina.