Guia Extra: Engenharia de Software e Modelagem UML • Bloco 2: Requisitos e Processos em Modelo • Demonstrações Práticas


🔄 Exemplo 1: Devolver Exemplar com Raias

flowchart TB
    subgraph BIB["Bibliotecária"]
        I(("●")) --> L["Ler código do exemplar"]
        CE["Conferir estado físico"]
    end
    subgraph SGB["SGB"]
        L --> BE["Buscar empréstimo ativo"]
        BE --> D1{"atraso?"}
        D1 -->|"[dias > 0]"| CM["Calcular multa"]
        D1 -->|"[else]"| M1{" "}
        CM --> M1
        M1 --> CE
        CE --> D2{"danificado?"}
        D2 -->|"[sim]"| RP["Marcar em reparo"]
        D2 -->|"[não]"| D3{"há reserva?"}
        D3 -->|"[sim]"| SEP["Marcar separado"]
        D3 -->|"[não]"| DISP["Marcar disponível"]
        SEP --> AV["Enviar sinal: avisar leitor"]
        RP --> FIM(("◉"))
        DISP --> FIM
        AV --> FIM
    end

⏸️ Exemplo 2: Fork e Join no Fechamento do Dia

stateDiagram-v2
    state fork_fech <<fork>>
    state join_fech <<join>>
    [*] --> ApurarEmprestimosDoDia
    ApurarEmprestimosDoDia --> fork_fech
    fork_fech --> EnviarLembretesDeVencimento
    fork_fech --> CalcularMultasDoDia
    fork_fech --> ExpirarReservas
    EnviarLembretesDeVencimento --> join_fech
    CalcularMultasDoDia --> join_fech
    ExpirarReservas --> join_fech
    join_fech --> GerarRelatorioDiario
    GerarRelatorioDiario --> [*]

As três tarefas do meio rodam em paralelo; o relatório só é gerado depois que todas terminarem.


🐍 Exemplo 3: O Fork/Join em Código

# fechamento_do_dia.py
from concurrent.futures import ThreadPoolExecutor

def enviar_lembretes() -> str:
    return "12 lembretes enviados"

def calcular_multas() -> str:
    return "4 multas calculadas"

def expirar_reservas() -> str:
    return "2 reservas expiradas"

print("Apurar empréstimos do dia")
with ThreadPoolExecutor() as pool:                 # fork
    futuros = [pool.submit(f) for f in (enviar_lembretes, calcular_multas, expirar_reservas)]
    resultados = [f.result() for f in futuros]     # join: espera todos
for r in resultados:
    print(" -", r)
print("Gerar relatório diário")

Saída:

Apurar empréstimos do dia
 - 12 lembretes enviados
 - 4 multas calculadas
 - 2 reservas expiradas
Gerar relatório diário