Skip to content

Latest commit

 

History

History
90 lines (75 loc) · 2.36 KB

46.md

File metadata and controls

90 lines (75 loc) · 2.36 KB

Pergunta

46 - Considera a seguinte classe:

public abstract class GameItem
{
    public readonly string name;
    public readonly string description;

    public GameItem(string name, string description)
    {
        this.name = name;
        this.description = description;
    }
}

Responde às seguintes questões:

  1. Implementa a classe Sword que estende GameItem, tendo adicionalmente como estado os campos length, typeOfMetal e condition. O primeiro pode ser representado com um número real, e os outros têm um tipo próprio, TypeOfMetal e WeaponCondition, respetivamente. O construtor de Sword aceita 5 parâmetros, que são usados para inicializar todos os campos da classe. No entanto, os campos herdados de GameItem devem ser inicializados pelo respetivo construtor.
  2. Cria as enumerações TypeOfMetal e WeaponCondition com valores à tua escolha mas de modo a que façam sentido no contexto do problema.
  3. Dá um exemplo em código de como podemos criar uma instância de Sword.
  4. Normalmente as variáveis de instância têm visibilidade privada de modo a não comprometer a encapsulação. No entanto não é esse o caso no código apresentado. Porque razão a quebra de encapsulação não é tão grave neste caso?
  5. Podemos instanciar diretamente GameItem? Porquê?

Soluções

Solução 1

public class Sword : GameItem
{
    public readonly int length;
    public readonly TypeOfMetal typeOfMetal;
    public readonly WeaponCondition weaponCondition;

    public Sword (string sn, string sd, int l, TypeOfMetal type,
        WeaponCondition wc) : base (sn, sd)
    {
        length = l;
        typeOfMetal = type;
        weaponCondition = wc;
    }
}
public enum WeaponCondition
{
    Good,
    Bad,
    Broken
}

public enum TypeOfMetal
{
    Steel,
    Iron,
    Bronze,
    Silver
}
Sword sword = new Sword("Cool Sword", "it's a cool sword", 3,
    TypeOfMetal.Silver, WeaponCondition.Good);
  1. A quebra de encapsulação não é tão grave no código apresentado porque as duas variáveis pertencentes à classe GameItem (name e description) e as três variáveis de Sword (length, typeOfMetal e weaponCondition) são só de leitura.

  2. Não, porque GameItem é uma classe abstrata.

Por Inácio Amerio.