Paradigmas da Programação
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Programação |
Ocorrência: 2013/2014 - 2S (de 10-02-2014 a 06-06-2014) ![Requerida a integração com o Moodle Ícone do Moodle](/feup/pt/imagens/MoodleIcon)
Ciclos de Estudo/Cursos
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
- O papel das linguagens de programação.
- Funções, recursão, listas e o LISP.
- Compiladores e sintaxe, cálculo-lambda e semântica denotacional.
- 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
- 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. Aulas de acompanhamento de um trabalho prático, em computador.
Software
Yap Prolog
DrScheme
Java SE 6
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
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 = 70% Projeto + 30% Apresentação de um tutorial,
sendo: Projeto = 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 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 projeto pode ser repetido apenas na edição seguinte da disciplina. Para melhorar a classificação do tutorial um novo tema deve ser preparado pelo estudante e apresentado em data a combinar com o docente.