diff --git a/aula158/banco.py b/aula158/banco.py new file mode 100644 index 0000000..e93c040 --- /dev/null +++ b/aula158/banco.py @@ -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) diff --git a/aula158/main.py b/aula158/main.py index 416f928..7bc086a 100644 --- a/aula158/main.py +++ b/aula158/main.py @@ -28,10 +28,29 @@ Criar classes ContaPoupanca e ContaCorrente que herdam de Conta polimorfismo - as subclasses que implementam o método sacar) 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 tem contas e clentes (Agregação) + Banco tem contas e clientes (Agregação) * Checar se a agência é daquele banco * Checar se o cliente é daquele banco * Checar se a conta é daquele banco 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)