• EN
  • Facebook
  • Instagram
  • Youtube
  • Linkedin
Você está em: Início > Ensino > Unidades Curriculares > MIA03
Autenticação
ATENÇÃO: Este site utiliza cookies. Ao navegar no site estará a consentir a sua utilização.

Programação Avançada

Código: MIA03    Sigla: PA
Área Científica: Informática

Ocorrência: 2024/25 - 2S

Área de Ensino: Informática

Cursos

Sigla Nº de Estudantes Plano de Estudos Ano Curricular Créditos Horas Contacto Horas Totais
MIA 22 Despacho n.º 12693/2023, de 12 dezembro 6

Horas Efetivamente Lecionadas

MIA-1-2ED

Teórico-Práticas: 29,83

Docência - Horas Semanais

Teórico-Práticas: 1,80

Tipo Docente Turmas Horas
Teórico-Práticas Totais 1 1,80
Pedro Nuno de Alexandre Sobreiro - ESD / ESGT   1,80

Docência - Responsabilidades

Docente Responsabilidade
Pedro Nuno de Alexandre Sobreiro - ESD / ESGT Responsável

Objetivos de aprendizagem e a sua compatibilidade com o método de ensino (conhecimentos, aptidões e competências a desenvolver pelos estudantes)

OA1. Compreender os conceitos e técnicas da programação concorrente, paralela e distribuída.
OA2. Saber como solucionar os aspectos críticos de uma aplicação concorrente.
OA3. Desenvolver programas multitarefa e com modelos de programação assíncrona.
OA4. Explorar as linguagens modernas para desenvolvimento de programas concorrentes (como Go, Scala, Rust, Java, e Python).

Conteúdos programáticos

CP1. Modelos de paralelismo (bit, instrução, dados, tarefas)
CP2. Programação paralela vs programação concorrente vs programação distribuída
CP3. Programação concorrente

  • CP3.1. Controlo de permissões
  • CP3.2. Troca de mensagens
  • CP3.3. O modelo de atores
CP4. Programação multitarefa
  • CP4.1. Conceito de thread
  • CP4.2. Comutação do contexto de execução, partilha de dados e os respetivos problemas
  • CP4.3. Sincronização no acesso aos dados
CP5. Modelos e mecanismos de programação assíncrona
CP6. Processamento distribuído
  • CP6.1. Fiabilidade, escalabilidade e manutenção de aplicações
  • CP6.2. Dados distribuídos: partição e replicação, transações, e consistência

Demonstração da coerência dos conteúdos programáticos com os objetivos de aprendizagem da unidade curricular

O objetivo OA1 é transversal a todos os conteúdos programáticos, visto que todos abordam conceitos e técnicas de programação concorrente, paralela e/ou distribuída. O objetivo OA2 é coberto pelos conteúdos CP2, CP3, CP4, e CP5, já que estes abordam diferentes estratégias de programação concorrente. O objetivo OA3 é coberto pelos conteúdos CP4 e CP5 visto que estes abordam, respetivamente, estratégias de programação multitarefa e assíncrona. Por fim, o objetivo OA4 é coberto pelos conteúdos CP3, CP4, e CP5, já que estes exploram linguagens modernas como Go, Rust ou Python.

Metodologias de ensino e de aprendizagem específicas da unidade curricular articuladas com o modelo pedagógico

As aulas são de cariz teórico-prático, combinando uma exposição teórica dos conceitos para enquadramento com os conteúdos. Os alunos desenvolvem uma aprendizagem baseada em problemas onde exploram a utilização de diferentes modelos de programação e avaliam vantagens e desvantagens de cada modelo em termos de desempenho, escalabilidade, complexidade de implementação e tolerância a falhas.


Avaliação

A avaliação contínua inclui a realização de três trabalhos práticos e uma prova escrita individual, com uma ponderação respetiva de 60% (A2 & A3 & A4) e 40% (A1): 

