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:

Principal

[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.

Complementar

[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.

 

Recursos informáticos de apoio - Ambiente de desenvolvimento

[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).