Unidade Curricular:Código:
Paradigmas de Programação906PDPO
Ano:Nível:Curso:Créditos:
1MestradoEngenharia Informática (Sistemas de Informação e Multimedia)6 ects
Período Lectivo:Língua de Instrução:Nº Horas:
Português/Inglês78
Objectivos de Aprendizagem:
Esta unidade curricular pretende dotar os alunos de conhecimentos sobre as características das linguagens de programação existentes e dos paradigmas de programação associados, bem como sobre ferramentas e técnicas para o desenvolvimento de tradutores de linguagens. Os objectivos principais passam pela identificação e caraterização das linguagens de programação existentes, pelo conhecimento de ferramentas de desenvolvimento de compiladores e pelo estudo concreto de linguagens aplicando dois paradigmas distintos de desenvolvimento. Os alunos deverão ficar familiarizados com as potencialidades inerentes às diferentes linguagens de programação, dominar ferramentas de desenvolvimento de módulos (lexers e parsers) para a tradução de linguagens, bem como ser capazes de distinguir conceitos de desenvolvimento dos paradigmas imperativo e declarativo.
Conteúdos Programáticos:
1. Conceitos Gerais sobre Linguagens de Programação (sintaxe e semântica)
2. Modelo de Programação Orientada aos Objectos
3. Modelo de Programação Funcional
Demonstração da Coerência dos Conteúdos Programáticos com os Objectivos da Unidade Curricular:
Os conteúdos programáticos estão coerentes com os objectivos de aprendizagem na medida em que abordam os temas principais sobre a caracterização das linguagens de programação existentes e das características dos paradigmas de programação a estas associados que deverão ser dominados pelos alunos no final da unidade curricular. Em particular começa-se por abordar os conceitos e características fundamentais das linguagens de programação existentes bem como das ferramentas de geração de lexers e parsers utilizados no desenvolvimento dos tradutores de linguagens. Particulariza-se ainda o estudo em duas linguagens de programação concretas, uma orientada aos objetos (Java) e outra funcional (Lisp). Todos os temas abordados são exemplificados com a aplicação de vários exercícios concretos. Os objectivos da aprendizagem estão portanto alinhados com os temas abordados tanto ao nível teórico-prático como prático, sendo aplicados em exemplos concretos variados tanto nas aulas como em trabalhos par
Metodologias de Ensino (Avaliação Incluída):
Esta unidade curricular está organizada em aulas teórico-práticas (TP) e práticas (PR). A metodologia de ensino utilizada no âmbito das aulas TP baseia-se na exposição oral dos conteúdos programáticos e na sua exemplificação ou aplicação em situações concretas que demonstrem os temas abordados, nomeadamente sobre as características das linguagens de programação existentes e caracterização dos paradigmas a elas associados. Paralelamente, no contexto das aulas práticas laboratoriais, os alunos têm oportunidade de aplicar e desenvolver exercícios que complementam os conceitos aprendidos e aumentem a base de experiências com os temas abordados. A avaliação é contínua, contemplando em partes iguais a componente TP e PR. A componente TP é avaliada por um exame realizado durante o semestre. A componente PR é avaliada pela realização de projetos práticos cujos requisitos são propostos durante o semestre.
Demonstração da Coerência das Metodologias de Ensino com os Objectivos de Aprendizagem da Unidade Curricular:
As metodologias de ensino aplicadas nesta unidade curricular procuram levar os alunos a conhecer os diferentes aspectos das linguagens de programação existentes e as principais características dos paradigmas de programação associados a estas linguagens. Procura-se ainda que os alunos desenvolvam competências práticas na definição e geração de tradutores de linguagens (cf. lexers e parsers) através da utilização de ferramentas de desenvolvimento que automatizam esta tarefa. As aulas teórico-práticas e em particular as aulas práticas laboratoriais permitem um contato permanente com os aspectos de modelização e implementação das linguagens de programação, facilitando portanto o progresso gradual no conhecimento e caracterização dos paradigmas de programação existentes. Esta experiência e contato com exemplos práticos concretos permite melhorar o conhecimento das linguagens de programação e das ferramentas que permitem a geração automática de tradutores, que é essencial para o desenvolvimento técnico e obtenção de competências de programação nesta área.
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] Andre W. Appel, Modern Compiler Implementation in Java, 2nd Ed., Cambridge University Press 2004.
[4] Eckel, Bruce, “Thinking in Java”, President, MindView Inc., 1997, www.eckelobjects.com.
[5] Steel, Guy L. Jr., “Common Lisp”, 2nd Ed. (HTML Version: www.cs.virginia.edu/~vision/cltl2/clm/node1.html (Last visited 2012)).
[6] Moreira, Rui, Apontamentos de apoio às aulas de PP, UFP, 2009.