Diagramas e UML 2¶
O que é UML¶
Definição: UML (Unified Modeling Language)
Linguagem de modelagem e documentação de software, criada por Grady Booch, James Rumbaugh e Ivar Jacobson — que, inicialmente, criaram separadamente suas próprias linguagens de modelagem para software orientado a objetos, e depois decidiram unir forças numa linguagem única, a UML. É composta por diversos diagramas com notações gráficas próprias, que ajudam a expressar tanto a estrutura de um software quanto o seu comportamento.
flowchart TD
UML["Diagramas UML"] --> Estrutura["Diagramas de<br/>estrutura"]
UML --> Comportamento["Diagramas de<br/>comportamento"]
Estrutura --> DClasse["D. de classe"]
Estrutura --> DPerfil["D. de perfil"]
Estrutura --> DEstruturasCompostas["D. de estruturas<br/>compostas"]
Estrutura --> DComponentes["D. de<br/>componentes"]
Estrutura --> DImplantacao["D. de<br/>implantação"]
Estrutura --> DObjetos["D. de<br/>objetos"]
Estrutura --> DPacotes["D. de pacotes"]
Comportamento --> DAtividade["D. de<br/>atividade"]
Comportamento --> DCasoDeUso["D. de<br/>caso de uso"]
DAtividade --> DInteracao["D. de<br/>interação"]
DInteracao --> DSequencia["D. de<br/>sequência"]
DInteracao --> DVisaoGeral["D. de visão<br/>geral de interação"]
DInteracao --> DTempo["D. de tempo"]
DInteracao --> DComunicacao["D. de<br/>comunicação"]
Comportamento --> DMaquinaEstados["D. de máquina<br/>de estados"]
Definição: Nem todo diagrama precisa ser usado
A UML possui uma grande quantidade de diagramas — usá-los todos não é viável, nem é essa a proposta. Cada projeto/empresa deve empregar apenas os diagramas que fizerem sentido para seu contexto, ou que consiga manter atualizados. Por definição, todos os diagramas da UML são requisitos de software — alguns também podem ser utilizados como requisito de usuário, quando ajudam o solicitante a compreender certas partes do software.
O mais conhecido — e provavelmente o mais utilizado — é o Diagrama de Caso de Uso, mas outros três diagramas se destacam pelo uso frequente: Classe, Sequência e Estado.
Diagrama de Caso de Uso (DCU)¶
Definição: Diagrama de Caso de Uso (DCU)
Fornece a visão geral das funcionalidades de um software e de quem utiliza cada
uma. Apresenta os nomes das funcionalidades e os atores que interagem com elas
— um ator pode ser um usuário final (pessoa) ou outro software. É possível
representar relações entre funcionalidades e atores, como especializações
(extends) ou reuso (include).
flowchart LR
Usuario["Usuário"] --> Funcionario["Funcionário"]
Usuario --> Cliente
Funcionario -->|Extends| Usuario
Cliente -->|Extends| Usuario
Funcionario --> CadastrarCliente["Cadastrar Cliente"]
Funcionario --> FinalizarAluguel["Finalizar Aluguel"]
Funcionario --> AlugarCarro["Alugar Carro"]
FinalizarAluguel -.->|include| GerarRecibo["Gerar Recibo"]
AlugarCarro -.->|include| SugerirOpcionais["Sugerir Opcionais"]
Cliente --> FornecerComentario["Fornecer Comentário"]
Funcionario --> FornecerFaturamento["Fornecer Faturamento Anual"]
ReceitaFederal["Receita Federal"] --> FornecerFaturamento
Definição: DCU caiu em desuso com as Metodologias Ágeis
Embora ofereça uma visão ampla e geral do software, o Diagrama de Caso de Uso vem caindo em desuso desde a popularização das Metodologias Ágeis — artefatos como Histórias de Usuário tendem a cobrir a mesma necessidade de forma mais leve e incremental.
Diagrama de Classe (DC)¶
Definição: Diagrama de Classe (DC)
Provê a visão estrutural das classes que compõem o software — atributos, métodos e relacionamentos entre elas — além de metainformações como tipos de dados. É a partir dessas classes que os objetos serão criados em tempo de execução, fazendo o software funcionar. As classes representadas podem ser tanto conceitos e entidades quanto os processamentos que o software realiza sobre elas.
classDiagram
class Pessoa {
-nome: String
-dataNascimento: Date
}
class Setor {
-nome: String
}
class Funcionario {
+baterPonto() void
}
Pessoa o--> Setor
Pessoa <|-- Funcionario
Diagrama de Sequência (DS)¶
Definição: Diagrama de Sequência (DS)
Oferece a visão comportamental de determinadas partes do software, mostrando interações entre objetos em execução numa ordem temporal — é a partir dessas interações que se entende como o software de fato funciona passo a passo.
sequenceDiagram
participant Compra
participant Estoque
participant EmissorNota
Compra->>Estoque: baixarEstoque(idProduto)
Estoque-->>Compra: baixa realizada
Compra->>Compra: finalizarCompra()
Compra->>EmissorNota: emitirNota()
EmissorNota-->>Compra: emissão realizada e enviada para a impressora
Diagrama de Estado (DE)¶
Definição: Diagrama de Estado (DE)
Fornece uma visão comportamental representando os diferentes estados ou situações que um determinado objeto, elemento ou conceito pode assumir ao longo do tempo — um conjunto finito de estados e as transições possíveis entre eles. As transições podem ser rotuladas para indicar o que causa a mudança de estado, quando necessário.
stateDiagram-v2
[*] --> VerificandoDados: Usuário e senha fornecidos
VerificandoDados --> SessaoCriada: Dados válidos
VerificandoDados --> SessaoNaoCriada: Dados inválidos
SessaoNaoCriada --> VerificandoDados: Dados inválidos
SessaoCriada --> [*]
Diagramas de banco de dados: MER x Modelo Físico¶
Além dos diagramas da UML, dois outros diagramas auxiliam especificamente na representação do banco de dados de um software — no jargão de bancos de dados, esses diagramas costumam ser chamados de modelos (ver também Modelagem de Dados).
Definição: Modelo de Entidade-Relacionamento (MER) x Modelo Físico de Dados (MFD)
O MER fornece uma visão de como as entidades/conceitos do software —
representados pelas tabelas do banco de dados — se relacionam entre si. É mais
abstrato: mostra só os nomes das entidades e seus relacionamentos (cardinalidade),
sem se preocupar com colunas ou tipos de dados. O MFD dá um passo além: mostra
como as tabelas de fato estão estruturadas para armazenar os dados — nomes de
colunas, tipos, chaves primárias e estrangeiras — seguindo, por convenção, os mesmos
nomes das entidades/conceitos que representam (frequentemente com prefixos
padronizados, como tb_ para tabelas, tx_ para colunas de texto e dt_ para
colunas de data).
erDiagram
FUNCIONARIO }o--|| SETOR : pertence
erDiagram
tb_funcionario {
UniqueID id PK
text tx_nome
date dt_data_nascimento
UniqueID id_setor FK
}
tb_setor {
UniqueID id PK
text tx_nome
}
tb_funcionario }o--|| tb_setor : id_setor
Definição: Por que o MFD pode ter mais tabelas que o DC ou o MER
O mundo orientado a objetos (representado no Diagrama de Classe) é diferente do mundo relacional (representado no MFD) — um relacionamento muitos-para-muitos entre duas classes, por exemplo, não existe diretamente no modelo relacional: ele precisa de uma tabela associativa própria (ver Many to Many) para existir — uma tabela a mais no MFD que não tinha equivalente direto no DC ou no MER.