Solução - Criando a classe Banco (Parte 2)

This commit is contained in:
Luiz Otávio
2022-12-02 09:24:38 -03:00
parent c32d02430e
commit bfaf90e83a
2 changed files with 92 additions and 2 deletions

71
aula158/banco.py Normal file
View File

@@ -0,0 +1,71 @@
import contas
import pessoas
class Banco:
def __init__(
self,
agencias: list[int] | None = None,
clientes: list[pessoas.Pessoa] | None = None,
contas: list[contas.Conta] | None = None,
):
self.agencias = agencias or []
self.clientes = clientes or []
self.contas = contas or []
def _checa_agencia(self, conta):
if conta.agencia in self.agencias:
print('_checa_agencia', True)
return True
print('_checa_agencia', False)
return False
def _checa_cliente(self, cliente):
if cliente in self.clientes:
print('_checa_cliente', True)
return True
print('_checa_cliente', False)
return False
def _checa_conta(self, conta):
if conta in self.contas:
print('_checa_conta', True)
return True
print('_checa_conta', False)
return False
def _checa_se_conta_e_do_cliente(self, cliente, conta):
if conta is cliente.conta:
print('_checa_se_conta_e_do_cliente', True)
return True
print('_checa_se_conta_e_do_cliente', False)
return False
def autenticar(self, cliente: pessoas.Pessoa, conta: contas.Conta):
return self._checa_agencia(conta) and \
self._checa_cliente(cliente) and \
self._checa_conta(conta) and \
self._checa_se_conta_e_do_cliente(cliente, conta)
def __repr__(self):
class_name = type(self).__name__
attrs = f'({self.agencias!r}, {self.clientes!r}, {self.contas!r})'
return f'{class_name}{attrs}'
if __name__ == '__main__':
c1 = pessoas.Cliente('Luiz', 30)
cc1 = contas.ContaCorrente(111, 222, 0, 0)
c1.conta = cc1
c2 = pessoas.Cliente('Maria', 18)
cp1 = contas.ContaPoupanca(112, 223, 100)
c2.conta = cp1
banco = Banco()
banco.clientes.extend([c1, c2])
banco.contas.extend([cc1, cp1])
banco.agencias.extend([111, 222])
if banco.autenticar(c1, cc1):
cc1.depositar(10)
c1.conta.depositar(100)
print(c1.conta)

View File

@@ -28,10 +28,29 @@ Criar classes ContaPoupanca e ContaCorrente que herdam de Conta
polimorfismo - as subclasses que implementam o método sacar) polimorfismo - as subclasses que implementam o método sacar)
Criar classe Banco para AGREGAR classes de clientes e de contas (Agregação) Criar classe Banco para AGREGAR classes de clientes e de contas (Agregação)
Banco será responsável autenticar o cliente e as contas da seguinte maneira: Banco será responsável autenticar o cliente e as contas da seguinte maneira:
Banco tem contas e clentes (Agregação) Banco tem contas e clientes (Agregação)
* Checar se a agência é daquele banco * Checar se a agência é daquele banco
* Checar se o cliente é daquele banco * Checar se o cliente é daquele banco
* Checar se a conta é daquele banco * Checar se a conta é daquele banco
Só será possível sacar se passar na autenticação do banco (descrita acima) Só será possível sacar se passar na autenticação do banco (descrita acima)
Banco autentica por um método. Banco autentica por um método (autenticar).
""" """
import contas
import pessoas
from banco import Banco
c1 = pessoas.Cliente('Luiz', 30)
cc1 = contas.ContaCorrente(111, 222, 0, 0)
c1.conta = cc1
c2 = pessoas.Cliente('Maria', 18)
cp1 = contas.ContaPoupanca(112, 223, 100)
c2.conta = cp1
banco = Banco()
banco.clientes.extend([c1, c2])
banco.contas.extend([cc1, cp1])
banco.agencias.extend([111, 222])
if banco.autenticar(c1, cc1):
cc1.depositar(10)
c1.conta.depositar(100)
print(c1.conta)