Skip to content

Latest commit

 

History

History
73 lines (59 loc) · 1.84 KB

37.md

File metadata and controls

73 lines (59 loc) · 1.84 KB

Pergunta

37 - Considera a seguinte classe:

public abstract class NPC
{
    public float HP { get; protected set; }

    public NPC(float hp)
    {
        HP = hp;
    }

    public void PlayTurn()
    {
        if (FindEnemies())
        {
            AttackEnemies();
        }
        if (FindFood())
        {
            EatFood();
        }
        Move();
    }

    protected abstract bool FindFood();
    protected abstract bool FindEnemies();
    protected abstract void EatFood();
    protected abstract void AttackEnemies();

    protected virtual void Move()
    {
        Console.WriteLine(this.GetType() + " has moved!");
    }
}

Responde às seguintes questões:

  1. É possível instanciar esta classe? Porquê?
  2. É possível estender esta classe? Porquê?
  3. Que métodos desta classe podem ser sobrepostos (overridden)? Porquê?
  4. Que métodos desta classe não podem ser sobrepostos (overridden)? Porquê?

Este exercício continua no problema 8 de UML e design de classes.

Soluções

Solução 1

  1. Não é possível instanciar a classe NPC pois é uma classe abstrata, apenas uma subclasse não-abstrata desta poderá ser instanciada.
  2. É possível estender esta classe, pois a mesma não possui a keyword sealed.
  3. Estes métodos da classe podem ser sobrepostos, devido a possuírem uma das duas keywords abstract ou virtual:
    1. FindFood();
    2. FindEnemies();
    3. EatFood();
    4. AttackEnemies();
    5. Move().
  4. Estes métodos da classe não podem ser sobrepostos pois nenhum deles possui uma das duas keywords abstract ou virtual:
    1. PlayTurn().

Nota: Código de teste para este exercício encontra-se neste repositório.

Por Pedro Inácio.