Estou lendo um livro de UML que aborda os relacionamentos de classes citados no título desse tópico, gostaria de pedir a correção da implementação e entendimento dos conceitos. Ahh só pra confirmar, a composição do Java (tem um) não é a mesma da UML não né? (Todo parte)
Associação: Na associação um objeto contém uma referência a outro objeto. A forma mais comum de implementar a associação é ter um objeto como atributo de outro.
Composição: É um relacionamento conhecido como todo/parte. O relacionamento tem esse nome porque conceitualmente um objeto(todo) contém outros objetos(partes). Na composição o objeto todo é responsável pela criação e destruição de suas partes.
Nesse diagrama eu fiquei na dúvida de como implementar a multiplicidade de ter pelo menos uma edição em uma revista e de ter de 6 a 10 artigos por edição. Como eu faria essa implementação?
Diagrama: https://imgur.com/a/6HLbF
public class RevistaCientifica {
private String titulo;
private long issn;
private String peridiocidade;
private ArrayList<Edicao> edicoes;
public RevistaCientifica(String titulo, long issn, String peridiocidade) {
super();
this.titulo = titulo;
this.issn = issn;
this.peridiocidade = peridiocidade;
}
public void adicionaEdicao(int numero, int volume, String dataEdicao, int tiragem) {
// Método responsável por criar os objetos parte
this.edicoes.add(new Edicao(numero, volume, dataEdicao, tiragem));
}
}
public class Edicao {
private int numero;
private int volume;
private String dataEdicao;
private int tiragem;
private ArrayList<Artigo> artigos;
public Edicao(int numero, int volume, String dataEdicao, int tiragem) {
super();
this.numero = numero;
this.volume = volume;
this.dataEdicao = dataEdicao;
this.tiragem = tiragem;
}
public void adicionaArtigo(String titulo) {
// Método responsável por criar os objetos parte
this.artigos.add(new Artigo(titulo));
}
}
public class Artigo {
private String titulo;
public Artigo(String titulo) {
super();
this.titulo = titulo;
}
}
Agregação: Para agregar muitas instâncias, a forma mais simples é utilizar arrays. Na agregação diferentemente da composição, o objeto todo recebe as instâncias do objeto parte já prontas, ou seja, ele não é o responsável por sua criação ou destruição. Assim as instâncias dos objetos parte são criadas fora da classe todo e agregadas por meio de um método de agregação.
Diagrama: https://imgur.com/a/HmIe8
public class Pessoa {
private String nome;
private String endereco;
private String CEP;
private String telefone;
private double renda;
private ArrayList<ContaComum> contas;
public Pessoa(String nome, String endereco, String cEP, String telefone, double renda) {
this.nome = nome;
this.endereco = endereco;
CEP = cEP;
this.telefone = telefone;
this.renda = renda;
}
// Já passo a instancia pronta
public void adiciona(ContaComum contaComum) {
this.contas.add(contaComum);
}
public class ContaComum {
private long numero;
private String dataAbertura;
private String dataEncerramento;
private int situacao;
private int senha;
private double saldo;
public ContaComum(long numero, String dataAbertura, String dataEncerramento, int situacao, int senha,
double saldo) {
super();
this.numero = numero;
this.dataAbertura = dataAbertura;
this.dataEncerramento = dataEncerramento;
this.situacao = situacao;
this.senha = senha;
this.saldo = saldo;
}
}