Engenharia de Aplicações


Arquitecturas Aplicacionais (Sem. 2)

Objectivos de aprendizagem

a) analisar e conhecer os principais patterns estruturais e de comportamento utilizados para o
desenvolvimento de sistemas de software complexo e de grande escala, tendo em conta as especificidades
arquitecturais das aplicações multi-camada.
b) saber desenvolver camadas computacionais que permitam evolução controlada e independente das
camadas de apresentação e dados e que permitam a disponibilização de serviços como mecanismo de
integração.
c) Identificar as principais características dos servidores aplicacionais por forma a escolher o modelo de
programação pretendido e saber utilizar tecnologia orientada a serviços como mecanismo de criação de
arquitecturas de software parametrizáveis.

Conteúdos programáticos

Definição Arquitectural do Sistema de Software: Patterns estruturais e de comportamento; Aspectos
avançados de programação orientada aos objectos; Arquitecturas orientadas a serviços; Modelos de
programação orientados à construção de componentes reutilizáveis; Manutenção evolutiva de arquitecturas
orientadas aos objectos.
Tecnologias de Programação Multi-Camada: Servidores aplicacionais como contexto aplicacional; Estratégias
de desenvolvimento dos mecanismos de independência multi-camada; Programação concorrente;
Mecanismos de caching e de sessão; Serviços como técnicas de integração multi-aplicação.

Metodologias de ensino e avaliação

- Exposição de conceitos e análise de casos de estudo.
- Trabalho de grupo em exercícios e pequenos estudos de caso, em certos casos com recurso a ferramentas
informáticas específicas.
- Trabalho de projecto em grupo com orientação directa da equipa docente afecta à UC.
O processo de avaliação visa aferir não apenas os conhecimentos e competências mínimas adquiridas, mas
também a capacidade revelada na sua integração e aplicação prática. Assim, a avaliação da Unidade Curricular
tem em conta duas componentes. A primeira é um exame final, contendo perguntas de desenvolvimento e
exercícios envolvendo a resolução de pequenos problemas. A segunda componente consiste no
desenvolvimento de um projecto integrador das matérias, com o fim de avaliar a aplicação do conhecimento à
resolução de problemas reais.
A classificação final será obtida pela média pesada das classificações obtidas nas duas componentes
referidas.

Bibliografia

1. Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph
Johnson, John M. Vlissides, November 1994.
2. MDA Explained: The Model Driven Architecture: Practice and Promise, Anneke Kleppe, Jos Warmer, Wim
Bast, Addison-Wesley Professional, May 2003
3. Java Persistence with Hibernate, Christian Bauer, Gavin King, Manning Publications, 2007
4. Enterprise JavaBeans, 3.0, Bill Burke, Richard Monson-Haefel, O'Reilly, May 2006
5. Artigos científicos relevantes a definir em cada ano lectivo/relevant papers (to be defined on an anual basis).

Administração de Bases de Dados (Sem. 1)

Objectivos de aprendizagem

Reconhecer e explicar os principais desafios de desempenho, fiabilidade e escala na gestão de dados.
Conhecer e descrever os mecanismos disponiveis para o processamento de interrogações e a manutenção de
garantias transacionais.
Planear e executar soluções de gestão de dados, combinando, compondo e configurando os mecanismos
disponíveis.
Estimar a medir o comportamento de sistemas de gestão de dados.

Conteúdos programáticos

Introdução: Anatomia de um sistema de gestão de bases de dados; caraterização de aplicações alvo;
identificação dos principais desafios de desempenho, fiabilidade e escala.
Execução de interrogações: Representação física de dados; operadores relacionais e iteradores; redundância
com indices e vistas; planeamento e optimização de interrogações.
Isolamento e recuperação transacionais: anomalias de concorrência; resolução com locking e multi-versão;
características de desempenho e estratégias de optimização; atomicidade vs durabilidade; métodos de logging
e checkpointing; cópias de segurança.
“Big Data”: replicação e particionamento (“sharding”) em sistemas relacionais/transacionais; sistemas
distribuídos de gestão de dados (NoSQL); modelo de dados, indixação e materialização; execução distribuída
com “map-reduce”.
Estudo de casos: benchmarks OLTP (e.g. TPC-C) e aplicação de análise exploratória de dados; sistemas
PostgreSQL e HBase.

Metodologias de ensino e avaliação

Exposição dos conceitos teóricos e demonstração pelo docente dos mecanismos e sistemas referidos.
Desenvolvimento, análise e otimização progressivos de uma aplicação ("toy benchmark"), em contacto com o
docente e seguindo um guião, que ilustra os principais desafios e soluções.
Projeto em grupo de análise e otimização de uma aplcação de dimensão realista (e.g., um implementação de
um benchmark TPC), realizado autonomamente.
A avaliação inclui duas componentes: exame escrito individual e projeto em grupo.

