Faculdade de Ciências e Tecnologia

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.

Cursos