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:
Top comments (0)