Relembre de novo que um tipo de dados não primitivo define:
A classe Math
do pacote java.lang
e a nossa classe UtilidadesIP
onde fomos “guardando” os métodos úteis que fomos criando ao longo deste curso, são dois exemplos de classes que não definem tipos de dados.
Não faz sentido falar de objetos do tipo Math
ou do tipo UtilidadesIP
static
– métodos cujo alvo de invocação é a classe propriamente dita e não uma dada instância dessa classe;
Por outro lado, as classes String
e StringBuilder
do pacote java.lang
e as classes Random
e Scanner
do pacote java.util
são exemplos de tipos de dados não primitivos
nos nossos programas podemos criar instâncias diversas dessas classes e
atuar sobre cada um desses objetos através de métodos de instância (não static
) cujos resultados/efeitos normalmente dependem
Tal como os autores da biblioteca do Java criaram uma série de classes que definem tipos de dados, também nós podemos criar novos tipos de dados para representarmos a informação que queremos manipular nos nossos programas.
Classes que definem alunos, turmas, escolas, leilões, participantes em leilões, equipas de futebol, apostadores, jogos, jogadores, planetas, e muitas outras mais, dependendo dos dados que queremos manipular nos nossos programas.
Suponha que quer fazer um programa que trata informação sobre jogadores e jogos envolvendo jogadores que vão fazendo jogadas, acumulando pontos ao longo do jogo.
Suponha que a informação relevante acerca de um jogador é o seu nome, os pontos já acumulados e o número de pontos máximo ganho numa só jogada.
Uma abordagem pouco esperta seria criar três arrays com a informação sobre os vários jogadores participantes num jogo – um array de strings para guardar os nomes, um array de int que guardaria as pontuações dos vários jogadores e, finalmente, um outro array de int para guardar o máximo de cada um numa só jogada.
O problema com esta abordagem é que a informação de um dado jogador ficaria “espalhada” pelos três arrays. Uma mesma posição p em cada um dos três arrays teria que corresponder a informações acerca de um mesmo jogador, ou seja, se ordenássemos um dos arrays teríamos que ordenar também os outros para manter esta correspondência; se inseríssemos um novo jogador entre outros dois jogadores, teríamos que o fazer exatamente na mesma posição nos três arrays; se apagássemos um jogador teríamos que apagar exatamente a mesma posição dos três arrays. Este tipo de ações são geradoras de erros e, por isso, indesejáveis.
Vamos então ver qual a abordagem adequada para criar novos tipos de dados.
Anterior: 9.7. Arrays multi-dimensionais
Seguinte: 10.1. O tipo de dados Jogador