A1 - Teste individual (40%) 
A2 - Trabalho de programação concorrente com apresentação (20%) 
A3 - Trabalho de programação multitarefa com apresentação (20%) 
A4 - Trabalho de modelos de programação assíncrona com apresentação (20%) 

Em alternativa, na avaliação contínua existe a possibilidade de substituir os componentes A1, A2, A3 e A4 pela produção de um artigo científico. O artigo deve estar alinhado com os temas da unidade curricular e seguir os padrões de publicação científica, seguindo as etapas: 
(1) Proposta para o tema: Problema de estudo. Questão de pesquisa. Abordagem metodológica 
(2) Aprovação e Orientação: O professor analisará as propostas e fornecerá feedback e orientação. Serão disponibilizados artigos e exemplos para auxiliar na elaboração do artigo.
(3) O artigo deve seguir uma estrutura científica: (i) Título; (ii) Resumo; (iii) Introdução; (iv) Metodologia; (v) Resultados/Análise; (vi) Conclusão; (vii) Referências 
(4) Avaliação: O artigo será avaliado com base na relevância do tema, rigor metodológico, clareza da escrita e contribuição para a área de estudo, bem como potencialidade de publicação 

Os alunos em avaliação contínua que não obtenham a nota mínima de 8,5 valores no teste individual e de 10 valores em cada um dos três trabalhos serão remetidos para exame final. O artigo que não obter nos critérios de avaliação uma nota superior ou igual a 9.5 será remetido para avaliação final.

Demonstração da coerência das metodologias de ensino e avaliação com os objetivos de aprendizagem da unidade curricular

Demonstração da coerência das metodologias de ensino e avaliação com os objetivos de aprendizagem da unidade curricular
Aulas Teórico-Práticas:

  • A combinação da exposição teórica com atividades práticas garante que os alunos não apenas compreendam os conceitos (OA1), mas também saibam aplicá-los (OA2, OA3, OA4)
  • A parte teórica fornece as bases necessárias para compreender os modelos de programação, enquanto a parte prática permite a exploração e experimentação com linguagens e técnicas modernas.
Aprendizagem Baseada em Problemas (PBL):

  • O PBL permite alcançar os objetivos como a análise e comparação de diferentes modelos de programação (OA1), a resolução de problemas de concorrência (OA2) e o desenvolvimento de soluções robustas (OA3).
  • Ao explorar as vantagens e desvantagens de cada modelo, os alunos desenvolvem um entendimento profundo das implicações de design e das escolhas de implementação.
  • Explorar as linguagens modernas para desenvolvimento de programas concorrentes (OA4) é conseguido através da necessidade dos alunos em implementarem soluções para problemas
Consistência com o Modelo Pedagógico:

  • A metodologia de ensino descrita promove a aprendizagem ativa, onde os alunos são desafiados a aplicar seus conhecimentos em situações práticas
  • O modelo pedagógico que valoriza a autonomia, a capacidade de resolver problemas e habilidades de pensamento crítico
Coerência entre Avaliação e Objetivos de Aprendizagem:

  • Teste Individual (A1 - 40%): O teste escrito avalia a compreensão dos conceitos teóricos (OA1), garantindo que os alunos tenham uma base conceptual.
  • Trabalhos práticos com apresentação (A2, A3, A4 - 60%) permitem: (1) avaliar a capacidade dos alunos em aplicar conhecimentos adquiridos na resolução de problemas (OA2, OA3, OA4) e (2) que os alunos comuniquem as soluções, demonstrando sua capacidade de síntese e análise

Bibliografia de consulta (existência obrigatória)

Butcher, P. (2014). Seven Concurrency Models in Seven Weeks: When Threads Unravel (The Pragmatic Programmers). Pragmatic Bookshelf.
Fowler, M. (2022b). Python Concurrency with Asyncio. Manning.
Kleppmann, M. (2017). Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems. O'Reilly Media.