Olá desenvolvedores, vamos agora entender a importância de adicionar um novo objeto ao sistema. Um objeto que no contexto do nosso sistema receberá as disciplinas e as notas do aluno. Em  “ADICIONANDO NOVOS ATRIBUTOS AO SISTEMA”, salientamos a existência de um caminho que nos conduziria a um código mais performático e dinâmico. Se você ainda não o leu, recomendo fortemente que o faça.

RECAPITULANDO

No referido tutorial, foi dado um importante passo para estudarmos o relacionamento entre objetos e compreendê-lo. Assim, com o objetivo de aprimorar o sistema que estamos construindo juntos daremos continuidade a essa implementação. Entretanto, sob uma nova perspectiva.

Dentro da classe ou do objeto Aluno, adicionamos manualmente informações a respeito da vida acadêmica do aluno – notas e disciplinas.

Resumindo, adicionamos na classe Aluno quatro novos atributos – “disciplina”, cada uma recebendo a sua nota correspondente.

private String disciplina01;

Após a criação dos atributos, foram gerados os métodos setters and getters para cada uma das disciplinas.

Na classe principal solicitamos ao usuário que entrasse com os dados solicitados, inclusive as disciplinas. O passo seguinte foi passar as novas informações para o objeto por referência.

aluno.setDisciplina01(disciplina01);

E por fim, a partir do método toString imprimimos os dados no console. Um processo interessante que cumpre o propósito da realização da tarefa. Mas não passa perto da implementação dinâmica para qual a orientação a objeto foi desenvolvida. Mas estudar este caminho foi importante para a sua compreensão da lógica por trás do processo.

RELACIONANDO OBJETOS

A implementação qual acabamos de exemplificar, embora faça o que foi proposto, não representa os conceitos de orientação a objetos. Entre eles a interrelação entre objetos. E o primeiro passo para esta relação é a criação de um novo objeto/classe para receber a disciplina. Mas por quê?

Ora, um objeto deve ter e somente ter atributos próprios. E nota e disciplinas não são atributos do objeto aluno, embora se relacionem com ele. Mas referem-se a vida acadêmica do aluno. Ah, agora sim, caiu a ficha. Em outras palavras significa que o objeto Aluno somente deve receber e trabalhar com os seus próprios métodos e atributos.

Desse modo, o que temos que fazer é relacionar o aluno ao objeto Disciplina. E sim, é dentro da classe Disciplina que estarão inseridas as notas do aluno. Porque embora se relacionem com o aluno, notas pertencem ao objeto disciplina.

CRIANDO A CLASSE DISCIPLINA

Para criar a classe disciplina proceda da seguinte forma: no pacote de classes, clique com o botão contexto do mouse (botão direito). Na sequência clique em new, Other… e a seguir clique em Class.

Na janela New Java Class, em name, o nome da classe deverá ser Disciplina. Lembrando sempre que nome de classe deve ser iniciado com letra maiúscula.

Pronto criamos a classe “Disciplina”, que receberá as informações que correspondem a vida acadêmica do aluno. Abaixo, veja a estrutura da classe depois de criada.

public class Disciplina{
}

Agora mova da Classe Aluno para a Classe Disciplina os atributos que pertencem a esta classe – notas e disciplinas. Na classe Aluno remova os métodos getters and setters destes dois atributos. Faça isso para que seja possível gerá-los no que agora é a classe de origem deles.

Observe que o Eclipse acusará erro no método que efetua o cálculo da média do aluno, e no método toString. Isso acontece porque movemos as notas para outra Classe. Para resolver este erro, primeiramente na Classe Disciplina gere os métodos getters and setters para todos os atributos da classe. Gere também os métodos hashCode() and equals().

E para relacionar os objetos dentro da Classe Aluno, antes do construtor, vamos chamar o objeto Disciplina.

private Disciplina disciplina =new Disciplina();

Gere os métodos getters and setters também para o objeto disciplina. Basta digitar as palavras get e set respectivamente, pressionar as teclas [CTRL + ESPAÇO] e a IDE já irá sugerir as opções que queremos. Volte ao método que calcula a média das notas e adicione o objeto chamando o método get para “pegar” as notas.

Return (disciplina.getNota01() + disciplina.getNota01() + disciplina.getNota01() + disciplina.getNota01()) / 4;

Observe que agora o Eclipse não irá mais acusar erro no método que calcula as notas. Entretanto, o mesmo ainda não está acontecendo no método principal.

ANALISANDO

Vamos analisar, estamos atribuindo a nota do aluno, a um atributo que estava dentro da Classe aluno. Contudo, nós movemos este atributo para a Classe Disciplina, e depois na Classe Aluno nós o chamamos.

aluno.setNota01(Double.parseDouble(nota01));

Em suma, o que explicamos acima pode ser sintetizado da seguinte forma, dentro de cada Classe Aluno existe o Objeto Disciplina. Dessa forma é dentro deste objeto que por meio do get que é usado para referenciar o objeto Disciplina, é que vamos “setar” a nota do aluno. O mesmo vale para disciplina.

aluno.getDisciplina().setNota01(Double.parseDouble(nota01));
aluno.getDisciplina().setDisciplina01(disciplina01);

Por fim gere o toString para os dois objetos, tanto Aluno quando Disciplina. Execute e o programa irá solicitar os dados normalmente. Obviamente nossa simulação considera dados fictícios e não contempla um cenário real de um aluno do 9º ano.

EM POUCAS PALAVRAS

Estamos cada vez mais inseridos em um contexto de orientação a objetos. Onde a premissa nos diz que um objeto deve realizar funções pertinentes ao próprio objeto e somente a ele.

Ao criarmos a Classe Disciplina, dividimos as responsabilidades atribuindo a cada uma das classes a parte que lhe cabe. Dessa forma aprendemos com relacionar objetos, um conceito fundamental para darmos sequência aos nossos estudos.

Mas ainda é possível fazer mais pelo nosso código, e deixá-lo ainda mais performático. Se ligue nos próximos tutoriais. Espero que tenha gostado! Até mais.