Você está na página 1de 8

Programação Orientada a Objetos Aula 5 - Composição e Agregação

Programação Orientada a Objetos


Aula 05 - Composição e Agregação

Material Didático do Instituto Metrópole Digital - IMD

Termo de uso

Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-

SemDerivados CC BY-NC-ND. Você possui a permissão para realizar o download e compartilhar, desde que atribua os créditos do

autor. Não poderá alterá-los e nem utiliza-los para fins comerciais.

Atribuição-SemDerivações-SemDerivados

CC BY-NC-ND

https://creativecommons.org/licenses/by-nc-nd/4.0/

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 1


Programação Orientada a Objetos Aula 5 - Composição e Agregação

Apresentação
Compor, juntar, reunir, formar, constituir... Essas ações nos levam a uma ideia
muito interessante na Programação Orientada a Objetos, chamada Composição.
Nesta aula, você verá esse interessante conceito da POO, que nos dá a grande
possibilidade da reutilização de código. Além disso, a ideia de composição também
aproxima a ideia da Orientação a Objetos ao senso comum de sistematização das
coisas, em que um objeto mais complexo pode ser composto de partes mais
simples. Boa aula!!

Objetivos
Saber o que significa Composição ou Agregação;
Criar objetos na linguagem TypeScript que são compostos por outros objetos,
fazendo uso prático do conceito de Composição;
Entender como se comportam os modificadores de acesso de Java na
Composição.

Conceitos Composição e Agregação


Link do video da aula: https://youtu.be/6cjgfh8AQC8

Associação
É uma conexão (relacionamento) entre classes/objetos. Na figura abaixo
temos dois exemplos, no primeiro a classe time de futebol tem um atributo que é
um objeto de outra classe: Jogador. No segundo temos a classe pedido que contém
vários itens pedido, em ambos os casos dizemos que existe uma associação entre
as classes.

Figura 1 - Conceito de Associação

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 2


Programação Orientada a Objetos Aula 5 - Composição e Agregação

Composição ou Agregação
Características:

É Caso particular de associação;


Indica que uma das classes é uma parte, ou está contida em outra classe;
“Tem um” ou “contém um”.

Veja na figura abaixo quando temos uma composição e quando temos uma
agregação:

Figura 2 - Exemplos de Agregação e Composição

Observe que para o primeiro exemplo, a classe jogador não depende da classe
futebol para existir, ou seja, caso a classe jogador não seja utilizada na classe time
de futebol ela continua tendo sentido de existir no contexto do problema. A classe
jogador poderá ser utilizada em outra situação dentro do sistema. Quando não
existe uma dependência tão forte entre as classes podemos dizer que temos uma
relação de agregação.

No segundo exemplo, a classe item pedido só existe dentro da classe pedido. Se


não existir a classe pedido perde o sentido ter a classe item pedido em nosso
sistema. Para essa relação forte de dependência podemos dizer que temos uma
relação de composição.

Conceito
Composição ou Agregação é um mecanismo de reaproveitamento
(reutilização) de classes utilizado pela POO para aumentar a produtividade
e a qualidade no desenvolvimento de software.

Reaproveitamento ou reutilização de classes significa que você pode usar uma ou


várias classes para compor outra classe. Já o aumento de produtividade está
relacionado com a possibilidade de não ser necessário reescrever código de
determinadas classes, se alguma outra já existe com estado (atributos) e
comportamento similar. Finalmente, com a composição, é possível também
James Peter Gomes Da Silva Barbosa IMD/UFRN Página 3
Programação Orientada a Objetos Aula 5 - Composição e Agregação

aumentar a qualidade dos sistemas gerados, porque há a possibilidade clara de


reutilizar classes que já foram usadas em outros sistemas, e, portanto, já foram
testadas e têm chances de conter menos erros.

Vejamos um exemplo: um carro é um objeto COMPOSTO por vários outros objetos.


Ele é composto pelos objetos motor, pneus, direção, faróis etc. A figura 3 dá uma
ideia do conceito de composição para um objeto do tipo Carro.

Figura 3 - Conceito de Composição

Legal não é?!! Isso mesmo que você entendeu, você pode criar um objeto a partir
de vários outros objetos. E isso é muito natural.

