Conceção e Implementação de Aplicações para a Internet (2019/2020) - Departamento de Informática
Descrição

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.

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

Programa

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

Bibliografia Principal

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

Requisitos Prévios

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.

Esforço do Aluno
  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