DEV Community

Cover image for Modelando as classes da melhor API de tabelas de campeonato que você já viu!
anastacio_dev
anastacio_dev

Posted on

Modelando as classes da melhor API de tabelas de campeonato que você já viu!

Se você já estudou nem que seja um pouco de orientação a objetos, sabe que o coração desse paradigma está em classificar objetos. É como separar todos os objetos da mesa de acordo com os seus atributos e funcionalidades.

Classificar — ou modelar classes — também é como criar uma forma que irá pegar o nosso punhado de dados e transformá-los em objetos, cada um com seus atributos e funcionalidades, repito.

Pra facilitar, vamos ao JSON que geramos no último texto:

{
  "nomeCampeonato": "String",
  "equipes": [
    {
      "id": "Integer",
      "nome": "String",
      "localizacao": "String",
      "grupo": "String",
      "subGrupo": "String"
    },
  ],
  "formatoCampeonato": {
    "divisaoPorGrupos": "Integer",
    "grupos": [
      {
        "id": "Integer",
        "nome": "String",
        "equipes": ["Integer"],

      },
    ],
    "turnosDentroGrupo": "Integer",
    "turnosEntreGrupos": "Integer",
    "sorteioGrupos": "Boolean"
  },
  "calendarioConfig": {
    "tabelaOtimizada": "Boolean",
    "totalJogosPorDia": "Integer",
    "diasDescanso": "Integer"
  }
}
Enter fullscreen mode Exit fullscreen mode

Dando uma olhada, é possível ver que o JSON já classifica, de alguma forma, nossos objetos.

Segundo o que está posto, temos:

  • Uma lista de equipes, o que nos leva um objeto do tipo "equipe";
  • Um configurador de calendário (esse nome é ruim, mas vamos deixar assim, por hora) que ajusta alguns parâmetros do nosso agendamento de jogos, como quantidade de jogos por dia, período de descanso dos times e a opção de otimização de viagens tratada no nosso primeiro texto
  • E dentro de um objeto chamado "formatoCampeonato", temos uma lista de grupos. E grupo contém uma lista de equipes. Antes que você confunda a cabeça, essa lista de listas é algo como uma lista (grupo A, grupo B, etc...) sendo que cada item dessa lista também é uma lista.
Grupo A Grupo B
Palmeiras Bahia
Cruzeiro Fluminense
Cuiabá Grêmio
Paysandu Náutico

Então, por enquanto temos as seguintes classes mapeadas:

  • Equipe: contento nome da equipe, localização, grupo e subgrupo;
  • Grupo: contendo nome do grupo e a lista de equipes que o preenche;
  • Configurador de calendário (nome bem ruim..., que contém os atributos de dias de descanso para cada equipe, quantidade de jogos por dia e se a tabela será otimizada ou não.

Faltou tratar o objeto formatoCampeonato, que contém dados sobre quantidade de turnos, grupos e se haverá um sorteio de chaves por nossa parte.

Mas bem que poderíamos chamar a classe que forma esse objeto de "Campeonato", não? Afinal, são todos esses dados pertencentes a um campeonato.

E também podemos adicionar a classe tabela. Todo campeonato tem uma tabela de jogos, certo? E é justamente por conta dessa tabela que esse projeto existe.

Logo, podemos definir essa classe:

  • Campeonato: contendo informações de quantidade de grupos, quantidade de turnos disputados dentro do grupo e contra times de fora do grupo e a tabela de jogos.

A tabela é mais um daqueles casos de lista de listas. A tabela, em si, é uma lista de rodadas. E a rodada é uma lista de jogos.

E se temos uma tabela de jogos, também temos a classe Jogo, que contém um time mandante, um visitante, um local e uma data.

Vamos definir, então, tabela, lista e jogo:

  • Tabela: lista de rodadas;
  • Rodada: contento lista de jogos, além do número da rodada;
  • Jogo: contendo informações de time mandante, time visitante, local e data.

Juntando tudo, segue abaixo todas as nossas classes, seguidas de seus atributos.

  • Equipe: contendo nome da equipe, localização, grupo e subgrupo;
  • Grupo: contendo nome do grupo e a lista de equipes que o preenche;
  • Calendário (mudei o nome), que contém os atributos de dias de descanso para cada equipe, quantidade de jogos por dia e se a tabela será otimizada ou não.
  • Campeonato: contendo a quantidade de grupos, a lista de grupos, quantidade de turnos disputados dentro do grupo e contra times de fora do grupo e a tabela de jogos.
  • Tabela: lista de rodadas;
  • Rodada: contento lista de jogos, além do número da rodada;
  • Jogo: contendo informações de time mandante, time visitante, local e data.

Abaixo, o diagrama UML representando nossas classes:

Imagem do diagrama UML que representa a aplicação. Perdoem, parece que o dev.to não tem suporte ao padrão Mermaid, então não consegui criar um diagrama acessível.

Nos próximos textos, podemos começar a implementação. Aqui, usaremos Java e Spring.

Prosseguimos.


Leituras complementares:

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay