
Conceção e Implementação de Aplicações para a Internet
Código
11554
Unidade Orgânica
Faculdade de Ciências e Tecnologia
Departamento
Departamento de Informática
Créditos
6.0
Professor responsável
João Ricardo Viegas da Costa Seco, Luís Manuel Marques da Costa Caires
Horas semanais
4
Total de horas
58
Língua de ensino
Inglês
Objectivos
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
Pré-requisitos
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.
Conteúdo
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ção de 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
Bibliografia
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 oficial ReactJS
Método de ensino
Esta unidade curricular introduz os diferentes tópicos realçando boas práticas de desenvolvimento, e métodos de especificação e implementação. As metodologias e tecnologias são apresentadas de uma forma integrada para mostrar as especificidades no domínio do desenvolvimento de aplicações para a internet.
As aulas de laboratório são compostas por um crescendo de desafios de programação e de suporte ao desenvolvimento de um projeto. É fornecido código de exemplo para começar o processo de desenvolvimento. O desenvolvimento desse projeto segue técnicas mainstream de desenvolvimento ágil fazendo uso das técnicas mais avançadas de controlo de versões, de desenvolvimento, e ferramentas de automatização de construção de software.
Método de avaliação
A avaliação desta unidade curricular é bipartida:
- A avaliação escrita (valorizada em 50% da nota final) é composta por dois testes. Os testes avaliam a aquisição de conhecimentos em termos dos conceitos fundamentais, dos métodos de desenvolvimento e das boas práticas transmitidas nas aulas teóricas. A componente teórico-prática também pode ser realizada por exame (na época de recurso).
- A componente prática (valorizada em 50% da nota final) consiste no desenvolvimento de um projeto de dimensão média por equipas de 3 elementos, entregue em duas fases. O projeto tem por objetivo o desenvolvimento de uma aplicação para a internet e inclui o desenvolvimento de uma aplicação cliente (single page application) num método centrado no utilizador, e uma aplicação fornecedora de serviços. A avaliação é concluída com um relatório escrito e uma apresentação do projeto.
- Não há nota mínima em nenhuma das componentes, nem a noção de frequência.