Boa noite pessoal, não sei se o título condiz com o conteúdo, mas vamos lá. Estou desenvolvendo um pequeno programa nada convencional. Trata-se de um programa para administração de um cemitério. kkkk é eu sei mó doido né? Bom, o problema é que durante o desenvolvimento me surgiu uma dúvida e gostaria de tirá-la com vocês. O programa em questão tem tres classes: SepulturaComunitaria (que é a superClasse), SepulturaPerpetua (que é a subClasse e herda alguns atributos da superClasse) e a classe Pessoa (que recebe dentre outros atributos um objeto que pode ser SepulturaComunitaria ou SepulturaPerpetua). A minha dúvida é exatamente ai, qual melhor maneira para montar este construtor de forma que ele consiga distinguir qual tipo de Objeto se trata? Me falaram que dá para aplicar conceitos de polimorfismo, mas sinceramente não estou conseguindo enchergar isso, outros me disseram instance of e por ai vai. Eu usei construtores sobrecarregados como vcs podem ver pelo meu código abaixo. E então o que acham? Abaixo estão partes das classes que estou com dúvida para que vcs analisem blz?
Você já pensou em criar uma interface Sepultura e as classes Comunitária, Perpétua e Pessoa, onde a classe Pessoa tem um construtor que recebe a interface Sepultura… é um bom uso do polimorfismo na minha opinião, além de evitar a herança…
Opa ivan é bem isso que me disseram, mas a minha dúvida é se eu utilizando essa interface, na hora de passar para o construtor da classe Pessoa, ela consegue destinguir qual dos tipos Sepultura esta sendo passado?
Eu já fiz isso, mas acusa erro no construtor, pois ele recebe um tipo SepulturaComunitaria sepultura e na hr de atribuir this.sepulturaPerpetua = sepultura (dentro do if) ele diz que o tipo não é o mesmo. Onde estou errando? Deve ser coisa boba, mas não entendo onde está o erro! Inclusive, já me falaram sobre fazer polimorfismo, mas acho que nao me lembro de alguns conceitos de polimorfirmos por isso estou apanhando para entender como fazer!
Como eu disse anteriormente, eu acho melhor ao invés de criar uma super classe, implemente a classe Sepultura com os métodos em comum as classes que a implementaram…
Fiz as alterações que vc disse. Criei uma classe Sepultura com dois atributos (tumulo e ala), fiz a classe SepulturaComunitária e Perpetua herdar de Sepultura. E na classe Pessoa eu fiz assim:
Sim Ivan, vou testar esta sua ideia! Tipo crio uma interface Sepultura e insiro todas as chamadas dos métodos das classes SepulturaPerpetua e Comunitaria, dai faço a classe Pessoa implementar interface Sepultura né? Mas e o construtor como ficaria? Tipo na hora de passar o objeto SepulturaComunitaria ou Perpetua? Cara me desculpe se a resposta é obvia e eu nao estou entendendo blz?
Pedro do jeito que vc disse compilou normal. Vou fazer alguns testes aqui para ver direito, dai qualquer coisa eu posto o resultado. Inclusive vou testar o polimorfismo do ivan tb para ver qual dos códigos é mais interessante usar para essa aplicação. Obrigado einh, suas dicas me ajudou bem! E vc tb ivan, valeu pela dica. Acho muito interessante antes de começar um projeto, trocar ideia com amigos da área de TI, pois assim conseguimos agregar mais valor aos códigos. Sempre tiro dúvidas no guj, inclusive peço sugestões, são sempre muito bem vindas! Assim que eu tiver uma conclusão aqui eu posto o resulta e fecho o tópico. Se alguem mais tiver sugestões, compartilhem!
Opa ivan olha eu aqui de volta! Gostei do “PROJETO DO MAL” kkkk! Cara, tua idéia parece muito boa, tentei implementá-la, mas não consegui. Me corrija se eu estiver errado, mas classes do tipo interface só contém as assinaturas dos métodos que a implementam não é? Então como ficaria esta classe interface Sepultura? Eu teria que criar um método para fazer essa diferenciação ou se eu apenas fazer com que as classes Perpetua e Comunitaria a implemente, a classe Pessoa automaticamente consegue entender que tipo esta sendo passada para ela? É que eu quero que o construtor da classe Pessoa consiga entender que eu estou encaminhando para ele um objeto que hora pode ser, SepulturaPerpetua, hora pode ser SepulturaComunitária. Desculpe se estou vacilando em alguns conceitos aqui kkk
Boa tarde amigos! Bom, ainda não terminei o projeto intitulado por vocês como “Projeto do mal” kkkk, mas como prometido postarei qual das estratégias acabei implementando em meu programa. Depois de muita pesquisa e testes, inclusive opiniões de amigos, acabei chegando a usar as duas estratégias, ou seja, polimorfismo e instaceof. Implementei a idéia do Ivan, usando polimorfismo porém sem o uso de interface, apenas uma superclasse Sepultura e outra classe SepulturaPerpetua herdando dela, de modo que no construtor da classe Pessoa eu recebo apenas Sepultura. Em um segundo momento, eu uso o instaceof, mas apenas na hora q eu preciso definir qual objeto irei trabalhar, dai eu faço o que o Pedro disse.