Visão Lógica
Introdução
A visão lógica exibe a estrutura do sistema e como os componentes do sistema interagem entre si.
Ela mostra COMO as funcionalidades do sistema são projetadas e promovidas.
Os principais modelos que podem ser utilizados são:
- Para análise de estrutura estática
- Diagrama de classes
- Diagrama de objetos
- Para análise de comportamento dinâmico
- Diagrama de máquina de estados
- Diagrama de atividades
Deve ser entenda por:
- Designers
- Desenvolvedores
ℹ️ Nota
- Percebe que estou mencionando o uso de um diagrama de atividades aqui? Ele não foi utilizado na visão de casos de uso? Sim, ele foi utilizado na visão de casos de uso, mas ele também pode ser utilizado na visão lógica. Porém, ele será utilizado de uma forma diferente.
- Na visão de casos de uso, ele foi utilizado para mostrar o fluxo de eventos de um caso de uso.
- Na visão lógica, ele será utilizado para mostrar o fluxo de eventos de uma operação ou método de uma classe.
- Portanto, ele será utilizado de uma forma diferente e com um propósito diferente, agora, na visão do desenvolvedor! E isso é o que você irá aprender aqui. Isso é muito legal! 😎
Entendeu agora por que fazemos análise baseada em visões?
Você pode estar se perguntando:
- Possuo documentos de requisitos ou um backlog de requisitos, e agora?
- Fiz a pouco as especificações na visão de casos de uso, por onde devo começar?
Conseguimos extrair casos de usos e suas especificações através dos requisitos funcionais. Agora vamos extrair as classes, naturalmente, através das especificações de casos de usos.
Como extrair as classes de uma especificação de caso de uso?
Vamos utilizar, para fins práticos, a especificação de casos de uso do RF001 definida anteriormente. Para isto, tente colocá-lo em outra janela do seu navegador para fins de acompanhamento das explicações abaixo. Coloque as duas janelas lado a lado.
A heurística para identificação de classes é a seguinte:
- Descrição de requisitos
- Extrair substantivos
- Tentativa de classes
- Eliminar classes estranhas
- Classes identificadas
Para extrair as classes de uma especificação de caso de uso, vamos seguir as seguintes etapas:
Descrição de requisitos e extração de substantivos
Vamos identificar os substantivos da especificação UC1 - Manter Produto, pois são candidatos aos nomes de classes e atributos.
- Vamos nos ater somente ao fluxo principal, os fluxos alternativos e as regras de negócio da UC1.
-
Realizando a análise da UC1, verificamos os seguintes substantivos:
Substantivo Tipo cliente produto nome do produto data de compra data de vencimento da garantia segmento de produto marca modelo local de compra valor pago do produto valor da garantia modo de compra - Perceba que após a análise do caso de uso, não encontramos mais nenhum nome, mas somente ações. Em um passo posterior, iremos reler novamente o caso de uso a fim de buscar essas ações, pois elas podem ser candidatas a métodos de classes.
- Lembre-se que estamos realizando a análise de um único caso de uso. Para um sistema real, você deverá analisar todos os casos de uso.
- Ao analisar todos os casos de usos, não se deve repetir atributos que já estão na lista acima.
Tentativa de classes e eliminação de classes estranhas
Agora iremos, a partir da lista acima, analisar quais são as classes e atributos do projeto.
- Criamos uma nova lista, ou vamos modificar a mesma lista, e iremos classificar os substantivos em classes, atributos e descartados.
- cliente: é uma entidade, portanto, é uma classe, pois através dele eu poderei realizar ações, como por exemplo, cadastrar, alterar, excluir e consultar clientes. Já temos nossa primeira classe.
- produto: é uma entidade, portanto, é uma classe, seguindo o mesmo raciocínio anterior.
- nome do produto: é um atributo, pois é uma característica do produto. O mesmo podemos observar, na sequência, para data de compra, data de vencimento da garantia.
- segmento de produto é considerado um atributo de produto, pois é uma característica do produto. Porém, podemos também considerar que é uma classe, pois podemos realizar ações como cadastrar, alterar, excluir e consultar segmentos de produtos. Sabemos que o segmento de produto irá se relacionar com a classe produto, portanto, podemos considerar também que é uma classe. O mesmo raciocínio podemos aplicar para marca e modelo.
- local de compra é um atributo, pois é uma característica do produto. O mesmo podemos observar, na sequência, para valor pago do produto e valor da garantia.
- modo de compra é especificado com opções: online e físico. Portanto, podemos considerar que é um atributo, pois é uma característica do produto. Porém, podemos também considerar que é uma classe, pois podemos realizar ações como cadastrar, alterar, excluir e consultar modos de compras. Sabemos que o modo de compra irá se relacionar com a classe produto, portanto, podemos considerar também que é uma classe.
-
A nova lista ficará assim:
Substantivo Tipo cliente classe produto classe nome do produto atributo de Produto data de compra atributo de Produto data de vencimento da garantia atributo de Produto segmento de produto classe marca classe modelo classe local de compra atributo de Produto valor pago do produto atributo de Produto valor da garantia atributo de Produto modo de compra classe - Você pode perguntar: “onde estão os atributos das classes Cliente, Segmento de Produto, Marca, Modelo e Modo de Compra?”. Lembre-se que não realizamos ainda a análise dos outros casos de usos neste exercício prático. Com certeza, a medida que fossemos avançando, iríamos encontrar mais classes e mais atributos para estas classes.
- Não temos nenhum substantivo descartado, pois todos os substantivos foram classificados.
Classes identificadas
Aqui desenhe as classes utilizando uma ferramenta CASE UML de sua preferência.
- Nesta primeira fase, ao termos identificados as classes e seus atributos, vamos desenhar o diagrama de classes.
-
A primeira versão do diagrama de classes está ficando assim:
ℹ️ Nota
Os tipos dos atributos devem ser definidos pelo analista de acordo com seu entendimento sobre o domínio do problema, conforme a linguagem de programação que será utilizada e a arquitetura adotada do sistema, se existir. Caso não exista, deverá definir um padrão arquitetural.
- Vamos realizar as análises dos outros casos de usos.
-
Ao fim, poderemos ir adicionando os atributos para cada classe. O analista poderá, na ausência de um atributo, adicionar aqueles que fazem sentido. Por exemplo:
- A classe Cliente poderá ter os atributos nome, email, telefone e endereço.
- As classes Segmento de Produto, Marca, Modelo e Modo de Compra poderão ter, em cada um, os atributos nome e descrição.
- Desta forma, o diagrama irá evoluir como mostrado abaixo:
Como identificar os métodos de uma classe?
Nesta próxima etapa, precisamos identificar o comportamento através da:
- leitura da especificação dos casos de uso;
- extração de verbos simples ou compostos;
- eliminação de redundâncias, generalidade, vaguidade e comportamentos que representam instâncias de classes, bem como aqueles desnecessários;
- disposição dos comportamentos extraídos nas classes identificadas
Lista de identificação de operações ou métodos
Para isto, iremos criar outra lista para identificação de operações ou métodos:
-
Em RF001, verificamos que o verbo empregado é “manter produto”, o que abrange o cadastro, alteração, exclusão e consulta de produtos. Portanto, podemos considerar que é uma operação de mais alto nível de abstração da classe Produto. Assim temos:
- manter produto
- cadastrar produto
- alterar produto
- excluir produto
- buscar produto
- manter produto
-
Em UC1 - Cadastrar Produto, temos os seguintes verbos:
- preencher os campos com os dados dos produtos;
- cadastrar o produto;
- verificar se o produto foi cadastrado com sucesso;
- exibir mensagem informando que o produto foi cadastrado com sucesso;
- selecionar listagem de produtos;
- exibir lista de produtos;
- verificar se o produto está na lista.
- buscar produtos na lista;
- selecionar campo específico para busca;
- selecionar buscar;
- exibir lista de produtos encontrados;
- selecionar produtos da lista;
- editar dados do produto;
- exibir detalhes do produto selecionado;
- salvar dados alterados do produto;
- excluir produto;
- confirmar exclusão do produto;
- verificar se o produto foi excluído com sucesso;
- validar salvamento dos dados do produto.
-
Esta lista ficará inicialmente assim:
Verbos Tipo Operação preencher os campos com os dados dos produtos cadastrar o produto verificar se o produto foi cadastrado com sucesso exibir mensagem informando que o produto foi cadastrado com sucesso selecionar listagem de produtos exibir lista de produtos verificar se o produto está na lista buscar produtos na lista selecionar campo específico para busca selecionar buscar exibir lista de produtos encontrados selecionar produtos da lista editar dados do produto exibir detalhes do produto selecionado salvar dados alterados do produto excluir produto confirmar exclusão do produto verificar se o produto foi excluído com sucesso validar salvamento dos dados do produto -
Vamos alterar a lista acima a fim de realizar a identificação das operações que fazem sentido para cada classe, determinando o tipo de cada operação como *descartar, operação, desnecessário, redundante etc. Depois dê um nome à operação. A lista ficará assim:
Verbos Tipo Operação preencher os campos com os dados dos produtos descartar cadastrar o produto operação de Produto incluir_produto verificar se o produto foi cadastrado com sucesso operação de Produto validar_produto exibir mensagem informando que o produto foi cadastrado com sucesso operação de Produto exibir_mensagem selecionar listagem de produtos desnecessário exibir lista de produtos operação de Produto listar_produto verificar se o produto está na lista operação de Produto buscar_produto buscar produtos na lista operação de Produto buscar_produto selecionar campo específico para busca desnecessário selecionar buscar descartar exibir lista de produtos encontrados redundante selecionar produtos da lista descartar editar dados do produto operação de Produto alterar_produto exibir detalhes do produto selecionado operação de Produto exibir_produto salvar dados alterados do produto descartar excluir produto operação de Produto excluir_produto confirmar exclusão do produto redundante verificar se o produto foi excluído com sucesso redundante validar salvamento dos dados do produto redundante
Determinação de operações ou métodos
- As operações ou métodos identificados são:
- Produto
- alterar_produto
- buscar_produto
- excluir_produto
- exibir_produto
- incluir_produto
- listar_produto
- validar_produto
- exibir_mensagem
- Agora iremos incluir esses métodos na classe Produto. Sobre as outras classes, podemos decidir incluir métodos comuns de uma arquitetura CRUD.
- Os tipos de operações ou métodos e dos seus parâmetros devem ser definidos pelo analista de acordo com seu entendimento sobre o domínio do problema, conforme a linguagem de programação que será utilizada e a arquitetura adotada do sistema, se existir. Caso não exista, deverá definir um padrão arquitetural.
- Irá ficar assim:
Criado em Janeiro de 2020 por Maxwell Anderson