State
Introdução
O padrão State é um padrão de projeto comportamental que permite que um objeto altere seu comportamento quando seu estado interno muda. O objeto parecerá mudar de classe. O padrão State encapsula diferentes estados em objetos separados e delega o trabalho para esses objetos, em vez de usar instruções condicionais para determinar o comportamento com base no estado atual do objeto.
Isso torna o código mais organizado, flexível e fácil de estender quando novos estados são adicionados ou quando o comportamento de um estado muda.Artefato de especificação do GoF Comportamental de padrão State implementado pelo subgrupo Whiskey.
Metodologia
O subgrupo Whiskey se reuniu para discutir e viualizar os diversos padrões de projeto GoFs Comportamentais, com o objetivo de apresentar um padrão GoF Comportamental, com nível de modelagem e nível de implementação que possam ser utilizados na melhoria da plataforma da Terracap. Nesta reunião, após discutir e analisar os padrões, decidimos modelar e implementar os seguintes padrões:
- State
- Observer
Padrão State
Decidimos modelar e implementar
Modelagem
Fonte: Whiskey, 2024
Implementação
Para a implementação do padrão, foi utilizado a linguagem de programação Python e os arquivos individuais de cada classe estao disponíveis na pasta ./srcState
.
class contextoImovel:
def __init__(self, imovel):
self.imovel = imovel
self.estado = estadoImovel.gera_estado(True, True, True, True)
def muda_estado(self):
self.estado = self.estado.muda_estado()
def get_estado(self):
return self.estado
- A classe contextoImovel possui métodos para mudar e verificar o estado atual do imóvel
class estadoImovel(ABC):
def __init__(self, situacao_iptu, situacao_cartorio, situacao_metragem, situacao_proprietario):
self.situacao_iptu = situacao_iptu
self.situacao_cartorio = situacao_cartorio
self.situacao_metragem = situacao_metragem
self.situacao_proprietario = situacao_proprietario
@classmethod
def gera_estado(cls, situacao_iptu, situacao_cartorio, situacao_metragem, situacao_proprietario):
estado
if(situacao_cartorio == True and situacao_iptu == True and
situacao_metragem == True and situacao_proprietario == True):
estado = estadoRegular(situacao_iptu, situacao_cartorio, situacao_metragem, situacao_proprietario)
else:
estado = estadoIrregular(situacao_iptu, situacao_cartorio, situacao_metragem, situacao_proprietario)
return estado
def muda_estado():
pass
def muda_iptu(self):
if(self.situacao_iptu == False):
self.situacao_iptu = True
else:
self.situacao_iptu = False
def muda_cartorio(self):
if(self.situacao_cartorio == False):
self.situacao_cartorio = True
else:
self.situacao_cartorio = False
def muda_metragem(self):
if(self.situacao_metragem == False):
self.situacao_metragem = True
else:
self.situacao_metragem = False
def muda_proprietario(self):
if(self.situacao_proprietario == False):
self.situacao_proprietario = True
else:
self.situacao_proprietario = False
- A classe estadoImovel é a responsavel por gerar o estado do imóvel com todos os atributos relacionados a ele.
class estadoIrregular(estadoImovel):
def __init__(self, situacao_iptu, situacao_cartorio, situacao_metragem, situacao_proprietario):
super().__init__(situacao_iptu, situacao_cartorio, situacao_metragem, situacao_proprietario)
def regularizacao_venda_direta():
pass
def muda_estado(self):
if(self.situacao_cartorio == True and self.situacao_iptu == True and
self.situacao_metragem == True and self.situacao_proprietario == True):
return estadoImovel.gera_estado(self.situacao_cartorio, self.situacao_iptu, self.situacao_metragem, self.situacao_proprietario)
else:
return self
- A classe estadoIrregular define todos os métodos e atributos de um imóvel irregular.
class estadoRegular(estadoImovel):
def __init__(self, situacao_iptu, situacao_cartorio, situacao_metragem, situacao_proprietario):
super().__init__(situacao_iptu, situacao_cartorio, situacao_metragem, situacao_proprietario)
def declaracao_retrovenda(imovel):
pass
def iniciar_licitacao(imovel):
pass
def declaracao_quitacao_debito(imovel):
pass
def muda_estado(self):
if(self.situacao_cartorio == True and self.situacao_iptu == True and
self.situacao_metragem == True and self.situacao_proprietario == True):
return self
else:
return estadoImovel.gera_estado(self.situacao_cartorio, self.situacao_iptu, self.situacao_metragem, self.situacao_proprietario)
- A classe estadoRegular define todos os métodos e atributos de um imóvel regular.
Bibliografia
Jones Roberto Nuzzi, Design Patterns — Parte 2 — Os Padrões do GOF, 2019, Medium, Disponível em: <https://medium.com/design-pattern-pt/design-patterns-parte-2-os-padroes-do-gof-d7c0a0d5b5e>
PLANTUML. PlantUML. Disponível em: <https://www.plantuml.com/>. Acesso em: 23 jul. 2024.
Histórico de Versão
Versão | Data | Descrição | Autor(es) | Revisor(es) |
---|---|---|---|---|
1.0 |
23/07/2024 | Confecção do artefato | Whiskey | Papa |
1.1 |
24/07/2024 | Adição dos diagramas | Whiskey | Yankee |
1.2 |
24/07/2024 | Revisão | Foxtrot | João Lucas |