Acho que seria bom acrescentar que, para que o vetor funcione com qualquer tamanho, tive que acrescentar o método garanteEspaco() no método adiciona(int posicao, Aluno aluno) e uma condição de parada no método remove para que a cópia dos valores parasse no último elemento, quando o vetor estiver cheio.
public void remove(int posicao) {
if(!posicaoOcupada(posicao))
throw new IllegalArgumentException("Posição Inválida");
else {
for(int i=posicao; i<this.totalDeAlunos; i++) {
----------------->if(i+1<alunos.length-1)
this.alunos[i]=this.alunos[i+1];
}
this.alunos[totalDeAlunos-1]=null;
totalDeAlunos--;
}
}