Ficha Programática da unidade curricular
Unidade
curricular:
|
PARADIGMAS DE PROGRAMAÇÃO
|
||
|
|
|
|
|
Docente:
|
RUI SILVA MOREIRA
|
Grau académico:
|
DOUTOR
|
Categoria
Funcional:
|
PROFESSOR AUXILIAR
|
|
|
|
|
|
|
|
Ciclo
de Estudos:
|
2º CICLO
|
Curso:
|
ENGENHARIA INFORMÁTICA
|
Semestre curricular:
|
1º SEMESTRE
|
Ano lectivo:
|
2009-2010
|
N.º
total de ECTS:
|
4
|
|
|
N.º
ECTS de Contacto:
|
2
|
|
|
Tipologia
das aulas:
|
As aulas terão natureza Teórico-Prática (TP) e Prática Não-Laboratorial
(PNL)
|
||
|
Avaliação: |
1 -
Avaliação contínua
O
método de avaliação da disciplina baseia-se no modelo da avaliação contínua e
compreende duas componentes: uma componente Teórico-Prática e uma componente Prática Não-Laboratorial resultante de trabalhos realizados com
recurso ao computador ou em laboratório de informática.
Componente
Teórico-Prática
A
componente teórico-prática tem um peso de
50% na classificação final da disciplina. A avaliação da componente
teórico-prática realiza-se de forma contínua durante as aulas teórico-práticas,
e inclui os seguintes elementos de avaliação:
·
Dois testes de
avaliação individual:
incidem sobre os conhecimentos leccionados até ao momento em que são realizados. Cada teste possui um peso de 45% na classificação final da componente teórico-prática. Um teste
realiza-se no primeiro terço do semestre e o outro no fim do semestre (em datas
a
combinar com os alunos). Estas avaliações incluirão uma parte de índole mais
prática (com a duração de 60 minutos) na qual se pedirá aos alunos para
desenvolverem soluções para determinados problemas (geração de lexers ou
parsers, desenvolvimento OO, desenvolvimento Lisp) – vale 70% da nota do teste. Esta componente será complementada por uma
parte de índole mais teórico-prática (com a duração de 30 minutos) englobando
um conjunto de perguntas de escolha múltipla (havendo desconto de 25% por cada
resposta errada), de verdadeiros/falso (aplicando-se um desconto de 50% por
cada resposta errada) e também perguntas de desenvolvimento sobre os temas
abordados – vale 30% da nota do
teste.
·
Desempenho do aluno
durante as aulas TP:
esta componente procurará avaliar a assiduidade (medida por folhas de
presença), a participação, o empenho nas aulas teórico-práticas e também a
capacidade para a realização de apresentações sobre temas propostos. Estas apresentações
serão atribuídas durante o semestre e serão contabilizadas equitativamente. Este
elemento possui um peso de 10% na
classificação final da componente teórico-prática.
Exige-se
uma nota mínima de oito (8) valores
nesta componente para que se possa ponderar com a classificação da componente
prática não-laboratorial para efeitos de cálculo da classificação final na
disciplina.
A
falta aos momentos de avaliação será convertida numa nota 0 (zero) para efeitos
de cálculo da classificação. Caso o aluno não fique aprovado, será remetido
para exame de recurso ou especial (seja trabalhador-estudante ou finalista),
desde que o aluno tenha obtido a aprovação na componente prática da disciplina
e cumprido o regime de assistência às aulas. Nas aulas teórico-práticas a assiduidade obrigatória é de 50%, de
acordo com o regulamento pedagógico da UFP.
A
classificação obtida na componente teórico-prática será, pois, obtida através
da seguinte expressão:
Nota da componente Teórico-Prática = 45% Teste 1 + 45% Teste 2 + 10% Desempenho
Aluno Aulas TP
Componente
Prática Não-Laboratorial
A
componente prática não-laboratorial tem um peso de 50% na classificação final da disciplina. A avaliação da
componente prática não-laboratorial realiza-se igualmente de modo contínuo
durante as aulas práticas não-laboratoriais e também pela realização de 2 projectos
ao longo do semestre. Os projectos serão realizados em grupo (no máximo com 2 ou
3 alunos). O primeiro projecto versará a geração de um lexer e/ou parser de
acordo com as indicações do docente; o segundo projecto implicará a
implementação de um problema, a especificar pelo docente, recorrendo aos dois
paradigmas abordados nas aulas.
A avaliação da componente prática
não-laboratorial inclui os seguintes elementos de avaliação:
·
Projecto de geração de
um lexer e/ou parser:
os alunos deverão entregar um relatório e respectiva implementação, no primeiro
terço do semestre, relativamente ao problema proposto. Este elemento possui um
peso de 45% da nota da componente
prática não-laboratorial.
·
Projecto implementação
de em Java e Lisp:
no final do semestre (em data a especificar) os alunos deverão entregar um
relatório final com uma análise, implementação e comparação do problema
proposto recorrendo aos dois paradigmas abordados. Esta componente possui um
peso de 45% da nota da componente
prática não-laboratorial.
·
Desempenho do aluno
durante as aulas PNL:
esta componente procurará avaliar a assiduidade (medida por folhas de
presença), a participação e o empenho nas aulas práticas não-laboratoriais e
também a capacidade para a realização de pequenos trabalhos práticos,
atribuídos durante as aulas, para serem realizados/concluídos em casa até à
aula seguinte. Estes trabalhos serão atribuídos durante todo o semestre e serão
contabilizados equitativamente. Este elemento possui um peso de 10% na classificação final da
componente teórico-prática.
Nas aulas práticas não-laboratoriais a assiduidade mínima obrigatória é de 70%.
Não há possibilidade de recurso ou época especial para a componente prática não-laboratorial.
A classificação obtida na componente prática obtém-se através da seguinte
expressão:
Nota da componente
Prática Não-Laboratorial = 45% Projecto Lexer/Parser + 45% Projecto OO/Lisp +
10% Desempenho Aluno Aulas PNL
Classificação
final
A classificação final da disciplina obtém-se
através da seguinte expressão:
Nota
final = 50% Nota da Componente Teórico-Prática + 50% Nota da Componente Prática
Não-Laboratorial
Ao aluno, só será contabilizada a
classificação obtida na componente teórico-prática da disciplina se o aluno
tiver obtido uma classificação igual ou
superior a dez (10) valores na componente
prática. Caso contrário lança-se a nota negativa (da componente prática) em
pauta. De igual modo, exige-se uma nota
mínima de oito (8) valores na componente
teórico-prática para que se possa ponderar com a classificação da
componente prática não-laboratorial. Caso contrário lança-se a nota negativa
(da componente teórica) em pauta.
2 -
Exame de Recurso/Época Especial:
O exame de recurso/época especial é uma prova
excepcional que ocorre apenas no final do ano lectivo, no período previsto no
cronograma, e que apenas abrange a componente teórico-prática da disciplina,
incidindo sobre a totalidade da matéria teórico-prática incluída no programa da
disciplina, com a duração máxima, incluindo tolerância, de 90 minutos. O aluno
só se poderá submeter a este exame se tiver sido aprovado na componente prática
desta disciplina e tenha cumprido as assiduidades mínimas estabelecidas no
regulamento pedagógico. É exigida uma nota mínima que seja, pelo menos, igual
ao valor inferior da classificação, que num exame, dá acesso à oral, nesta
componente teórica da avaliação para que se possa ponderar com a nota da
componente prática para efeitos do cálculo da nota final. Esta prova destina-se
aos alunos que não obtiveram aprovação na componente teórico-prática da
disciplina, ou alunos em regimes especiais. Não existe qualquer possibilidade
de recurso à componente prática da disciplina.
A classificação final do aluno será calculada
utilizando a equação indicada acima na secção classificação final. A
classificação obtida no exame de recurso ou especial corresponderá à
classificação da componente teórica.
Este procedimento também se aplica às Épocas
de Trabalhador-Estudante e Finalista.
No caso de alunos com o estatuto de trabalhador-estudante, com
impossibilidade de presença num número significativo de aulas teórico-práticas,
a avaliação do desempenho em sala de aula será substituída por uma prova oral
em que o aluno deverá resolver um conjunto de problemas teórico-práticos
relacionados com o programa da disciplina. Sempre que se julgar necessário, o
docente poderá solicitar o desenvolvimento de trabalhos complementares (sob o
modo de apresentação oral ou escrita) de modo a melhor aferir o nível de
conhecimentos e
de competências alcançado pelo aluno.
|
Objectivos da unidade curricular e competências a
atingir: |
Durante muito tempo o
desenvolvimento de software seguia regras ad-hoc que dependiam essencialmente
da experiência e intuição da equipa de desenvolvimento de software. À medida
que as aplicações e as arquitecturas dos sistemas informáticos se tornaram cada
vez mais complexas, estruturadas e sofisticadas e os requisitos impostos se
assumiam cada vez mais exigentes, os programadores e designers de sistemas
tiveram que se adaptar e desenvolver metodologias e abordagens mais eficientes.
Actualmente os engenheiros de software adoptam diferentes tipos de abordagens e
de linguagens de programação de acordo com a área ou domínio de aplicação, com
a necessidade específica do sistema a implementar e com as características
particulares da linguagem de implementação. A abordagem seguida no
desenvolvimento de sistemas depende não só da formação específica do
programador mas também da área específica da aplicação e das potencialidades e
particularidades da linguagem de programação.
Neste contexto, a
disciplina de paradigmas da programação pretende, inicialmente, introduzir os conceitos
gerais sobre as linguagens de programação e em particular sobre a construção dos
módulos de um compilador (e.g., Lexer, Parser, etc.); posteriormente, pretende dar
a conhecer aos alunos algumas das diferentes abordagens ou paradigmas
existentes para o desenvolvimento de software, nomeadamente: o paradigma
declarativo (nomeadamente as linguagens funcionais, e.g., Lisp) e o paradigma
imperativo (em particular as linguagens orientadas-objectos, e.g., Java).
|
Conteúdos por unidade
lectiva e sua forma de execução pedagógica: |
|
Conteúdos |
Horas Contacto |
Estudo Individual |
ECTS |
Bibliografia |
|
(T+TP+P+L+TC+OT) |
||||
|
0. Apresentação |
|
|
|
|
|
0.1. Enquadramento
e Objectivos |
1 |
0 |
0 |
- |
|
0.2. Metodologia
e Sistema de Avaliação |
||||
|
0.3. Conteúdo
Programático e Bibliografia |
||||
|
1. Conceitos
Gerais sobre Linguagens de Programação |
|
|
|
|
|
1.1. Linguagem
Natural |
12 |
22 |
1,3 |
[1],
[2], [5] |
|
1.1.1. Sintaxe e
Semântica |
||||
|
1.2. Linguagens
Naturais e Linguagens de Programação |
||||
|
1.3. Normalização
das Linguagens |
||||
|
1.4. Linguagens
de Programação |
||||
|
1.4.1. Arquitectura
e Princípios das Linguagens |
||||
|
1.4.2. Classificação
das Linguagens |
||||
|
1.4.3. Elementos
das Linguagens |
||||
|
1.4.4. Elementos
Meta-linguísticos |
||||
|
1.4.5. Descrição
Formal de uma Linguagem |
||||
|
2. Modelo de
Programação Orientada aos Objectos |
|
|
|
|
|
2.1. Desenvolvimento
Orientado aos Objectos |
12 |
22 |
1,3 |
[3],
[5] |
|
2.2. Princípios
das linguagens Orientadas aos objectos |
||||
|
2.3. Caso Prático
(Java) |
||||
|
2.3.1. Descrição
e Instalação do JDK |
||||
|
2.3.2. Introdução
à Programação Orientada-Objectos em Java |
||||
|
2.3.3. Classes e
Objectos |
||||
|
2.3.4. Atributos
e tipos de dados primitivos |
||||
|
2.3.5. Métodos/Operações
e variáveis locais |
||||
|
2.3.6. Operadores
e expressões |
||||
|
2.3.7. Vectores |
||||
|
2.3.8. Expressões
de Controlo de Fluxo e recursividade |
||||
|
2.3.9. Estruturas
de dados complexas |
||||
|
3. Modelo de
Programação Funcional |
|
|
|
|
|
3.1. Linguagens
Funcionais |
12 |
22 |
1,3 |
[4],
[5] |
|
3.2. Princípios
das Linguagens Funcionais |
||||
|
3.3. Caso Prático
(Lisp) |
||||
|
3.3.1. Descrição
e Instalação do Xlisp |
||||
|
3.3.2. Introdução
e Princípios Básicos do Lisp |
||||
|
3.3.3. Variáveis |
||||
|
3.3.4. Hierarquia
de Elementos |
||||
|
3.3.5. Ordem de
Avaliação de Expressões-S |
||||
|
3.3.6. Definição
de Funções |
||||
|
3.3.7. Variáveis
Locais |
||||
|
3.3.8. Listas |
||||
|
3.3.9. Estruturas
de Controlo de fluxo e Recursividade |
||||
|
3.3.10. Listas de
Associação |
||||
|
TOTAL |
37 |
67 |
8 104 |
|
Nota: Nº de ECTS = horas/26
Conteúdos-Horas-Contacto-Estudo
Individual–ECTS-Bibliografia
1. Conceitos
Gerais sobre Linguagens de Programação -12-22-1,3-[1], [2], [5]
2. Modelo
de Programação Orientada aos Objectos -12-22-1,3-[3], [5]
3. Modelo de
Programação Funcional
-12-22-1,3-[4], [5]
|
Bibliografia: |
[1]
Fischer, Alice, Grodzinsky, Frances, “The Anatomy of Programming
Languages”, Prentice-Hall, 1993
[2] Appleby, Doris,
“Programming Languages, Paradigm and Practices”, McGraw-Hill, 1991
[3] Eckel, Bruce,
“Thinking in Java”, President, MindView Inc., 1997, www.eckelobjects.com.
[4] Steel, Guy L.
Jr., “Common Lisp”, 2nd Ed. (HTML Version), www.cs.virginia.edu/~vision/cltl2/clm/node1.html.
[5] Moreira, Rui, Apontamentos de apoio às aulas de PP,
UFP, 2009.
[5] Friedman, Daniel,
Wand, Mitchell, “Essentials of Programming Languages”, MIT Press, 1992
[6] Sethi, Ravi,
“Programming Languages: Concepts and Constructs”, Addison-Wesley, Reading,
Massachusetts, 1989.
[1]
JFlex
(gerador de analisadores lexicais em Java), http://jflex.de/
[2]
Java
Cup (gerador de parsers em Java), http://www2.cs.tum.edu/projects/cup/
[3] JBuider – Borland, http://www.borland.com/downloads/download_jbuilder.html
[4] Netbeans IDE, http://www.netbeans.org/downloads
[5] Eclipse IDE, http://www.eclipse.org/downloads;
Eclipse RMI Plugin, http://rmi-eclipse.sourceforge.net/
[6]
XLisp,
http://www.mv.com/ipusers/xlisper/
Requisitos a serem cumpridos
para registo total dos ECTS:
A aprovação (nota final igual ou superior a dez valores) é
condição necessária, mas não suficiente, para creditar esta unidade curricular.
Para obter a creditação desta unidade curricular o aluno terá de garantir a
obtenção de todos os ECTS previstos para a unidade curricular. A atribuição dos
ECTS ao aluno não é dependente exclusivamente da assiduidade em sala de aula (obrigatoriamente assegurada a, pelo menos,
a 70% das aulas leccionadas); ela é também decidida em função da
assiduidade aos actos pedagógicos programados pelo professor e da participação
em seminários, eventos culturais e científicos a definir pelo docente ou a
coordenação da área científica de Informática.
Os ECTS
previstos para o trabalho e estudo pessoal do aluno só lhe serão integralmente
atribuídos em função do desempenho demonstrado, nomeadamente no que respeita à
aquisição dos conhecimentos e competências visados por esta unidade curricular:
conhecimento efectivo da bibliografia indicada e demonstração do conhecimento sobre
as soluções utilizadas na definição de linguagens de programação e na
capacidade para identificar e compreender as características dos principais
paradigmas de programação.
O grau de desenvolvimento de conhecimentos bem como
de aquisição de competências nas áreas temáticas compreendidas no programa da
disciplina será avaliado de modo contínuo ao longo do semestre, quer em termos
do domínio dos conceitos teóricos e práticos que sustentam a geração de
ferramentas de análise lexical e gramatical de linguagens de programação, bem
como no domínio das características e métodos de desenvolvimento de aplicações baseados
em diferentes paradigmas de programação, quer ainda em termos de comunicação
oral e escrita dos temas e conceitos abordados.
Resumo: Conceitos Gerais sobre as Linguagens: linguagem natural, sintaxe e
semântica, linguagens naturais e linguagens de programação, normalização das
linguagens. Linguagens de programação: arquitectura e princípios das
linguagens, classificação das linguagens, elementos das linguagens, elementos
meta-linguísticos, descrição formal de uma Linguagem. Modelo de Programação
Orientada aos Objectos: metodologias orientadas aos objectos, modelização
gráfica OMT, caso prático (Java). Modelo de Programação Funcional: linguagens
funcionais, princípios das linguagens funcionais, caso prático (Lisp).
Abstract: General concepts about languages: natural languages, syntax and
semantic, natural languages and programming languages, language normalisation.
Programming languages: evaluation principals of language designs, language
classification, language elements, meta-language elements, and languages formal
description. Object-Oriented programming model: object oriented methodologies,
graphical notation OMT, practical study case (Java). Functional programming model:
functional languages, functional language principles, practical study case
(Lisp).