Em POO (Programação Orientada Objetos) é comum utilizarmos um objeto para executar um comportamento específico dentro de outro objeto, ou até mesmo compor agregando mais informações. Isso ocorre quando há relacionamento os objetos dentro de uma sistema que se comunicam entre si.
Podemos definir relação entre objetos em três tipos: associação, agregação e composição. Abaixo falarei mais sobre eles.
Associação
Para identificar a relação de associação entre dois objetos basta entender se entre eles não existe dependência, ou seja, se são independentes.
Por exemplo, Aluno e Curso, um Aluno pode ter vários Cursos e consequentemente um Curso pode conter vários Alunos. Veja, o Aluno pode existir sem um Curso assim como Curso pode existir sem Aluno. Um relacionamento de muitos para muitos.
class Aluno() {
val cursos: MutableList<Curso> = mutableListOf()
fun add(curso: Curso) {cursos.add(curso)}
}
class Curso() {
val alunos: MutableList<Aluno> = mutableListOf()
fun add(aluno: Aluno) {alunos.add(aluno)}
}
A relação entre ambos é eventual.
Agregação
Diferente da associação, o relacionamento por agregação ocorre quando há exclusividade em uma das partes deste relacionamento.
Um exemplo, Funcionário e Departamento, Departamentos podem ter vários Funcionários e Funcionário pode estar vinculado a um Departamento. Porém perceba que Funcionário pode existir sem o vínculo ao Departamento e o mesmo não tem dependência de Funcionário para existir. Um relacionamento de muitos para um.
class Departamento() {
val funcionarios: MutableList<Funcionario> = mutableListOf()
fun add(funcionario: Funcionarios) {funcionarios.add(funcionario)}
}
class Funcionario() {
val departamento: Departamento? = null
}
Composição
Muito parecida com agregação, o relacionamento por composição ocorre quando um objeto depende estritamente de outro objeto.
Por exemplo, Carro e Motor, Carro deve ter um Motor assim como a existência de um motor está particularmente ligada a existência de um Carro. Um relacionamento de um para um.
class Motor() {}
class Carro() {
val motor: Motor = Moto()
}
Conclusão
Associação, agregação e composição é a dependência existente entre objetos e como eles se relacionam. Não há diferença na maneira de implementá-los e sim como irão se comportar. Devemos pensar o seguinte para quando utilizarmos:
Se ambos os objetos da relação são independentes, isto é uma associação.
Se um dos objetos da relação compõe o todo mas não é dependente, isto é uma agregação.
Se os objetos da relação dependem um do outro compondo o todo, isto é uma composição.
Saber identificar as diferenças entre os relacionamentos de objetos em POO e aplicá-las teremos um código mais coeso e manutenível.
Top comments (0)