O problema é o seguinte, eu tenho uma class chamada BasePlanet e essa class tem os atributos necessários para a criação de um planeta mas heis a questão, cada planeta vai poder ter vários atributos por exemplo: Radiação, Respirável, Gravidade etc. Eu queria uma maneira modular e que no futuro nao me traga uma grande confusão. Alguma ideia para eu poder resolver este problema?
*Os atributos precisam de ser obtidos (por nome ou algo do genero) para verificar se o planeta tem X atributo
A herança no seu caso pode se encaixar legal…
class Planeta {
protected boolean respiravel; // padrão false
protected double area; // padrão 0.0
protected double distanciaDoSol; // ou proximidade, etc, padrão 0.0...
// metodos...
}
class Terra extends Planeta {
// atributos de terra...
// metodos de terra...
}
class Marte extends Planeta {
// attrs de marte
// metodos de marte...
}
Ou seja, qualquer atributo/metodo criado em planeta também pertencem aos “extendidos” (classes filhas)…
Recomendo a leitura…
https://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescrita-e-polimorfismo/
É a questão é que eu nao queria tar a repetir código e código ao estar a implementar os meus attrs pra os planetas, estou a pensar em optar por um Entity Component Pattern.
Mas a herança evita justamente repetir código, pelo contŕario, os attrs iguais para todos os planetas ficam na classe mãe (nesse caso Planeta no exemplo), o que for diferente para cada planeta fica apenas nele…
Bom, sinto muito não poder te ajudar, esse padrão Entity Component sinceramente não o conheço, sucesso na implementação!
Primeiramente você não consegue ter classes do mesmo objeto. O que você tem são objetos da mesma classe.
A meu ver, o mais elegante seria você definir interfaces, para as características que seus planetas podem ter.
Assim cada planeta implementa as interfaces que definem suas características.
Para não ter que reescrever código quando houver características iguais para planetas diferentes, é só usar composição.
Isto é, você implementa a característica em uma classe e seu planeta terá um atributo do tipo dessa característica.
Isso também evita o acoplamento forte causado pela herança.
2 curtidas