Cara, seus métodos estão recebendo os parâmetros errados.
Olhando o UML que você postou, o método cadastra recebe um parâmetro chamado mat do tipo Matricula.
Acho que a interpretação do UML esteja errada.
Veja:
+ cadastra(mat: Matricula) : void
O sinal de mais (+) representa o modificador de acesso público (public). Se fosse privado seria sinal de menos (-).
A palavra cadastra é o nome do método.
(mat: Matricula) dentro dos parênteses você tem seus parâmetros, mas nesse caso você tem apenas um. O nome dele é mat e o tipo é Matricula.
: void por fim, chega o retorno do método, que no seu caso é void.
Ou seja, dado um UML com a seguinte representação: - add(p: Pessoa): boolean significa:
- O método é privado;
- O nome do método é
add;
- O método tem apenas um parâmetro chamado
p do tipo Pessoa;
- O método retorna
boolean;
A implementação do corpo do método cadastra está errada.
O exercício fala para você receber um objeto do tipo Matricula.
Fala para você gerar um código a partir de outro método e atribuir ao objeto Matricula
Colocar no vetor.
public void cadastra(Matricula mat) {
mat.setCodigo(gerarCodigoSequencial());
for(int i = 0; i < matricula.length; i++) {
if(matricula[i] == null) {
matricula[i] = mat;
return;
}
}
}
Nesse exemplo recebemos um objeto do tipo Matricula e setamos seu código (não sei como você está chamado aí, eu chamei de setCodigo) a partir do método que gera o código e colocamos esse objeto na primeira posição do array/vetor que é nula. Após incluir usamos o return para sair do método (seu array pode ter mais de uma posição nula, se não sairmos do método ele vai inserir mais vezes).
Apenas como sugestão, converse com quem fez esse exercício e comente sobre o array matricula[] pois por convenção / clean code, nós chamos coleções, arrays ou listas no plural. Ou seja, o “mais correto” seria o array se chamar matriculas[] e não matricula[].
Abs.