Veja o computador que você está usando, ele é um objeto composto por outros
objetos: teclado, monitor, placa mãe, memória, mouse etc.

E tem mais, quando uma classe é composta de outras classes, ela pode tanto usar
os objetos que são gerados pelas classes que a compõem, como pode também
usufruir dos atributos e métodos dessas classes.

Exemplo na prática
Vejamos agora um exemplo na prática! Vamos utilizar a ideia do objeto Carro, dado
uma classe Carro que é composta pelas classes Direção e Motor.

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 4


Programação Orientada a Objetos Aula 5 - Composição e Agregação

Figura 4 - Exemplo de Composição

Nas linhas de código, essa Composição é expressa da seguinte maneira:

Figura 5 - Exemplo de Composição

Observe que a classe Carro é composta pelas classes Motor e Direção, eis aqui a
nossa Composição! Mas, lembre-se de que primeiro criamos as classes Motor e
Direção para depois criarmos a classe Carro.

A composição ou agregação e o método


construtor
Vimos que os objetos das classes Motor e Direção são utilizados na instância da
classe Carro, mas, onde criar esses objetos? Antes da criação do objeto carro?
Durante? ou depois? Vejamos 3 casos diferentes:

1. CASO 1: Chamadas nos construtores da classe que é composta;


2. CASO 2: Chamadas em qualquer método da classe que é composta;
3. CASO 3: Chamadas fora da classe que é composta.

Na próxima videoaula vamos implementar em TypeScript e verificar na prática os 3


casos.

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 5


Programação Orientada a Objetos Aula 5 - Composição e Agregação

Prática Composição e Agregação


Link do video da aula: https://youtu.be/XLrqoP4Spmc

Classe Direção
export class Direcao{

private _cor: string;

public get cor() : string {


return this._cor;
}

public set cor(cor : string) {


this._cor = cor;
}

Classe Motor
export class Motor{

private _potencia: number;

public constructor(potencia: number){


this._potencia = potencia;
}

public get potencia() : number {


return this._potencia;
}

public set potencia(potencia : number) {


this._potencia = potencia;
}

Classe Veículo

import { Direcao } from "./direcao";

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 6


Programação Orientada a Objetos Aula 5 - Composição e Agregação

import { Motor } from "./motor";

export class Veiculo{

private _motor: Motor


private _direcao: Direcao;

public constructor(potencia: number){


this._motor = new Motor(potencia);
this._direcao = new Direcao();
}

public ligar(potencia: number){


this._motor = new Motor(potencia);
this._direcao = new Direcao();
}

public get motor() : Motor {


return this._motor
}

public set motor(motor : Motor) {


this._motor = motor;
}

public get direcao() : Direcao {


return this._direcao;
}

public set direcao(direcao : Direcao) {


this._direcao = direcao;
}

Download Projeto
Clique no link abaixo para fazer download do projeto desenvolvido na aula.

Clique aqui para download

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 7


Programação Orientada a Objetos Aula 5 - Composição e Agregação

Atividade 01
1. Para praticar o conceito de composição que você acabou de aprender, tente
olhar o mundo ao seu redor, outros exemplos de objetos do mundo real que
são compostos por outros objetos menores. Anote tais exemplos para que
possamos usá-los em outros exercícios ao longo da nossa aula.

Atividade 02
Crie, baseado no exemplo apresentado, outras classes compostas de várias outras
classes. Lembre-se: para que uma classe possa compor uma outra, é necessário
que ela já exista. Elabore também classes para os exemplos que você mesmo criou
na Atividade 01. As classes são:

Classe Composta Classes Componentes (“Partes”) da Classe Composta


Computador Teclado, Monitor, Memória, Placa Mãe...
Livro Título, Autor, Capítulo, Editora ...
Monstro Cabeça, Olho, Boca, Braço, Perna...

Resumo
Nesta aula, você estudou o que é Composição e agregação. Viu que composição
ou agregação é a capacidade de fazer com que uma classe seja composta de vários
objetos de outras classes. A Composição ou agregação oferece a possibilidade de
fazer uso do comportamento das classes que ela agrega (como atributos) de
maneira implícita ou explícita, dependendo da maneira que se escolhe para
instanciar as classes componentes.

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 8

Você também pode gostar