Exercício: Encapsulamento com as classes Mapa e Jogo

Objetivo

Implementar o encapsulamento nas classes Mapa, Treinador, e Jogo para controlar o acesso aos atributos e permitir que os métodos façam as operações de forma segura.

Descrição

Neste exercício você irá criar duas novas classes Mapa e Jogo. Além disso, será necessário modificar a classe Treinador. As classes devem obedecer à seguinte especificação (membros sublinhados são static):


classDiagram
    class Mapa {
        - char[][] layout
        - final int largura
        - final int altura
        + Mapa(int largura, int altura)
        - inicializarMapa()
        + exibirMapa(int x, int y)
        + posicaoValida(int x, int y) boolean
    }

    class Treinador {
        - int MAX_POKEMONS$
        - String nome
        - int x
        - int y
        - Pokemon[] pokemons
        + Treinador(String nome)
        + getNome() String
        + getX() int
        + getY() int
        + setPosicao(int x, int y)
		+ mover(String direcao)
		+ listar()
		+ adicionarPokemon(Pokemon p) boolean

    }

    class Jogo {
        - int LARGURA_MAPA$
        - int ALTURA_MAPA$
        - Mapa mapa
        - Treinador treinador
        + Jogo(String nomeTreinador)
        + iniciar()
    }
    
    class Pokemon {
        - String nome
        - int nivel
        + Pokemon(String nome)
        + getNome() String
        + getNivel() int
    }

    %% Relações
    Jogo "1" --> "1" Mapa : usa
    Jogo "1" --> "1" Treinador : controla
    Treinador "1" --> "0..6" Pokemon: treina

Mapa:

  • Atributo:
    • layout (matriz bidimensional) deve ser privado.
  • Métodos:
    • O método construtor deve ser utilizado para determinar a dimensão do mapa
    • Crie um método public chamado exibirMapa que mostre o mapa no console, destacando a posição do treinador.
    • Como parâmetro, o método deve receber a posição do treinador
      • Este método deve ser usado pela classe Jogo para definir onde o treinador está, mas o layout em si deve ser inacessível.
    • Crie o método posicaoValida que será responsável por determinar se dada posição (x, y) é uma posição válida no mapa.

Treinador:

  • Atributos:
    • Todos os atributos (nome, x, y, pokemons) devem ser privados.
  • Métodos:
    • Crie métodos getNome, getX, getY para obter o valor desses atributos.
    • Crie o método setPosicao para que a posição do treinador seja atualizada

Jogo:

  • Essa classe controla a interação entre Mapa e Treinador.
  • Use os métodos de Mapa e Treinador para atualizar a posição do treinador e exibir o mapa
  • A classe Jogo deve ser a responsável por realizar a leitura dos dados enviados via entrada

Constantes:

  • Não utilize números mágicos. Valores fixos, como o número máximo de pokemons de um treinador (6), as dimensões do mapa e os caracteres usados para desenhá-lo, devem ser declarados como constantes private static final.

This site uses Just the Docs, a documentation theme for Jekyll.