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.

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

Resultados de Aprendizagem

Esta unidade curricular tem como objetivo permitir a aquisição de competências no planeamento e desenvolvimento de aplicações distribuídas orientadas a objetos, ou seja, aplicações constituídas por múltiplos componentes (processos, clientes, servidores, threads, objetos, etc.), eventualmente localizados em máquinas distintas e que interagem entre si. Neste âmbito, também fazem parte das competências a adquirir a capacidade de lidar com aspetos relacionados com concorrência, mecanismos de sincronização, comunicação remota e objetos remotos. De modo a desenvolver os conhecimentos, aptidões e competências pretendidos, são considerados os seguintes paradigmas de programação, aos quais correspondem distintos níveis de abstração: troca de mensagens (sockets em Java), invocação remota de objetos (Java RMI e CORBA) e serviços Web.

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
  • Arquitetura N-Tier
  • Ligação de aplicações desenvolvidas em Java a bases de dados relacionais (JDBC e JPA)
  • Introdução às soluções de middleware para aplicações distribuídas
    • Conceitos de middleware, serialização, RPC e objeto remoto
    • RPC da Sun
    • Principais tipos de objetos remotos (singleton, stateful, stateless, etc.)
    • Java RMI
    • CORBA
    • Serviços Web do tipo REST
  • Desenvolvimento de aplicações distribuídas recorrendo ao Java RMI
    • Servidores
    • Clientes
    • Callback
    • Ativação remota de objetos
    • Introdução aos mecanismos de segurança
  • Desenvolvimento de aplicações distribuídas recorrendo ao CORBA em Java
    • Servidores
    • Clientes
  • Desenvolvimento, em linguagem Java, de aplicações distribuídas recorrendo a serviços Web/API do tipo REST
    • Servidores
    • Clientes
    • Mecanismos de autenticação HTTP
    • Plataforma Spring Boot
  • Arquiteturas de microserviços

Docente(s) responsável(eis)

José Manuel Meireles Marinho

Métodos de Avaliação

  • Tipo de avaliação: periódica
  • 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.
  • Mini-testes no final das aulas práticas:
    • 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.
  • Os estudantes com o estatuto de trabalhador-estudante e os estudantes Erasmus que não tenham realizado qualquer mini-teste, nas aulas teóricas e práticas, podem realizar uma prova alternativa no dia do exame normal (3 valores)
  • Um trabalho prático desenvolvido em linguagem Java e envolvendo, entre outras características, múltiplas threads, o Paradigma de troca de mensagens, o paradigma de objeto remoto, serviços web/API do tipo REST, bases de dados relacionais e mecanismos de callback:
    • 8 valores (40% da classificação final);
    • 2 metas sujeitas a 2 períodos de defesa;
    • 1ª meta:
      • 5 valores;
      • Data-limite de entrega: final da 12ª semana do semestre;
      • Defesas: 13ª semana do semestre.
    • 2ª meta (componentes REST e RMI):
      • 3 valores;
      • Data-limite de entrega: final da 14ª semana do semestre;
      • Defesas: 15ª semana do semestre.
    • Caso um aluno tenha obtido classificações iguais ou superiores a 50% em trabalhos práticos nos 2 anos letivos anteriores, este pode ficar dispensado da entrega do trabalho prático, sendo considerada a melhor das classificações anteriormente obtidas;
    • Na época especial de exames, os estudantes que a ela tenham acesso podem, se o desejarem e ainda não tenham obtido classificação nesta componente, realizar uma prova alternativa ao trabalho prático, desde que informem o docente (8 valores).
  • 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:
    • 9 valores (45% 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 & Distributed Computing. Addison-Wesley
      • BOJE, J. (2019). Spring Boot 2 : how to get started and build a microservice (3rd ed). Frankfurt : Codeboje (disponível na biblioteca do ISEC: 1A-12-205)
      • COULOURIS, G., DOLLIMORE, J., KINDBERG, T, & BLAIR, G. (2011). Distributed Systems – Concepts and Design (5th Edition). Addison-Wesley (disponível na biblioteca do ISEC: 1A-1-440)
      • VITILLO, R. (2021). Understanding distributed systems (version 1.1.1) (disponível na biblioteca do ISEC: 1A-1-460)