Bibliografia

H. Garcia-Molina, J. Ullman and J. Widom. Database Systems: The Complete Book. Prentice-Hall, 2006 (2nd
Edition).
J. Gray and A. Reuter. Transaction processing: Concepts and techniques. Morgan-Kaufmann, 1993.
B. Charron-Bost, F. Pedone, A. Schipér (Eds.) Replication: Theory and Practice. Springer, 2010.

Infraestruturas de Centro de Dados (Sem. 1)

Objectivos de aprendizagem

Compreender e explicar os compromissos entre custo, desempenho, e confiabilidade na concepção de
centros de dados e a sua tradução em tecnologias concretas.
Aplicar mecanismos de redundância, virtualização e administração centralizada no desenvolvimento e
operação de centros de dados.
Desenhar, planear e concretizar infraestruturas de armazenamento de dados escaláveis e de elevado
desempenho
Compreender e estabelecer os limites das infraestruturas definindo os thresholds para a sua revisão e
atualização
Ter uma visão global das infraestruturas e capacidade para identificar os pontos críticos das mesmas

Conteúdos programáticos

Infraestrutura de armazenamento de dados: armazenamento em rede; RAID; gestão
de volumes lógicos; sistemas de ficheiros; key-value stores; mecanismos e
políticas de salvaguarda.
Infraestrutura de serviços: serviços redundantes; virtualização de servidores.
Monitorização e gestão centralizada: gestão de parques informáticos; análise
de desempenho; monitorização.
Segurança de infraestruturas e serviços.

Metodologias de ensino e avaliação

A organização da Unidade prevê a exposição nas aulas teóricas dos conteúdos programáticos, que envolverão
também o estudo de problemas de pequena dimensão. A resolução de alguns destes problemas será
efectuada em aulas de carácter laboratorial ou em pequenos projetos.
Nesta unidade existirão vários momentos de avaliação correspondendo aos relatórios das actividades
laboratoriais realizadas e ainda uma avaliação escrita no final da unidade curricular.

Bibliografia

• Load Balancing Servers, Firewalls, and Caches, Chandra Kopparapu, Wiley
• Storage Area Network Essentials, Richard barker, Paul Massiglia, Wiley, 2000
• Blueprints for High Availability, Evan Marcus, Hal Stern Wiley
• LDAP System Administration, Gerald Carter, O'Reilly
• DNS and BIND, Paul Albitz, Cricket Liu, O'Reilly
• LDAP System Administration, Gerald Carter, O'Reilly
• Virtual Private Networks, Charlie Scott, Paul Wolfe, Mike Erwin, O'Reilly
• The Art of Capacity Planning, John Allspaw, O’Rilley

Sistemas Interactivos (Sem. 2)

Objectivos de aprendizagem

• Conceber interfaces com o utilizador com consideração por aspectos de usabilidade
• Saber avaliar as interfaces concebidas recorrendo às técnicas mais apropriadas
• Compreender e explorar diferentes técnicas de desenvolvimento de camadas interactivas
• Saber desenvolver camadas de apresentação que permitam evolução controlada e independente das
camadas de lógica e de dados.

Conteúdos programáticos

• Conceitos de IHC: noções básicas de IHC (definição de usabilidade, modelo de interacção de Norman);
desenvolvimento centrado no utilizador.
• Desenvolvimento de interfaces baseado em modelos: a framework de referência Cameleon; modelação de
domínio, tarefas, interfaces abstratas e interfaces concretas, a linguagem UsiXML; prototipagem de interfaces
(protótipos de baixa e alta fidelidade); independência do dispositivo/adaptação ao dispositivo; padrões de
desenho.
• Tecnologias de desenvolvimento web: tecnologias 'server side' vs. 'cliente side'; desenvolvimento 'server
side' (HTML5, CSS, JSP); desenvolvimento 'client side' (DOM, Javascript); programação de interfaces
síncronas vs. assíncronas (AJAX).
• Avaliação de interfaces: avaliação empírica vs. avaliação analítica; avaliação por inspecção; avaliação
baseada em modelos.

Metodologias de ensino e avaliação

Aulas teóricas para exposição dos conceitos e aulas práticas laboratoriais para consolidação dos
conhecimentos adquiridos, através da realização de mini-projectos. Exame final escrito e trabalho prático
realizado em equipa.

Bibliografia

• Human-Computer Interaction, third edition. Dix et al. (2004), Pearson/Prentice-Hall.
• Designing Interfaces, 2nd edition. Jenifer Tidwell (2011), O'Reilly.
• Professional JavaScript for Web Developers. Zakas (2005), Wrox.
• Artigos e capítulos de livro a seleccionar numa base anual.