Programação Distribuída

Conhecimentos de Base Recomendados

Programação em linguagem Java e pilha protocolar TCP/IP.

Métodos de Ensino

Exposição de matéria teórica e demonstrações com discussão.

Aulas práticas baseadas na resolução de exercícios e experimentação.

Realização e apresentação de um trabalho prático.

Resultados de Aprendizagem

Esta unidade curricular visa permitir a aquisição de competências no planeamento e desenvolvimento de aplicações distribuídas orientadas para objetos. Ou seja, aplicações constituídas por vários componentes (processos, clientes, servidores, threads, objetos e serviços web), que podem estar instalados em máquinas diferentes e interagir entre si. Neste âmbito, as competências a adquirir incluem também a capacidade de lidar com aspetos relacionados com a concorrência, os mecanismos de sincronização, a comunicação remota e os objetos remotos. Para desenvolver os conhecimentos, capacidades e competências desejados, são abordados diferentes paradigmas de programação e diversas tecnologias com distintos níveis de abstração, nomeadamente a troca de mensagens (sockets em Java e WebSockets), a invocação remota de procedimento e objetos (Java RMI, CORBA, gRPC e JSON RPC), os serviços web e os message brokers (RabbitMQ, Kafka e MQTT).

Programa

  • Desenvolvimento de aplicações para redes TCP/IP em linguagem Java
    • Endereçamento
    • Comunicação não orientada a ligação (UDP)
    • Comunicação orientada a ligação (TCP)
    • Comunicação em grupo
    • Concorrência e multiplexagem de entrada/Saída
    • Aplicações com múltiplas threads
    • Mecanismos de exclusão mútua
    • Comunicação via protocolo HTTP
  • Desenvolvimento de serviços Web do tipo REST
  • Desenvolvimento de Mecanismos de autenticação HTTP
  • Arquitetura N-Tier
  • Ligação de aplicações desenvolvidas em Java a bases de dados relacionais via JDBC
  • Recurso a abordagens Object-Relational Mapping (ORM) e JPA
  • Desenvolvimento de aplicações distribuídas recorrendo a soluções de middleware
    • Conceitos de middleware, serialização, RPC e objeto remoto
    • RPC da Sun (exemplo histórico)
    • Java RMI (exemplo histórico de paradigma de objeto remoto)
    • CORBA (exemplo histórico de paradigma de objeto remoto)
    • JSON RPC
    • gRPC
    • WebSockets
  • Arquiteturas de microserviços
  • Recurso a message brokers
    • Conceitos
    • Kafka
    • RabbitMQ
    • MQTT

Docente(s) responsável(eis)

José Manuel Meireles Marinho

Métodos de Avaliação

  • Nota prévia: a realização de provas orais complementares poderá constituir um instrumento de avaliação adicional, sempre que se considere necessária para dissipar dúvidas ou esclarecer situações suspeitas de fraude ou plágio.
  • Mini-testes no final das aulas teóricas:
    • Mini-testes a partir da segunda semana de aulas (um por aula);
    • Cada um com um peso de 0.2 valores na classificação final;
    • Peso máximo na classificação final: 1.5 valores (7.5% da classificação final);
    • Sem classificação mínima requerida.
  • Os estudantes com o estatuto de trabalhador-estudante e os estudantes Erasmus, que não tenham realizado qualquer mini-teste, podem realizar uma prova alternativa no dia do exame da época normal (1.5 valores)
  • Um trabalho prático desenvolvido em linguagem Java e que envolva várias das tecnologias lecionadas:
    • 7.5 valores (37.5% da classificação final);
    • Sem classificação mínima requerida;
    • Grupos constituídos por dois elementos;
    • 3 metas, com peso na classificação final de 1.5, 3 e 3 valores, respetivamente;
    • Datas-limite de entrega e períodos de defesa:
      • Meta 1: entrega até final da sétima semana do semestre (sem apresentação/defesa);
      • Meta 2: entrega até final da décima semana do semestre apresentação/defesa na décima primeira semana;
      • Meta 3: entrega até final da décima quarta semana do semestre apresentação/defesa na décima quinta semana;
    • Alunos que tenham obtido classificações iguais ou superiores a 50% em trabalhos práticos nos 2 anos letivos anteriores, podem ser dispensado da entrega do trabalho prático, sendo considerada a melhor das classificações anteriormente obtidas.
  • Um exame final, em qualquer uma das épocas de exame a que o aluno tenha acesso, sobre toda a matéria lecionada, teórica e prática:
    • 11 valores (55% da classificação final);
    • Classificação mínima de 25%.
  • Condições de melhoria:
    • A melhoria da avaliação teórica pode ser obtida por realização de nova prova teórica escrita na época de recurso ou em qualquer época subsequente a que o aluno tenha acesso;
    • A classificação obtida no trabalho prático e nos mini-testes não pode ser melhorada.

    Estágio(s)

    NAO

    Bibliografia

    Recomendada

    • Recursos produzidos e recolhidos pelos docentes e colocados na plataforma InforEstudante.

    Complementar

    • Reilly, D., & Reilly, M. (2002). Java network programming and distributed computing. Addison-Wesley Professional.
    • Boje, J. (2019). Spring boot 2: how to get started and build a microservice (3rd ed.). Codeboje. (disponível na biblioteca do ISEC: 1A-12-205)
    • Coulouris, G. F. (2012). Distributed systems : Concepts and design. Addison-Wesley. (disponível na biblioteca do ISEC: 1A-1-440)
    • Vitillo, R. (2022). Understanding distributed systems. Roberto Vitillo. (disponível na biblioteca do ISEC: 1A-1-460)