Percursos
/
Java
Java
/
Exercícios
/
Feiticeiros e guerreiros 2
Feiticeiros e guerreiros 2

Feiticeiros e guerreiros 2

Exercício de aprendizagem

Introdução

Sobrecarga de métodos

Em Java, a sobrecarga de métodos é uma funcionalidade que permite que uma classe tenha mais do que um método com o mesmo nome, desde que as suas listas de parâmetros sejam diferentes. Está relacionada com polimorfismo em tempo de compilação (ou estático). Este conceito é crucial para criar métodos que realizam tarefas semelhantes, mas com parâmetros diferentes.

Porquê sobrecarregar métodos?

A sobrecarga de métodos aumenta a legibilidade do programa. Métodos diferentes podem receber o mesmo nome, mas com parâmetros diferentes. Dependendo do número de parâmetros ou do tipo de parâmetros, é chamado o método correspondente.

Como sobrecarregar métodos?

A chave para a sobrecarga de métodos é a assinatura do método. Dois métodos são considerados diferentes se tiverem assinaturas diferentes. Há duas formas de sobrecarregar um método:

  1. Número diferente de parâmetros: Os métodos podem ter o mesmo nome, mas um número diferente de parâmetros.

    public class Display {
    
        public void show(int x) {
            System.out.println("Show with int: " + x);
        }
    
        public void show(int x, int y) {
            System.out.println("Show with two ints: " + x + ", " + y);
        }
    }
    
  2. Tipos diferentes de parâmetros: Os métodos podem ter o mesmo nome e o mesmo número de parâmetros, mas com tipos diferentes.

    public class Display {
    
        public void show(int x) {
            System.out.println("Show with int: " + x);
        }
    
        public void show(String s) {
            System.out.println("Show with String: " + s);
        }
    }
    

Pontos a reter

  • Os métodos sobrecarregados têm de alterar a lista de argumentos.
  • Os métodos sobrecarregados também podem alterar o tipo de retorno, mas alterar apenas o tipo de retorno não constitui sobrecarga de métodos.
  • Os métodos podem ser sobrecarregados na mesma classe ou numa subclasse.

Neste conceito, vamos explorar vários exemplos e nuances da sobrecarga de métodos em Java.

Instruções

Neste exercício vais jogar um jogo de interpretação de papéis chamado "Wizard and Warriors" com os teus melhores amigos. Tu és o Mestre de Jogo, a pessoa encarregada de dar vida ao mundo do jogo para os jogadores. Um aspeto essencial disto é descrever o jogo aos jogadores: qual é o estado de uma personagem, como é a vila que estão a visitar, etc.

Tens cinco tarefas nas quais descreves partes do jogo aos jogadores.

1. Descreve uma personagem

Cada personagem tem uma classe, um nível e um número de pontos de vida e é descrita como: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points.". Implementa o método GameMaster.describe, que recebe um Character como único parâmetro e devolve a sua descrição.

Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);

new GameMaster().describe(character);
// => "You're a level 4 Wizard with 28 hit points."

2. Descreve um destino

Cada destino tem um nome e um número de habitantes e é descrito como: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants.". Implementa o método GameMaster.describe, que recebe um Destination como único parâmetro e devolve a sua descrição.

Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);

new GameMaster().describe(destination);
// => "You've arrived at Muros, which has 732 inhabitants."

3. Descreve o método de viagem

As personagens podem viajar até um destino de duas formas:

  • A pé, descrita como: "You're traveling to your destination by walking."
  • A cavalo, descrita como: "You're traveling to your destination on horseback."

Implementa o método GameMaster.describe, que recebe um TravelMethod como único parâmetro e devolve a sua descrição.

new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."

4. Descreve uma personagem que viaja até um destino

Quando uma personagem viaja até um destino, isso é descrito como uma combinação das descrições individuais: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>". Implementa o método GameMaster.describe, que recebe um Character, um Destination e um TravelMethod como parâmetros e devolve a sua descrição.

Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);

Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);

new GameMaster().describe(character, destination, TravelMethod.HORSEBACK);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination on horseback. You've arrived at Muros, which has 732 inhabitants."

5. Descreve uma personagem que viaja até um destino sem especificar o método de viagem

Na maioria dos casos, as personagens viajam até um destino a pé. Por conveniência, os jogadores podem omitir o método de viagem, e nesse caso assume-se que a viagem é feita a pé. Implementa o método GameMaster.describe, que recebe um Character e um Destination como parâmetros e devolve a sua descrição.

Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);

Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);

new GameMaster().describe(character, destination);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination by walking. You've arrived at Muros, which has 732 inhabitants."
Editar via GitHub A ligação abre numa nova janela ou separador
Java Exercism

Estás pronto para começar Feiticeiros e guerreiros 2?

Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.