es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo cambiar el tipo de objeto cuando el hijo hereda del mismo padre pero tiene métodos y propiedades diferentes?

En la universidad me asignaron una tarea para hacer. Tengo un programa simple como el siguiente. Tengo una clase padre que representa a una persona y algunos hijos que heredan de ella y representan un rol (Arquero, Caballero, Mago).
Debo implementar la funcionalidad para cambiar fácilmente el tipo de objeto, de Arquero a Caballero y viceversa.
Al principio pensé en crear una interfaz grande con todos los métodos únicos, pero eso rompe la regla SOLID, y no puedo romper esta regla.
¿Alguien podría ayudarme a resolverlo?

Así se ve el código:

public abstract class Person
{
    public String Name;

    public char Age;

    void describe()
    {
        // algún código
    }
}

Clase de Rol:

public class Archer : Person
{
    public int agility;

    public void describe()
    {
        // algún código
    }

    public void fightUsingBow()
    {
        // algún código
    }
}

Siguiente rol:

class Wizzard : Person
{
    public int mana;

    public void describe()
    {
        // algún código
    }

    public void castASpell()
    {
        // algún código
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para implementar la funcionalidad de cambio fácil de tipos de objetos, se puede utilizar el concepto de polimorfismo en la programación orientada a objetos. Esto significa que cada objeto puede ser tratado como una instancia de su clase padre, lo que permite cambiar fácilmente entre diferentes tipos de objetos.

    Una forma de lograr esto es creando una clase de fábrica que cree instancias de las clases hijas requeridas basándose en la entrada del usuario u otra lógica. De esta manera, el código se mantiene flexible y no viola los principios SOLID.

    Otro enfoque es utilizar interfaces para definir comportamientos y propiedades comunes que cada rol debe tener, y luego hacer que cada clase implemente la interfaz. De esta manera, el cambio entre tipos de objetos se puede lograr utilizando el mismo conjunto común de métodos proporcionados por la interfaz.

    Por ejemplo, se podría definir una interfaz simple llamada ICombatant con métodos como Ataque() y Defensa(). Cada clase hija, como Archer, Knight y Wizard, que hereda de la clase Person, debería implementar esta interfaz. Luego, el cambio entre tipos de objetos se puede lograr simplemente haciendo un casting del objeto a la interfaz ICombatant, de la siguiente manera:

    Person archer = new Archer();
    ICombatant combatant = (ICombatant)archer;
    

    En general, la clave para implementar la funcionalidad de cambio fácil de tipos de objetos es diseñar cuidadosamente la arquitectura del código, utilizando los principios SOLID y patrones de diseño como el polimorfismo y las fábricas.

Comments are closed.