1
resposta

Ajuda no entendimento de composição, agregação e associação.

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;
    }

}
1 resposta

Para você controlar o número de objetos nas suas listas, não vai ter jeito. Você precisa colocar um if, contar o número já inserido e, caso estoure o número, informar a quem chamou o método que um problema aconteceu. Você pode lançar um exception, definir um tipo de retorno etc.