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.
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.
- 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.
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).
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.
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.
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.
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.
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
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.
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.
• 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
• 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.
• 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.
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.
• 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.