Em Classes e Objetos em Java, foi apresentado o conceito de MÉTODO, ou seja, comportamentos que as classes de um sistema podem ter.
É por meio dos métodos que as classes, ou melhor, os objetos das classes de um sistema orientado a objetos vão se comunicar quando o sistema estiver em execução.
Por isto, os métodos também podem ser chamados de mensagens, operações e até mesmo interfaces, pois são eles que viabilizam a troca de informações entre as instâncias das classes.
Além disso, em Classes e Objetos em Java, também foi apresentado o conceito de ATRIBUTO, ou seja, características que as classes de um sistema podem ter. Vimos que os atributos possuem tipos, que podem ser tipos primitivos ou tipos não-primitivos como as classes conceituais.
Ao definir um atributo de um tipo de uma classe conceitual, define-se uma referência aquela classe, possibilitando o uso de seus atributos e métodos pela referência ao atributo, ou seja, permitindo a comunicação entre as classes.
Outras formas de referenciar uma classe conceitual são pela definição do tipo de retorno de um método e pelo tipo de um parâmetro de um método, por exemplo.
Exemplo de referência a uma classe pela definição do tipo de atributo. Fonte: Autoral, feito com Canva para Educação.
A forma mais básica de comunicação entre objetos é a partir da criação de instâncias.
Ao criar um novo objeto em Java, utilizamos a instrução new NomeDaClasse(), esta instrução é um método oculto que toda classe possui que permite a criação de objetos da classe a partir das definições da mesma.
Tal método é chamado Método Construtor (estudaremos mais sobre ele) e por default toda classe possui um.
Nos exemplos anteriores (Bola, Pessoa, Triângulo), observamos a criação de instâncias de classes conceituais somente a partir do uso da instrução new NomeDaClasse() na classe principal executável. Porém, esta não é uma regra.
O exemplo a seguir ilustra a criação de classes conceituais apenas a partir da classe principal em um sistema de um "Jogo da #".
Entretanto, é possível criar instâncias de classes conceituais a partir de quaisquer classes do sistema, conforme as possibilidades ilustradas nos exemplos 2 e 3 (outras ordenações além dos 3 exemplos citados também são possíveis).
Tudo irá depender dos objetivos do sistema e de como desejamos representar o processo de abstração do mesmo.
A troca de mensagens ou de informações entre objetos, nada mais é do que a chamada de um método de uma classe por uma instância de outra classe.
No exemplo anterior da classe Triângulo, observamos a chamada do método calcularArea() da classe Triangulo a partir da classe principal. Assim, estes objetos se comunicaram, ou seja, trocaram informações.
No exemplo do "Jogo da #", assumindo que a classe Tabuleiro possua o método marcarPosicao(int x, int y, Jogador jogador), a chamada deste método, ou seja, a comunicação entre as classes, vai variar de acordo com cada exemplo:
Exemplo 1: Principal chama o método marcarPosicao(int x, int y, Jogador jogador) de Tabuleiro
Exemplo 2: Principal cria Partida e passa as informações dos Jogador(es) e, então, Partida chama o método marcarPosicao(int x, int y, Jogador jogador) de Tabuleiro
Exemplo 3: Principal cria Partida e, então, Partida chama o método marcarPosicao(int x, int y, Jogador jogador) de Tabuleiro
Os métodos e a comunicação entre objetos irá influenciar diretamente em propriedades dos sistemas orientados a objetos, tais como a Coesão e o Acoplamento (estudadas em aulas futuras).