Sistemas Distribuídos

Conhecimentos de Base Recomendados

Recomenda-se a conclusão anterior das seguintes unidades curriculares:

– Programação 

– Programação Aplicada

 

Métodos de Ensino

Nesta unidade curricular são utilizadas as seguintes metodologias de ensino:

1 – Método expositivo: método explicativo onde factos, conceitos, princípios e generalizações são definidos e apresentados pelo professor e discutidos com a turma, seguido de exemplos demonstrativos;

2 – Método experimental: método activo onde o aluno desenvolve o conhecimento através de diversas fichas práticas individuais e o desenvolvimento de um projecto final em grupo.

 

Resultados de Aprendizagem

Espera-se que no final da unidade curricular o aluno esteja habilitado a:

1. Caracterizar sistemas distribuídos e descrever os seus principais conceitos, arquitecturas, problemas e desafios.

2. Implementar sistemas distribuídos pela utilização de primitivas básicas de comunicação, de mecanismos de invocação remota de objectos e de serviços web.

Programa

1. Introdução aos Sistemas Distribuídos (Caracterização de sistemas distribuídos; Objectivos: conectividade, transparência, escalabilidade; Conceitos de hardware distribuído; Exemplos de sistemas distribuídos; Middleware; Arquitecturas de sistemas distribuídos).

2. Comunicação (Camadas de protocolos; Remote Procedure Call (RPC); Acesso remoto a objectos; Comunicação orientada a mensagens; Persistência e sincronismo; Comunicação orientada a streams).

3. Problemas em Sistemas Distribuídos (Sincronização de relógios; Consistência e replicação; Tolerância a falhas).

4. Sockets (Protocolos TCP e UDP; Programação com sockets em Java; Multicast e Broadcast).

5. Java RMI (Arquitectura do Java RMI; Serviços; API; Segurança).

6. REST Web Services (O protocolo HTTP; Arquitectura REST; Implementação com JAX-RS).

Docente(s) responsável(eis)

Métodos de Avaliação

Avaliação final
  • - uma prova escrita (50%) - 50.0%
  • - um projecto final (50%) - 50.0%
Avaliação Periódica
  • - trabalhos práticos individuais (30%) - 30.0%
  • - uma prova escrita (40%) - 40.0%
  • - um projecto final em grupo (30%); - 30.0%

Estágio(s)

NAO

Bibliografia

Cardoso, J. (2008). Programação de Sistemas Distribuídos em Java. FCA.

Burke, B. (2013). RESTful Java with JAX-RS 2.0: Designing and Developing Distributed Web Services (Second ed.). O’Reilly Media.

Coulouris, G., Dollimore, J., Kindberg, T., & Blair, G. (2011). Distributed Systems: Concepts and Design (5th ed.). Pearson.

Reilly, D., & Reilly, M. (2002). Java Network Programming and Distributed Computing (1st ed.). Addison-Wesley Professional.