Agregação
A agregação Java indica um relacionamento especial entre as classes. Esse tipo de relacionamento é conhecido como relacionamento HAS-A . É uma rua de mão única.
Pense em um pincel e um cabo. Um pincel com cabo HAS-A. Você pode ter um cabo sem pincel – pode ser uma chave de fenda, uma espátula ou outra ferramenta. Mas é muito difícil pintar se o seu pincel não tiver cabo!
Antes de nos aprofundarmos no código, vamos revisar os pontos-chave da agregação usando nosso pincel e analogia de manuseio.
- Um pincel HAS-A alça
- Um identificador pode ser criado e existir por conta própria (sem um pincel). Podemos criar a alça e depois anexar ao pincel ou a outra ferramenta.
- Um pincel precisa ter um cabo.
Exemplos de código
Vamos dar uma olhada nas classes PaintBrush e Handle em Java. Não se preocupe em saber todos os detalhes essenciais do código, pois trabalharemos com as partes importantes.
A seguir está uma configuração básica para a classe Handle.
public class Handle {
public String toString () {
return "Wooden Handle"
}
}
A seguir, construiremos a classe PaintBrush. Lembre-se de que o PaintBrush TEM-A Handle; para fazer isso funcionar no código Java, precisamos trazer o identificador da classe Handle. Para fazer isso, criamos um novo identificador DENTRO da classe PaintBrush:
public class PaintBrush {
long bristleCount = 500
Handle handle;
}
Observe que, dentro da classe PaintBrush, criamos uma variável de instância que é especial – na verdade, é um tipo de Handle. Isso diz ao Java para criar uma nova variável dentro da classe PaintBrush; a variável é na verdade uma variável Handle. Em outras palavras, configuramos o relacionamento HAS-A em Java. PaintBrush agora TEM-A Handle. Para facilitar o acompanhamento, nomeamos o identificador da variável.
Agora vamos adicionar mais carne ao nosso código e terminar a agregação entre as classes PaintBrush e Handle. Cobriremos cada aula separadamente.
A classe Handle
As ferramentas podem ter um identificador, portanto, construiremos a classe Handle para que possa ser reutilizada.
A classe PaintBrush
Neste exemplo, mantivemos a classe PaintBrush bastante simples. A única variável local é a contagem de cerdas. Para usar a classe Handle e anexar um identificador a essa classe, precisamos nos certificar de que construímos essa classe corretamente.
O construtor PaintBrush não usa apenas a contagem de cerdas, mas também o objeto Handle. Existe uma função, showInfo, que exibe os valores. Chamaremos essa função a partir do método principal do programa.
public class PaintBrush {
long bristleCount = 500
Handle handle;
PaintBrush (contagem longa, identificador de controle) {
this.bristleCount = contagem;
this.handle = handle;
// o construtor / blueprint configura a classe para relacionar o Handle
}
public void showInfo () {
System.out.println ("Handle is" + handle.getHandleType ());
}
}
A classe principal
Aqui, temos que realmente criar uma nova instância de cada classe: Criamos as classes PaintBrush e Handle, mas agora precisamos usá-las.
A instância da classe Handle parece bastante direta, pois leva um argumento, que é o tipo de identificador. Neste caso, criamos um identificador de madeira.
Quando criamos a instância da classe PaintBrush, no entanto, observe que as coisas parecem um pouco diferentes. O PaintBrush faz uma contagem de cerdas, então enviamos 500. No entanto, um PaintBrush HAS-A alça, então temos que nos certificar de incluir também a nova instância de alça quando criamos o pincel!
O Handle pode se sair bem sozinho se não fizermos isso, mas nossa classe PaintBrush realmente não pode existir sem ele!
public static void main (String [] args) {
Handle handle = new Handle ("Wood");
Pincel PaintBrush = novo PaintBrush (500, cabo);
brush.showInfo ();
}
Quando este código for executado, a saída terá a seguinte aparência:
Resumo da lição
A agregação em Java refere-se a um relacionamento HAS-A. Um empregado TEM-A endereço. É uma rua de mão única: um caminhão tem um motor, embora um motor não precise de um caminhão. A agregação é uma ferramenta poderosa em Java porque permite reutilizar o código; em nosso exemplo, poderíamos usar peças da classe Handle para outras classes (por exemplo, Scraper). Quando vinculamos nossas classes, podemos criar uma variável de instância , que é uma variável local em uma classe que inclui o nome da classe que estamos relacionando. Então, quando criamos a nova instância de uma classe PaintBrush, fomos capazes de criá-la usando a instância da classe Handle. Portanto, o PaintBrush depende do identificador, mas não vice-versa.