Tirem uma dúvida básica?
Há muito que aprendi OO e trabalho apenas procedural, agora quero retomar .
Como eu deveria arquitetar algo com:
Pessoa
Animal
Cachorro
Gato
Mulher
Onde existam 3 comportamentos em comum para todos: acordar, passear e dormir?
Possivelmente o jeito mais direto é agrupar os comportamentos comuns em uma classe base que as contém e criar classes derivadas para os os casos específicos.
Quais comportamentos são comuns e quais são específicos (ou seja, requerem uma subclasse), é você quem precisa determinar, de acordo com o caso.
O seu caso abre margem para várias implementações. Por exemplo, pode se argumentar que Pessoa, Cachorro, Gato e Mulher são animais, então Animal poderia ser a classe base da qual Pessoa, Cachorro, Gato e Mulher estendem.
Mulher, dependendo dos requisitos, também pode ser visto como uma classe que estende Pessoa.
Depois de postar, cheguei a fazer algo. Vejam por favor o que acham em relação a tentar fazer algo “mais correto” no sentido de OO. Só achei que eu sobrescrevi muito método.
Interface IComportamento:
com comportamentos acordar, passear e dormir
Classe Animal implementando IComportamento
Classe Pessoa implementando IComportamento
classes cachorro e gato herdando de Animal
classe Main:
Cachorro cachorro = new Cachorro(‘Bob’);
Gato gato = new Gato(‘Gatuxo’);
Pessoa pessoa = new Pessoa(‘João’);
Ola Darlan, gostaria que alguém analisasse como um todo. Essa parte somente de Herança eu conheço, inclusive não segui o conselho de implementar os comportamentos em subclasse porque fugiria do conceito É UM TIPO DE, que deve ser analisado quando se estende algo
Antes de determinar qual a melhor abordagem, você precisa definir qual o objetivo.
O “mais correto” é relativo, e depende do escopo e do problema a ser resolvido. Sem estabelecer um limite, você pode acabar com 20 classes pra modelar um problema que envolveria 4 (ou menos).
Se o que você quer saber se a sua abordagem de criar uma Interface IComportamento é válida, a resposta é sim: você pode modelar o projeto dessa forma se conseguir obter o resultado esperado do programa (que é o que importa no fim das contas).
Se o que você quer saber é se essa abordagem é a melhor sempre, releia o segundo parágrafo dessa resposta. A melhor abordagem depende do problema a ser resolvido.
Se o que você quer saber são quais as vantagens e desvantagens de cada possível abordagem (dentro de um limite de abordagens, é claro), faça o seguinte exercício: monte a hierarquia com 2 ou 3 abordagens diferentes (como a sua e as que foram sugeridas) e compare o que foi mais fácil e mais difícil em cada uma delas. Se uma dá mais trabalho que a outra, analise se o trabalho extra vale a pena, e como ele melhora o programa como um todo.