A maioria das aplicações para a Internet, quer web quer aplicações móveis, dependem de recursos fornecidos por serviços em linha, que podem ou não estar cientes dos seus clientes. Estes clientes vão desde simples páginas web, páginas web reativas e colaborativas, aplicações móveis nativas, a outros fornecedores de serviços que orquestram outros serviços para fornecer um resultado composto. Estes desafios são específicos das aplicações para a Internet e devem ser atacados usando métodos, ferramentas, e técnicas próprias.
Esta unidade curricular trata dos princípios e conceitos do desenvolvimento de aplicações para a Internet. O programa segue uma abordagem baseada nos fundamentos do desenvolvimento de padrões arquiteturais web e baseados em serviços, mecanismos de modularidade avançados, abstrações para camadas de persistência de dados, boas práticas de desenvolvimento, preocupações de desempenho, e técnicas de validação. As aulas teóricas da unidade curricular são acompanhadas por uma série de trabalhos práticos e um projeto final focados na utilização de frameworks, linguagens, e ferramentas de programação adequadas para as aplicações para a Internet, que asseguram a segurança e a correspondência das soluções com especificações.
Saber
1. Aspetos fundamentais dos padrões arquiteturais e arquiteturas de software para aplicações para a Internet
2. Princípios do desenvolvimento de progressive web applications
3. Métodos de especificação e implementação de web services e orquestrações de web services
4. Estrutura interna de um browser como cliente para aplicações para a Internet
5. Princípios do desenvolvimento de aplicações centradas nos dados e aplicações centradas no utilizador
6. Mecanismos de abstração utilizados em aplicações para a Internet
7. Principais ameaças à performance das aplicações para a Internet e como as evitar
8. Mecanismos de especificação e implementação de políticas de segurança em Aplicações para a Internet
Fazer
9. Utilização de frameworks para implementar arquiteturas e estilos arquiteturais
10. Especificar e construir aplicações para a Internet e para a Nuvem
11. Especificar e construir aplicações cliente com comportamentos rico e reativo
12. Implementar mecanismos de autenticação e especificação de regras de segurança nucleares
13. Especificar e usar de forma eficiente os níveis de abstração de dados como os providenciados por frameworks de Object Relational Mapping
Programa
Arquiteturas de Software para Aplicações para a Internet.Padrões arquiteturais de inversão de controlo. Arquiteturas simples e compostas para apresentação controlo e abstração. Software como serviço (SaaS). Arquiteturas Web e baseadas em serviços. Aplicações de página única, plugins e mash-ups de dados. O browser como uma máquina virtual.
Especificaçãode webservices e aplicações baseadas em serviços. Aplicações centrada nos dados (baseada em recursos). Aplicações centradas nos utilizadores (baseada em operações) e no fluxo de interação (IFML). Modelação de processos (e.g. BPMN). Orquestração de serviços (e.g. BPEL).
Abstrações de controlo e de dados para aplicações web e baseadas em serviços.REST (baseada em recursos) e SOAP (baseada em operações). Object Relational Mappings (ActiveRecord, Hibernate). Modelos de abstração de dados Relacional e NoSQL. Linguagens de manipulação de dados (e.g., LINQ, XQuery, linguagens NoSQL). Modelos de programação reativa (e.g. Atmosphere, BaconJS, AngularJS, MeteorJS), Linguagens unificadas para aplicações para a Internet (e.g., GWT, Go, Node.JS). Validação de software baseada em arquiteturas de objetos.
Desempenho, escalabilidade e monitorização de aplicações. Ameaças ao desempenho em ORMs. Balanceamento de carga. Filas de espera. Cache. Pesquisa e indexação. Logging e monitorização.
Segurança de aplicações para a Internet.Modelos de controlo de acessos (RBAC e suas extensões). Autenticação por terceiros. Ataques mais comuns (SQL Injection, XSS-scripting attacks).
Plano de Aulas
1. Introdução. Arquiteturas de Software. Frameworks de desenvolvimento.
2. Tecnologias Cliente (HTML, CSS, JS)
3. Bibliotecas, Frameworks, Linguagens e dialetos (from JQuery to TS)
4. Especificação e implementação de aplicações cliente. (IFML+REACT)
5. De IFML para React: um exemplo desde user stories até código
6. React, Flux e Redux: Gestão de Estado
7. Arquiteturas baseadas em serviços (REST)
8. Arquiteturas de software para aplicações do lado do servidor (MVC)
9. Abstração de Dados
10. Abstração de Dados (Cont.)
11. Segurança (Autenticação, Controlo de Acessos)
12. Desempenho e Escalabilidade
13. Frameworks de programação reativa
Brambilla, M., & Fraternali, P. (2015).Interaction Flow Modeling Language.Interaction Flow Modeling Language. http://doi.org/10.1016/B978-0-12-800108-0.00010-2
Fowler, M. (2002).Patterns of Enterprise Application Architecture.Source(Vol. 48). http://doi.org/10.1119/1.1969597
Abbott, M. L., & Fisher, M. T. (2009).The Art of Scalability: Scalable Web Architecture, Processes, and Organizations for the Modern Enterprise.
Scarioni, C., Deinum, M., Rubio, D., Josh, L., Mak, G., Wheeler, W., … Penchikala, S. (2011).Spring IN Action 3rd.North. http://doi.org/10.1007/978-1-4302-3346-6
Tutoriais e guias do site oficial Spring.io
Tutoriais e guias do site oficialReactJS
Os estudantes devem ser programadores proficientes, ter conhecimentos de Engenharia de Software, desenho de bases de dados relacionais e sistemas distribuídos.
O projeto desenvolvido nesta unidade curricular é nesta altura baseada numa stack de tecnologias baseada em Kotlin, Spring, Hibernate e MySQL no caso do servidor, e React e TypeScript no desenvolvimento das aplicações cliente. O desenvolvimento faz também uso de ferramentas de desenvolvimento para controlo de versões (git), gestão de projeto (maven), e desenvolvimento integrado (Eclipse ou InteliJ), browsers e debuggers.
Horas por crédito | 28 | ||
Horas p/ semana | Semanas | Horas | |
Aulas práticas e laboratoriais | 28.0 | ||
Aulas teóricas | 28.0 | ||
Avaliação | 4.0 | ||
Estudo | 25.0 | ||
Orientação tutorial | 2.0 | ||
Projectos e trabalhos | 75.0 | ||
Total de Horas | 162 | ||
ECTS | 6.0 |