como implementar to muitos para muitos em java
TRANSCRIPT
Como implementar relacionamento muitos-para-muitos em Java
Um exemplo de relacionamento muitos-para-muitos é aquele que se estabelece entre as classes Livro e Autor: um livro pode ser escrito por um ou muitos autores; um autor pode escrever um ou muitos livros. O diagrama de classes abaixo ilustra a situação:
Para implementar relacionamentos desse tipo, muitos-para-muitos, em Java, …
1. Insira, em ambas as classes, um atributo do tipo coleção (Set, por exemplo);2. Insira os métodos get e set correspondentes ao atributo coleção;3. Insira métodos para adicionar e remover objetos na coleção
O detalhe importante é o seguinte: insira nos métodos adicionar e remover chamadas para os métodos correspondentes da outra classe. Por exemplo: no método adicionarAutor, da classe Livro, chame o método adicionarLivro da classe Autor. Já no método adicionarLivro da classe Autor, chame o método adicionarAutor da classe Livro. Para evitar um loop infinito, teste antes se o objeto já não foi incluído ou removido da coleção.
Vamos aos códigos…
Código da classe Livro
Observe os métodos adicionarAutor e removerAutor. Veja como eles invocam os métodos correspondentes da classe Autor, adicionarLivro e removerLivro, respectivamente.
[source language='java']import java.util.Collections;import java.util.HashSet;import java.util.Iterator;import java.util.Set;
public class Livro {private String titulo;private Set autores;
public Livro() {super();this.autores = new HashSet();}public Livro(String titulo){this.titulo = titulo;this.autores = new HashSet();
}public void setTitulo(String titulo) {this.titulo = titulo;}public String getTitulo() {return titulo;}public void setAutores(Set autores) {Iterator iterator = autores.iterator();while (iterator.hasNext()){Autor autor = (Autor)iterator.next();this.adicionarAutor(autor);}}public Set getAutores() {return Collections.unmodifiableSet(this.autores);}public void adicionarAutor(Autor autor){if (!this.getAutores().contains(autor)){this.autores.add(autor);autor.adicionarLivro(this);}}public void removerAutor(Autor autor){if (!this.getAutores().contains(autor)){this.autores.remove(autor);autor.removerLivro(this);}}}[/source]
Código da classe Autor
Mais uma vez, observe os métodos adicionarLivro e removerLivro. Veja como eles invocam os métodos correspondentes da classe Livro, adicionarAutor e removerAutor, respectivamente.
[source language='java']import java.util.Collections;import java.util.HashSet;import java.util.Iterator;import java.util.Set;
public class Autor {private String nome;private Set livros;
public Autor() {super();this.livros = new HashSet ();}
public Autor(String nome){this.nome = nome;this.livros = new HashSet ();}
public void setNome(String nome) {this.nome = nome;}
public String getNome() {return nome;}
public void setLivros(Set livros) {Iterator iterator = livros.iterator();while (iterator.hasNext()){Livro livro = (Livro)iterator.next();this.adicionarLivro(livro);}}
public Set getLivros() {return Collections.unmodifiableSet(this.livros);}
public void adicionarLivro(Livro livro){if (!this.getLivros().contains(livro)){this.livros.add(livro);livro.adicionarAutor(this);}}public void removerLivro(Livro livro){if (!this.getLivros().contains(livro)){this.livros.remove(livro);livro.removerAutor(this);}}}[/source]
Agora um aplicativo que demostra o uso das classes Livro e Autor:
[source language='java']import java.util.HashSet;import java.util.Iterator;import java.util.Set;
public class AppMuitosParaMuitos {
public static void main(String[] args) {Livro livro01 = new Livro(“Livro 01″);Livro livro02 = new Livro(“Livro 02″);
Set livros = new HashSet();livros.add(livro01);livros.add(livro02);
Autor autor01 = new Autor(“Autor 01″);Autor autor02 = new Autor(“Autor 02″);
autor01.setLivros(livros);autor02.setLivros(livros);
Livro livro03 = new Livro(“Livro 03″);Livro livro04 = new Livro(“Livro 04″);
Autor autor03 = new Autor(“Autor 03″);autor03.adicionarLivro(livro01);autor03.adicionarLivro(livro03);autor03.adicionarLivro(livro04);
System.out.println(“Autores do Livro 02:”);Iterator iterator = livro02.getAutores().iterator();while (iterator.hasNext()){Autor autor = (Autor)iterator.next();System.out.println(autor.getNome());}System.out.println(“==================”);System.out.println(“Livros do Autor 03″);iterator = autor03.getLivros().iterator();while(iterator.hasNext()){Livro livro = (Livro)iterator.next();System.out.println(livro.getTitulo());}}}[/source]
É isso, pessoal.