Construção de Sistemas de Software
Ano Letivo: 2015/16
Departamento: Informática
Carga horária: T: 2:00 h; TP: 1:30 h; OT: 2:00 h;
Área Científica: Informática;
Objetivos da Unidade Curricular
Pretende-se que o aluno adquira competências no desenho e implementação de sistemas em grande escala através da aplicação de padrões, que traduzem as boas práticas de arquitetura e desenho destes sistemas, e que lhes forneçam competências no desenvolvimento e testes de sistemas concorrentes, distribuídos, construídos a partir de componentes locais ou distribuídas pela Web, e que utilizem servidores aplicacionais e de base de dados. O foco da disciplina vai integralmente para as construção de software do ponto de vista da Engenharia de Software centrando-se no desenvolvimento alto-nível de aplicações onde, claro, se instanciam os conhecimentos aprendidos nas disciplinas que focam nos detalhes de funcionamento e implementação a baixo-nível.
Pré-requisitos
- Sistemas de Informação e Bases de Dados (26726)
- Desenvolvimento Centrado em Objetos (26727)
- Sistemas Distribuídos (26730)
Conteúdos
Arquitetura e Desenho de sistemas em grande escala; persistência de objetos em sistemas relacionais; apresentação via Web; concorrência e distribuição; componentes de software; padrões de refatorização; testes.
Descrição detalhada dos conteúdos programáticos
Componente Teórica
1 - Arquitetura e Desenho de Sistemas em Grande Escala: (a) Divisão em camadas; as três camadas principais: apresentação, domínio e serviços técnicos; camadas adicionais (controlador aplicacional, interação com a camada de serviços transversais à camada de negócio, serviços técnicos/infraestrutura de baixo nível); (b) Organização da lógica do domínio (padrões: transaction script, table module e domain model); (c) Mapeamento nível lógico – nível físico (deployment of componentes): (i) Servidores, grupos de servidores (clusters), replicação; etc.
2 - Persistência do Modelo de Objetos: (a) Padrões de desenho que abstraiam a forma como os objetos são persistidos (relational-oriented mapping, document-oriented mapping, etc.) criando uma base de dados O-O virtual: (i) Padrões arquiteturais (data mapper); (ii) Padrões comportamentais (exemplo: lazy loading); (iii) Padrões estruturais (exemplo: mapeamento de dependências (1 - *, * - 1, etc.); (iii) Metadados.
3 - Mediação UI – Domínio: (a) Gestão separada dos pedidos da camada de apresentação; (b) Interação com a camada do domínio através de sessões (com estado); (c) gestão de workflows.
4 - Padrões para Concorrência e Distribuição: (a) Recursos transacionais; ações típicas sobre estes recursos; (b) Técnicas para controle de concorrência (e.g., optimista, pessimista); (c) Concorrência online e offline; (d) Mecanismos de concorrência disponíveis no Java 7: fork/join, task, algoritmos de job stealing; (e) Exemplo de padrões – unit of work; remote observer; data transfer object; padrões oferecidos pelo EJB versão 3.
5 - Componentes de Software: (a) Construção de sistemas a partir de módulos; (b) Modelo JEE.
6 - Padrões de refatorização: (a) Alguns padrões de refatorização mais comummente aplicados, apoiados pelo uso de um IDE que os implemente.
7 - Testes de software: (a) Conceitos e uso de ferramentas para fazer testes unitários e de módulos.
Componente Teórica-Prática
Estuda e aplica as APIs específicas do JEE, em particular, JDBC, JPA, JTA, Servler, JSP, EJB e JMS à contrução de uma aplicação exemplo.
Bibliografia
Recomendada
- Martin Fowler. Patterns of Entreprise Applications Architecture. Addison-Wesley. 2003.
- Inderjeet Singh, Beth Stearns, Mark Johnson, and the Enterprise Team. Designing Enterprise Applications. Addison-Wesley. 2002.
- Frank Buschmann, Kevlin Henney, Douglas C. Schmidt. Patterns-Oriented Software Archictecture. John Wiley & Sons, Ltd. 2007.
- Martin Fowler. Refactoring. Addison-Wesley. 1999.
Outros elementos de estudo
- Oracle, Java EE tutorial, 2014.
- Vincent Massol with Ted Husted, JUnit in Action, Manning Publications, Co., Secound edition, 2003.
Métodos de Ensino
Os conteúdos programáticos são apresentados nas aulas teóricas apelando à capacidade crítica e à discussão dos alunos e são postos em prática em aulas de sala de aula (papel e lápis) onde são propostos e resolvidos exercícios. A consolidação da matéria é conseguida através de dois projetos que exercitam o grosso da matéria leccionada num contexto que envolve trabalho em equipa para desenvolver uma aplicação em maior escala do que os exemplos abordados nas aulas teóricas e teórico-práticas.
Métodos de Avaliação
Exame, projeto e avaliação continua.
Língua de ensino
Português