dev-resources.site
for different kinds of informations.
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"
}
}
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:
Nos próximos textos, podemos começar a implementação. Aqui, usaremos Java e Spring.
Prosseguimos.
Leituras complementares:
Featured ones: