Identificação de APIs e Subsistemas

Desenvolvimento de Sistemas de Software

By Pedro Pereira16-10-2024

Identificação de APIs e Subsistemas

1. Introdução aos Componentes e Subsistemas

  • Um componente é uma unidade de software reutilizável, bem encapsulada e substituível.
  • Subsistemas agrupam componentes relacionados para criar módulos funcionais maiores.
  • Diagrama de Componentes:
    • Representa a estrutura de alto nível do sistema, descrevendo componentes, dependências e interfaces entre eles.
    • Níveis de representação: código-fonte, binários (e.g., bibliotecas), executáveis.

2. Arquitetura em Três Camadas

  • Padrão arquitetural com separação clara de responsabilidades:
    1. Interface de Utilizador (User Interface): Apresenta a aplicação ao utilizador.
    2. Lógica de Negócio (Business Logic): Contém regras e operações do domínio.
    3. Camada de Dados (Data Layer): Lida com persistência e acesso a dados.
  • Cada camada interage por meio de interfaces, promovendo desacoplamento e substituição fácil de componentes.

3. Interfaces

  • Definição:
    • Abstrações que especificam as operações visíveis externamente de um componente ou subsistema.
    • Separam a implementação dos detalhes de interação, permitindo que clientes dependam apenas da interface.
  • Tipos de Interfaces:
    • Fornecidas: Serviços que o componente oferece.
    • Requeridas: Serviços que o componente necessita.
  • Notação UML:
    • Estereótipo «interface» ou a representação "lollipop".
  • Exemplo:
    • Interface IOculistaLN define métodos como:
      +getCliente(nome: String, datan: Data): Cliente
      +getArmação(cArm: Codigo): Armação
      +registaReserva(codcli: String, cArm: Codigo, cLenD: Codigo, cLenE: Codigo)
      

4. Identificação de Responsabilidades e Subsistemas

  1. Responsabilidades:
    • Guiadas pelos casos de uso, descrevem o que cada subsistema deve cumprir.
    • Exemplo: OculistaLN deve realizar operações como "procurar cliente" e "registar reserva".
  2. Divisão em Subsistemas:
    • Subdivisão da lógica de negócios em áreas específicas.
    • Exemplo: SubSistemaClientes, SubSistemaProdutos, SubSistemaReservas.

5. Desenvolvimento Iterativo e Incremental

  • O sistema é construído em versões, permitindo feedback contínuo e refinamento.
  • Passos típicos:
    1. Análise: Modelagem do domínio e identificação de casos de uso.
    2. Divisão em Componentes: Identificação das dependências e desenho das interfaces.
    3. Construção Incremental: Implementação de cada componente com base nas suas responsabilidades.

6. Diagramas de Componentes - Notação e Relações

  • Estereótipos Comuns:
    • «component»: Componente genérico.
    • «subsystem»: Subsistema hierárquico.
    • «service»: Componente funcional sem estado.
  • Relações:
    • Realização: Um componente implementa uma ou mais interfaces.
    • Dependência: Um componente usa uma interface, mas não depende da implementação.

7. Casos de Uso como Guia para APIs

  • Exemplo: Reservar Armação e Lentes
    • Fluxo normal:
      1. Funcionário indica dados do cliente.
      2. Sistema procura e apresenta detalhes do cliente.
      3. Funcionário confirma o cliente e escolhe produtos.
      4. Sistema regista a reserva e imprime um talão.
    • Fluxos alternativos e de exceção são mapeados para métodos e validações adicionais nas APIs.

8. Boas Práticas de Design

  • Regras Simples (Extreme Programming):
    1. Passar todos os testes.
    2. Expressar intenções claramente.
    3. Eliminar duplicações desnecessárias.
    4. Minimizar o número de classes e métodos.
  • Vantagens da Abstração por Interfaces:
    • Desacoplamento entre camadas.
    • Facilidade de substituição e evolução dos componentes.

Apresentação de conteúdos concisos.