Unidade Curricular:Código:
Sistemas Distribuídos1093SDIS
Ano:Nível:Curso:Créditos:
3LicenciaturaEngenharia Informática6 ects
Período Lectivo:Língua de Instrução:Nº Horas:
Segundo SemestrePortuguês/Inglês78
Objectivos de Aprendizagem:
Neste curso pretende-se que os alunos adquiram conhecimentos sólidos sobre as arquitecturas, modelos e protocolos de organização e gestão de sistemas distribuídos. Os alunos deverão conseguir definir e caracterizar diferentes tipos de sistemas distribuídos, nomeadamente os seus objectivos, serviços de middleware envolvidos e variantes arquitecturais ao modelo base Cliente-Servidor. Deverão ainda conseguir caracterizar as técnicas e os modelos de comunicação mais utilizados em sistemas distribuídos, e.g., invocação remota de métodos, comunicação assíncrona (mensagens) e comunicação síncrona (streaming). Pretende-se também introduzir algumas ferramentas usadas no desenvolvimento de aplicações distribuídas (cf. RMI/EJB, CORBA/CCM, DCOM/.NET, Web Services). Os alunos deverão ficar capazes de aplicar os conceitos e mecanismos de implementação de sistemas distribuídos recorrendo a tecnologias existentes (e.g., invocação de métodos em objectos remotos (RMI) e Web Services).
Conteúdos Programáticos:
1. Introdução aos Sistemas Distribuídos
2. Comunicação em Sistemas Distribuídos
3. Processamento, Localização e Sincronização de Recursos
4. Replicação de Recursos e Tolerância a Falhas
5. Ferramentas e Serviços Remotos
Demonstração da Coerência dos Conteúdos Programáticos com os Objectivos da Unidade Curricular:
Os conteúdos programáticos são coerentes com os objectivos de aprendizagem na medida em que focam os principais temas tradicionalmente abordados em sistemas distribuídos. Em particular começa-se por caracterizar os diferentes objectivos e aspectos inerentes aos sistemas distribuídos bem como as tecnologias e serviços que estão na base destes sistemas. Particulariza-se o estudo dos tipos de comunicação utilizados e abordam-se os modelos de localização, replicação e sincronização de recursos bem como a gestão de actualizações, concorrência e tolerância a falhas. Paralelamente abordam-se na prática tecnologias utilizadas na implementação de sistemas distribuídos, nomeadamente através da invocação de métodos remotos e web services. Os objectivos da aprendizagem estão portanto alinhados com os temas abordados ao nível teórico como também com os exemplos práticos concretizados por via de exercícios e projetos implementados recorrendo a ferramentas de middleware existentes.
Metodologias de Ensino (Avaliação Incluída):
Esta unidade curricular está organizada em aulas teórico-práticas (TP) e práticas (PR). A metodologia de ensino utilizada no âmbito das aulas TP baseia-se na exposição oral dos conteúdos programáticos bem como na discussão das principais questões sobre os temas abordados. Paralelamente, no contexto das aulas práticas laboratoriais, os alunos têm oportunidade de contactar com ferramentas de software (cf. RMI, Web Services) vulgarmente utilizadas e aplicadas no desenvolvimento de sistemas distribuídos. A avaliação é contínua, contemplando em partes iguais a componente TP e PR. A componente TP é avaliada por um exame realizado no final do semestre. A componente PR é avaliada pelo planeamento e implementação de um projecto de um sistema/serviço distribuído cujos requisitos são propostos durante o semestre.
Demonstração da Coerência das Metodologias de Ensino com os Objectivos de Aprendizagem da Unidade Curricular:
As metodologias de ensino aplicadas nesta unidade curricular procuram levar os alunos a conhecer os modelos e arquitecturas de planeamento e gestão de sistemas distribuídos, bem como a desenvolver competências na identificação e implementação dos requisitos para estes sistemas. A vertente proporcionada pelas aulas práticas permite um contato com tecnologias actualmente utilizadas no desenvolvimento de sistemas distribuídos numa lógica de serviços, tecnologias de invocação de métodos remotos e serviços web. Esta experiência e contacto com contextos práticos específicos permite ainda melhorar as capacidades de análise e reflexão sobre sistemas ou serviços existentes, sendo essencial na obtenção de competências técnicas e de desenvolvimento nesta área.
Bibliografia:
[1] Coulouris G., Dollimore J., Kindberg T., Blair, G. S., Distributed Systems Concepts and Design, 5th Ed., Addison-Wesley 2011.
[2] Tanenbaum, A., Steen, M., Distributed Systems, Principles and Paradigms, Prentice Hall 2002.
[3] Sun Developers Services, URL: http://developer.java.sun.com/developer/ (2009).
[4] Jian, Chen, Java RMI vs .Net Remoting, White Paper, 2003, http://students.cs.tamu.edu/jchen/cpsc689-608/comparison/l0c0607-framework_comp_lichen.pdf (2007).