Paradigmas de Programação
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Ciências e Tecnologia da Programação |
Ocorrência: 2022/2023 - 2S
Ciclos de Estudo/Cursos
Sigla |
Nº de Estudantes |
Plano de Estudos |
Anos Curriculares |
Créditos UCN |
Créditos ECTS |
Horas de Contacto |
Horas Totais |
PRODEI |
4 |
Plano de estudos Oficial |
1 |
- |
6 |
28 |
162 |
Língua de trabalho
Português - Suitable for English-speaking students
Objetivos
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.
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.
Resultados de aprendizagem e competências
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
- Descrever algumas características das linguagens de "Scripting" como Perl e Python
- Enumerar vantagens da programação usando concorrência
Modo de trabalho
Presencial
Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)
Os estudantes devem ter conhecimentos de linguagens de programação como Scheme, C, C++ ou Java e Prolog
Programa
1. O papel das linguagens de programação
2. Funções, recursão, listas e o LISP
3. Compiladores, sintaxe e cálculo-lambda
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
Thompson, Simon;
Haskell the craft of functional programming. ISBN: 0- 201-34275-8
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
Sethi, Ravi;
Programming languages. ISBN: 0-321-21074-3
Métodos de ensino e atividades de aprendizagem
Aulas de exposição teórica e discussão de tópicos relevantes.
Software
DrScheme
Yap Prolog
Java SE 8
Palavras Chave
Ciências Físicas > Ciência de computadores > Programação
Ciências Físicas > Ciência de computadores
Ciências Físicas
Tipo de avaliação
Avaliação distribuída sem exame final
Componentes de Avaliação
Designação |
Peso (%) |
Trabalho escrito |
30,00 |
Trabalho laboratorial |
70,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Frequência das aulas |
42,00 |
Trabalho de investigação |
30,00 |
Trabalho laboratorial |
90,00 |
Total: |
162,00 |
Obtenção de frequência
N/A
Fórmula de cálculo da classificação final
A nota final será calculada usando a fórmula:
Nota = 60% qualidade do trabalho + 30% artigo + 10% apresentação e discussão
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 unidade curricular , é exigida a todos os alunos, independentemente do regime de inscrição. Os estudantes que não frequentam regularmente a unidade curricular fazem as entregas dos trabalhos e apresentações nas épocas previstas e devem tomar a iniciativa de acordar, com o docente, reuniões específicas para acompanhamento dos trabalhos práticos.
Melhoria de classificação
O trabalho pode ser repetido na edição seguinte da disciplina.