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 MarinhoMé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)