
Programação Multiparadigma
Código
8285
Unidade Orgânica
Faculdade de Ciências e Tecnologia
Departamento
Departamento de Informática
Créditos
6.0
Professor responsável
Artur Miguel de Andrade Vieira Dias, Luís Manuel Marques da Costa Caires
Horas semanais
4
Total de horas
59
Língua de ensino
Português
Objectivos
Objectivos
Saber
- Entender as características, motivações e oportunidades de aplicação de alguns dos paradigmas de programação dominantes.
- Compreender as vantagens de se ser fluente em diversos estilos de programação e em usá-los de forma integrada.
- Enriquecer os processos mentais aplicáveis ao desenvolvimento de software.
Fazer
- Conseguir desenvolver programas complexos, usando com razoabilidade os ingredientes linguísticos disponíveis.
- Com sentido crítico, procurar soluções que se possam exprimir de forma simples e directa, mas sem nunca esquecer a questão da eficiência.
- Consoante as restrições existentes, ter capacidade para usar paradigmas de programação de forma isolada ou de forma combinada.
- Adquirir experiência no uso um sistema de programação multiparadigma particular - Scala.
Soft-Skills
- Criatividade e imaginação.
- Atitude de exigência e qualidade.
- Capacidade de gestão do tempo e cumprimento de prazos.
- Capacidade para seleccionar instrumentos apropriados a um problema.
Conteúdo
- Programação multi-paradigma
- Caracterização e exemplos.
- Introdução à linguagem Scala. Sua integração com os sistemas Java e .NET.
- Programação funcional
- Estratégias de avaliação. Avaliação lazy e estruturas de dados infinitas. Streams.
- Tipos de dados algébricos e pattern-matching.
- Funções de ordem superior e técnicas baseadas em continuações.
- Técnicas de programação declarativa.
- Programação baseada em geradores e filtros.
- Programação imperativa
- Estado. Controlo. Iteradores.
- Programação orientada pelos objectos
- Revisão das motivações e dos conceitos essenciais. Subtipos.
- Uso de hierarquias de classes vs. uso de tipos de dados algébricos.
- Programação genérica
- Polimorfismo F-restringido. Limites inferiores. Anotações de variância (co- e contra-).
- Inferência de tipos local.
- Programação para a WEB
- Processamento de XML usando padrões com expressões regulares. Serviços WEB.
- Componentes
- Abstracções para a criação de componentes reutilizáveis.
- Tipos-membro abstractos. Selftypes explícitos. Composição de mixins. JavaBeans.
- Concorrência
- Abstracções de concorrência.
- Uso dessas abstracções. Sua implementação com base em threads e monitores.
- Semáforos. Variáveis sincronizadas. Futuros. Computações paralelas.
- Produtores e consumidores. Canais síncronos e assíncronos. Actores e mailboxes.
- Extensibilidade
- Sublinguagens para domínios específicos definidas sobre uma linguagem hospedeira.
Bibliografia
- Martin Odersky, Lex Spoon, and Bill Venners, "Programming in Scala", Artima, 2011.
- Peter van Roy, Seif Haridi, "Concepts, Techniques, and Models of Computer Programming", The MIP Press, 2004.
- Martin Odersky, "Scala by Example", Programming Methods Laboratory, EPFL, 2011.
- Martin Odersky, "The Scala Language Specification", version 2.9, Programming Methods Laboratory, EPFL, 2011.
- Artur Miguel Dias, "Folhas da cadeira, incluindo lista de exercícios", 2012.
Método de ensino
Nas aulas teóricas são transmitidos, exemplificados e discutidos os conceitos fundamentais da cadeira.
Nas aulas práticas os alunos resolvem pequenos problemas onde aplicam os conceitos estudados na cadeira.
Os trabalhos da cadeira são realizados principalmente fora das aulas.
Método de avaliação
Elementos de avaliação
Os elementos de avaliação são os seguintes, e têm os pesos na nota final:
- T1- Teste 1 - 27.5%
- T2- Teste 2 - 27.5%
- P1- Projeto prático 1 - 15%
- P2- Projeto prático 2 - 15%
- P3- Projeto prático 3 - 15%
- ER - Exame de recurso - 55%
Cada um destes elementos de avaliação é cotado até 20 valores.
Os projetos são efectuados por grupos de um ou dois alunos. Poderão haver discussões de alguns projetos para alguns grupos.
Notas das componentes prática e teórica
A nota da componente prática é definida como:
- PRAT = (P1 + P2 + P3) / 3
A nota da componente teórica é definida de duas formas diferentes, consoante o momento em que a nota é obtida:
- TEOR= (T1 + T2) / 2
- TEOR = ER
Frequência
A nota de frequência é igual à nota da parte prática:
- FREQ = PRAT
Nota final e Aprovação
A nota final calcula-se assim:
- FINAL = 0.45 * FREQ + 0.55 * TEOR
A aprovação na cadeira é determinada pela seguinte condição:
- Aprovação = FREQ >= 9.5 e TEOR >= 9.5
As notas intermédias são arredondadas para duas casas decimais.
A nota final é um número inteiro.
Frequências dos anos anteriores
Todas as frequências obtida nos anos anteriores são válidas no ano letivo corrente. Não é possível melhorar a nota de frequência obtida no passado.
Fraude
Qualquer tipo de fraude em qualquer elemento de avaliação implica a impossibilidade de fazer a cadeira no ano lectivo corrente (mesmo que haja exames marcados). Isto aplica-se tanto a quem dá informação como a quem recebe informação.