Coletânea Python do ZERO às Redes Neurais Artificiais
Associação de Classes
Associação de classes, ou entre classes, é uma prática bastante comum uma vez que nossos programas dependendo sua complexidade não se restringem a poucas funções básicas, dependendo do que o programa oferece ao usuário uma grande variedade de funções internas são executadas ou ao menos estão à disposição do usuário para que sejam executadas.
Internamente estas funções podem se comunicar e até mesmo trabalhar em conjunto, assim como independentes elas não dependem uma da outra.
Raciocine que esta prática é muito utilizada pois quando se está compondo o código de um determinado programa é natural criar uma função para o mesmo e, depois de testada e pronta, esta pode ser modularizada, ou ser separada em um pacote, etc... de forma que aquela estrutura de código, embora parte do programa, independente para que se faça a manutenção da mesma assim como novas implementações de recursos.
É normal, dependendo da complexidade do programa, que cada “parte” de código seja na estrutura dos arquivos individualizada de forma que o arquivo que guarda a mesma quando corrompido, apenas em último caso faça com que o programa pare de funcionar.
Se você já explorou as pastas dos arquivos que compõe qualquer programa deve ter se deparado com milhares de arquivos dependendo o programa.
A manutenção dos mesmos se dá diretamente sobre os arquivos que apresentam algum problema.
Partindo para a prática, note que em primeiro lugar criamos nossa classe Usuario, a mesma possui um método construtor que recebe um nome (com variável homônima declarada como privada), em seguida precisamos realizar a criação de um getter e setter para que possamos instanciar os referentes métodos de fora dessa classe.
Basicamente, pondo em prática tudo o que já vimos até então, esta seria a forma adequada de permitir acesso aos métodos de classe de Usuario, quando as mesmas forem privadas ou protegidas.
Na sequência criamos uma nova classe de nome Identificador que aqui, apenas como exemplo, seria o gatilho para um sistema de autenticação de usuário em um determinado sistema.
Logo, a mesma também possui um método construtor que recebe um número para identificação do usuário, novamente, é criado um getter e um setter para tornar o núcleo desse código instanciável.
Por fim, é criado um objeto no corpo de nosso código de nome usuario1 que instancia a classe Usuario, lhe passando como atributo ‘Fernando’.
O mesmo é feito para o objeto identificador1, que instancia a classe Identificador passando como parâmetro ‘0001’. Agora vem a parte onde estaremos de fato associando essas classes e fazendo as mesmas trabalhar em conjunto.
Para isso por meio de usuário.logar = identificador associamos 0001 a Fernando, e supondo que essa é a validação necessária para esse sistema de identificação (ou pelo menos uma das etapas).
Por meio da função usuario1.logar.logar( ) o retorno é: Logando no sistema...
Raciocine que este exemplo básico é apenas para entender a lógica de associação, obviamente um sistema de autenticação iria exigir mais dados como senha, etc... assim como confrontar esses dados com um banco de dados...
Também é importante salientar que quanto mais associações houver em nosso código, de forma geral mais eficiente é a execução do mesmo ao invés de blocos e mais blocos de códigos independentes e repetidos para cada situação, porém, quanto mais robusto for o código, maior também será a suscetibilidade a erro, sendo assim, é interessante testar o código a cada bloco criado para verificar se não há nenhum erro de lógica ou sintaxe.