Você está na página 1de 108

Contedo da Aula

Classes e objetos.

Por que devemos estudar POO?


Porque um paradigma de programao
muito utilizado no mercado profissional.
As empresas vo exigir que voc saiba:
POO, anlise e projeto OO, experincia em Java ou
C++, banco de dados orientado a objetos, programao
distribuda, etc.

Por que devemos estudar POO?


POO a base de muitas linguagens de
programao e plataformas tecnolgicas.
Android, TV Digital, iOS, etc.

Permite desenvolver aplicaes complexas e


bastante sofisticadas.

Exemplo de Aplicaes

Por que devemos estudar POO?


O mercado profissional exige a utilizao de
linguagens de programao que permitam
desenvolver programas de forma mais:
Flexvel;
Padronizada;
Com maior grau de reuso;
Fcil de manter e entender;

Paradigma
O que um paradigma?
um modelo ou padro que orienta a
forma como programadores de software
analisam problemas e definem solues
para estes problemas.
Problema

Soluo

Paradigma (cont.)
Exemplos de paradigmas de programao

Paradigma Estrutural
A ideia principal decompor o problema em
problemas menores atravs do
desenvolvimento de procedimentos e funes
que processam dados, e que so organizados
em mdulos.

Paradigma Estrutural
Limitaes
Mdulos muito dependentes entre si.
Dificuldade na reutilizao de cdigo.
As mudanas nos mdulos muitas vezes traziam
efeitos colaterais inesperados.

Paradigma Orientada a Objetos


Pressupe que o mundo composto por objetos.
Construo de um software envolve a abstrao de
um conjunto de objetos pertencentes ao domnio da
aplicao.
Alguns benefcios da POO
Reutilizao de cdigo e aumento da
produtividade
Facilidade em manuteno e extenso
Facilidade para anlise e projeto

Abstrao uma habilidade


importante para POO

Abstrao
Habilidade humana que permite visualizar
imagens, identificar objetos em uma tela ou
texto, identificar requisitos, comportamentos
etc.

Abstrao
Em termos de desenvolvimento de sistemas,
consiste em identificar quais objetos so
relevantes para a resoluo de um problema.

Quantos objetos voc consegue identificar na figura abaixo?

O que so objetos?
So todas as coisas, fsicas ou abstratas do
mundo real que possuem caractersticas e
comportamentos.
Objeto = Caractersticas + Comportamentos
Caractersticas
descrevem, identificam ou particularizam o objeto

Comportamento
uma ao que um objeto sabe realizar (uma
habilidade do objeto)

O que so objetos?

O que so objetos ?
Os objetos (computacionais) so compostos
por:
IDENTIDADE: endereo de memria
ATRIBUTOS (ou campos): definem as
caractersticas do objeto
MTODOS: so as operaes que manipulam as
caractersticas ou estado do objeto. Esto
relacionados ao comportamento do objetos.

Estado de um Objeto
o conjunto de valores de seus atributos em
um dado momento.
Parte das operaes (mtodos) de um objeto,
em geral, pode alterar o estado do objeto.
Conforme as operaes do objeto vo sendo
invocadas, o objeto pode assumir diversos
estados durante sua vida.

Exemplos de Objetos
Abstrair atributos e mtodos dos objetos:
Conta Bancaria;
Carro;

Exemplos de Objetos
Uma conta bancria pode ter os seguintes
atributos e mtodos:
Atributos
nmero da conta: 223344
nmero da agncia: 5577
saldo: R$-100,00

Mtodos

emitir saldo();
efetuar deposito();
efetuar saque();
emitir extrator()

Exemplos de Objetos
Um carro pode ter os seguintes atributos e
mtodos:
Atributos

marcha;
velocidade;
modelo;
cor;

Mtodos
mudar marcha();
acelerar();
frear();

Exemplos de Objetos
Objetos tambm podem ser compostos por
outros objetos.
Isto permite que Objetos Complexos sejam
definidos a partir de objetos mais simples.
O objeto carro pode ser composto pelo objetos:

Volante;
Motor;
Roda;
CD player;

atributos:

Objetos
Atributos e Operaes

cor: Azul
marca: Kaloy
Quantidade de marchas: 20
Marcha corrente: 5

operaes:
frear, pedalar, soltar pedal
aumentar marcha
reduzir marcha

Minha bicicleta de corrida

Rede de Objetos
Um software orientado a objetos consiste em
uma rede de objetos que interagem entre si
(trocam mensagem).
Software

Objeto 1

Objeto 3

Objeto 2

Objeto 4

Representando Objetos em Sistemas


Computacionais
Como transportar os objetos abstrados no
mundo real para o ambiente computacional?
Temos que implementar classes em programas
que do vida a estes objetos em um sistema
computacional.

Classe
Refere-se implementao de um objeto no
ambiente computacional.
um molde (planta do objeto) que especifica
como o objeto deve ser construdo no
ambiente computacional.
Classe especifica o que todo objeto criado a
partir desta classe deve ter.

Classe
A classe tambm classifica ou categoriza objetos que
possuem caractersticas e comportamentos comuns.
Classe Funcionrio

Objeto Paula

Objeto Pedro

Classes
Como agrupar estes objetos?
Ford-Ranger

Fiat-PalioTom

Piano
Garfield

M.Ravel

J.S.Bach

Volkswagen-Fox

Violino
Chevrolet-Vectra
Frajola

Trompete
W.A.Mozart

Violo

L.V.Beethoven

Obo

Classes
Que nomes atribuir para os agrupamentos?
Ford-Ranger
Fiat-Palio
Volkswagen-Fox
Chevrolet-Vectra

Garfield
Tom
Frajola

Trompete Violo
Piano Violino Obo

J.S.Bach
L.V.Beethoven
W.A.Mozart
M.Ravel

Classes
Carro

Compositor

Ford-Ranger
Fiat-Palio
Volkswagen-Fox
Chevrolet-Vectra

Gato
Garfield
Tom
Frajola

Instrumento Musical
Trompete Violo
Piano Violino Obo

J.S.Bach
L.V.Beethoven
W.A.Mozart
M.Ravel

Classes
Quando temos vrios objetos de um mesmo
tipo, dizemos que eles pertencem a uma
categoria ou classe. Exemplo:
Ford-Ranger, Fiat-Palio e Chevrolet-Vectra
pertecem classe dos carros.
Tom, Garfield e Frajola pertencem classe dos
gatos.
Bach, Ravel, e Mozart so compositores, logo,
pertecem classe dos compositores.

Classe
Exemplo de classe para objeto Televiso.

volume
canal
on/off
tamanho

Mtodos

ligar()
desligar()
aumentar volume()
diminuir volume()
mudar canal()

instanciao

Classe Televiso
Atributos

Objetos ou instncias

Classes vs Objetos
Classes
So abstraes de objetos que permitem descrever
um tipo de objeto.
Uma CLASSE descreve um categoria de objetos com
caractersticas (atributos), e comportamentos
(mtodos) semelhantes .

Objetos
a instncia particular de uma classe.
So gerados em tempo de execuo.
a parte fsica, pois consume recursos da mquina
(aloca memria).

Como representar uma classe?

Representaes Classes
Como descrever os atributos e as operaes
de uma classe de objetos?
Algumas alternativas so:
Usar a lngua portuguesa
Usar uma linguagem de programao OO
Usar uma linguagem de modelagem - UML

Representando
Classes em UML

Classes
Representao em UML
UML Linguagem Unificada de Modelagem
(Unified Modeling Language).
UML nasceu em torno de 1995 e fruto dos
trabalhos de Booch, Jacobson e Rumbaugh.
Ela fornece representaes grficas que
auxiliam a modelagem e a programao OO.

Classes
Representao em UML
NomeDaClasse
atributo1: tipo
atributo2: tipo
...
operao1(): tipo
operao2(): tipo
operao3(): tipo
...

Seo de nome
da classe
Seo de atributos

Seo de operaes

Classes
Representao em UML
Gato
nome: String
idade: int
peso: float
correr()
comer()
fazerAniversrio()
miar()

Seo de nome
da classe
Seo de atributos

Seo de operaes

Classes
Representao em C++
class NomeDaClasse {
tipo atributo1;
tipo atributo2;
tipo mtodo1(void);
...

NomeDaClasse
atributo1: tipo
atributo2: tipo
...

tipo mtodo1(void) {
// lgica...
};
tipo mtodo2(void) {
// lgica...
};
...

operao1(): tipo
operao2(): tipo
operao3(): tipo
...
}

Classes de C++ - Mtodos


A medida que os mtodos se tornarem
maiores, defini-los dentro da classe poder
congestionar a definio de classe
Soluo: colocar o prottipo dentro da classe
e definir o mtodo fora dela

Classes de C++ - Mtodos


Ex: class NomeDaClasse {
void fazerAniversario(void);

//Prottipo

};
Nome do mtodo

void NomeDaClasse::fazerAniversario(void)
{
Nome da classe
};

Classes
Representao em C++
Um mtodo a implementao de uma operao.
Gato
nome: String
idade: int
peso: float

void
Gato::fazerAniversario(voi
d){

cout<<"Parabns!!";
idade++;

correr()
comer()

fazerAniversrio()

miar()

};

Classes
Representao em C++
class Gato {
string nome;
int idade;
float peso;
void correr(void);...
};
void Gato::correr(void) {
cout<<nome<<" est correndo!<<endl;
peso--;
cout<<"Peso: <<peso<<endl;
};
void Gato::comer(void) {
cout<<nome<<nome<<" est comendo!<<endl;
peso = peso + 2;
cout<<Peso: <<peso<<endl;
};
void Gato::fazerAniversario(void){
cout<<"Parabens pra voc, ...!<<endl;
idade++;
cout<<"Idade: <<idade<<endl;
};
// classe Gato

Exerccios
Q1. Considere os seguintes objetos abaixo.
Identifique a classe destes objetos, trs de
seus atributos e operaes, e represente tudo
em UML:
1. Volkswagen Fusca, Toyota Corolla, Honda Civic,
Fiat Idea, e Ford Mondeo.
2. Objetos que marcam horas e minutos fabricados
por Casio, Citizen, Rolex, Dumont, Seiko, etc.

Exerccios
Identifique os comportamentos e atributos de
um aluno da UEA sob a perspectiva do sistema
Aluno On-Line. Represente tudo em UML

Exerccios
Em que consiste a programao orientada a objetos
(POO)?
Quais os benefcios da orientao a objetos?
Qual a importncia da abstrao na POO?
O comportamento de um objeto definido por um
conjunto de?
As caractersticas ou estado de um objeto
correspondem ao conjunto de?

Exerccios
Faa uma pesquisa sobre os paradigmas da
computao e escreva um texto fazendo um
comparativo sobre os vrios paradigmas
pesquisados.
Pesquise pelo o menos 3 exemplos de
linguagens de programao orientada a
objetos.

Exerccios
Q1. Considere os seguintes objetos abaixo.
Identifique a classe destes objetos, seus
atributos e mtodos, e represente tudo em
UML:
1. Objetos que recebem e realizam chamadas
telefnicas fabricados pela Nokia, Samsung,
Apple e Blu
2. Objetos que marcam horas e minutos fabricados
pela Casio, Citizen, Rolex, Dumont, Seiko, etc.

Exerccios
Q2. Identifique os atributos e mtodos de um
objeto de aprendizagem voltado para ensinar
geometria. O objeto dever ensinar com calcular
a rea de um triangulo. Represente tudo em
UML

Exerccios
Q3. Verifique se as afirmativas so verdadeiras ou falsas:
a) Uma classe descreve os atributos e as operaes
(mtodos) de um conjunto homogneo de objetos.
b) Na linguagem de modelagem UML, uma classe
representada por uma caixa com trs partes: na parte
superior escrevemos o nome da classe; na parte
central escrevemos a lista dos atributos da classe; e na
parte inferior da caixa escrevemos a lista das
operaes.
(continua)

Exerccios
Q3. Verifique se as afirmativas so verdadeiras ou
falsas:
c) Imagine uma classe chamada Cachorro. Raa,
cor, peso, nome, latir e dormir so exemplos de
atributos possveis para a classe Cachorro.
d) Atributos e Mtodos so dois nomes
diferentes que significam uma mesma coisa.
e) As caractersticas de um objeto (ou classe)
podem ser chamadas de operaes ou mtodos.

Instanciao e Instncia

Instanciao e Instncia
Como podemos usar um objeto?
necessrio instanciar a classe para criar um
objeto.

Instanciao o processo que permite um


objeto ser criado a partir de uma classe.
Quando instanciamos ("criamos") um objeto de
uma classe, o objeto passa a existir na memria.
E quando o objeto instanciado podemos
comear a us-lo.
Dizemos que um objeto uma instncia de uma
classe. Exemplo: os objetos Tom, Frajola e
Garfield so instncias da classe Gato.
55

Instncias
A instanciao de um objeto de uma classe
provoca a alocao de memria para criao
do objeto.
O objeto obtm uma endereo na memria
tambm chamado de referncia.
Objetos so instncias de classes!

Instanciao e Instncia
Vamos instanciar um objeto gato da classe
Gato:
// InstanciandoUmGato
int main() {
Gato meuGato = new Gato;
}

O operador new na instruo


new Gato;

instancia um objeto da classe Gato em uma


regio de memria chamada Heap.
Heap
objeto da
classe
Gato
Endereo:
F70A1

Problema:
new Gato;
cria o objeto, mas no temos como acess-lo,
referenci-lo!
Sem acessar o objeto, no podemos utiliz-lo.
Soluo:
usar uma varivel para referenciar o objeto
assim...

// InstanciandoUmGato
int main() {
Gato frajola;
frajola = new Gato;
}

A varivel frajola est referenciando o objeto.


Agora, temos acesso ao objeto, e podemos
utiliz-lo.
frajola

Heap
objeto da
classe
Gato
Endereo:
F70A1

Varivel de Instncia
A varivel frajola uma varivel de instncia.
A varivel de instncia o nome da varivel
que recebe a referncia do objeto instanciado.
Por meio desta varivel os atributos e
mtodos de uma classe tornam-se disponveis
em cada objeto instanciado e podem ser
usados.
Cada objeto tem sua prpria varivel de
instncia.

Varivel de Instncia
Exemplo:
Classe Aluno
Atributos
nome
matricula

Mtodos
imprimir nome
imprimir matricula

Na classe aluno cada objeto instanciado


modela uma pessoa que tem seu prprio
nome e matrcula.
Variveis de Instncia

Aluno 2

Aluno 3

referncias

Aluno 1

Objetos
nome: Joo
matrcula: 123456
nome: Maria
matrcula: 654321
nome: Pedro
matrcula: 123226

Classe
Aluno

Instanciao e Instncia
Como podemos utilizar um objeto?
Atribuindo valores para seus atributos (atribuir
um estado para o objeto).
Invocando suas operaes (mtodos), visando
algum objetivo.

Instanciando e usando objetos


// GatoPrincipal1
int main() {
// Instanciao do objeto frajola da classe Gato.
Gato frajola = new Gato;
// Atribuindo dados ao gato frajola
frajola.nome = "Frajola";
frajola.idade = 2;
frajola.peso = 2.3f; // f de float.
// Mostrando o estado do gato
cout<<"Nome: "<<frajola.nome<<endl;
cout<<"Idade: "<<frajola.idade<<endl;
cout<<"Peso: "<<frajola.peso<<endl;
} // fim main

Instanciando e usando objetos


int main() {
// Instanciando dois gatos
Gato frajola = new Gato;
Gato garfield = new Gato;
// Atribuindo dados aos gatos
frajola.nome = "Frajola";
frajola.idade = 2;
frajola.peso = 2.3f; // f de float.
garfield.nome = "Garfield ";
garfield.idade = 1;
garfield.peso = 5.7f; // f de float.
// Mostrando os estados dos gatos
cout<<"Nome:<<frajola.nome<<endl;
cout<<"Idade:<<frajola.idade<<endl;
cout<<"Peso:<<frajola.peso<<endl;
cout<<"Nome:<<garfield.nome<<endl;
cout<<"Idade:<<garfield.idade<<endl;
cout<<"Peso:<<garfield.peso<<endl;
} // fim main

Mtodos
Um MTODO a implementao de uma
operao numa classe.
Operaes so usadas para ler ou manipular os
dados (atributos) de um objeto.
Todos os objetos de uma classe compartilham os
mesmos mtodos.
formado por:
nome, tipo de dados dos argumentos e valores
retornados;

Algoritmo do mtodo.

Mtodos
Exemplo:
Classe Aluno
Atributos
nome
matricula

Mtodos

inserir nome(Pedro)
imprimir nome()
Inserir matricula(654231)
imprimir matricula()

Mtodos
Os mtodos viabilizam que os objetos
comunicam-se entre si.
Atravs dos mtodos possvel:
obter os valores de atributos (variveis) de um
objeto;
alterar o valor de atributos do objeto;
fornecer informaes ao objeto;

Mtodos
A capacidade de um objeto invocar o mtodo
de outro objeto chamado enviar uma
MENSAGEM.
Desta forma, mensagens possibilitam a
interao entre os objetos.

Mtodos
Exemplo.
Quando o objeto A deseja que o objeto B
execute um dos seus mtodos.
O objeto A envia uma mensagem ao objeto B.
Inserir aluno (Pedro)
Objeto A

Objeto B
Aluno inserido com sucesso!

Mtodos
Uma mensagem contm:
nome do mtodo;
argumentos do mtodo;

A resposta a uma mensagem o resultado da


execuo do mtodo correspondente.

Envio de Mensagem
Envio de mensagem quando invocamos um
mtodo de um objeto.
Nada mais do que chamar um mtodo de um
objeto.
Exemplo:
envio da mensagem "frajola, coma": frajola.comer();
envio da mensagem "frajola, corra": frajola.correr();
envio da mensagem "frajola, faa aniversrio":
frajola.fazerAniversario();

Envio de Mensagem
int main() {
// Instanciao...
Gato frajola = new Gato;
// Atribuindo dados ao gato frajola
frajola.nome = "Frajola";
frajola.idade = 2;
frajola.peso = 2.3f; // f de float.
frajola.fazerAniversario();
frajola.correr();
frajola.correr();
frajola.comer();
frajola.fazerAniversario();
} // fim main
}

Mtodos Especiais
Construtor
criao / instanciao do objeto.
Mtodo que atribui valores default (padres) para
os atributos de um objeto.
Possui o mesmo nome da classe.
Gato frajola = new Gato;

Funo Construtora
Mtodos que facilitam aos programadores a
inicializao dos dados-membro da classe
Tem o mesmo nome da classe, porm, no
precede o nome dela com a palavra-chave
void
No retorna tipo
chamada quando se cria um objeto

Mtodos Especiais
Destrutor
Mtodo que libera o espao ocupado pelo objeto
da memria (delete).
Invocado quando o objeto ser destrudo da
memria.

Funo Destrutora
chamada para descartar um objeto,
liberando a memria que estava sendo usada
Tem o mesmo nome da classe, porm,
precedido do caractere til (~)
No retorna tipo, nem precede o nome dela
com a palavra-chave void

Encapsulamento
O encapsulamento uma forma de restringir
o acesso aos atributos e aos mtodos de um
objeto.
Um objeto que precisa da colaborao de outro
objeto para realizar alguma tarefa simplesmente
envia uma mensagem a este ltimo.
Inserir aluno (Pedro)
Objeto A

Objeto B
Aluno inserido com sucesso!

Encapsulamento
Objeto DVD

Encapsulamento
Esconde a estrutura dos dados e
implementao interna dos mtodos do
objeto.
Mudanas internas na implementao dos
mtodos no tm impacto sobre os objetos
clientes.

Encapsulamento
Os objetos clientes conhecem somente as
assinaturas dos mtodos requisitados.
Geralmente, utiliza-se modificadores de
acesso para privar os atributos do acesso
direto (tornando-os privados)
Implementa-se os mtodos que acessam e
alteram os atributos como pblicos.

Encapsulamento
Modificador de acesso
uma palavra-chave que define um atributo ou
mtodo como :
pblico (ou public, qualquer classe pode ter acesso)
privado (ou private, apenas os mtodos da prpria
classe pode manipular o atributo) ;
protegido (ou protected, pode ser acessado apenas
pela prpria classe ou pelas suas subclasses).

Exerccios
Q2. Verifique se as afirmativas so verdadeiras
ou falsas:
a) Suponha que y seja um objeto da classe X e
que m() seja um mtodo de X. Para chamar o
mtodo m() devemos fazer y.m();
b) A principal funo de um atributo
armazenar os dados de um objeto; a de um
mtodo armazenar as instncias de uma
classe.
(continua)

Exerccios
Q3. Verifique se as afirmativas so verdadeiras ou
falsas:
a) Sempre que uma mensagem enviada para um
objeto, o seu estado se altera.
b) Duas instncias quaisquer de uma classe podem
ter estados iguais, e serem objetos distintos.
c) K p = new K;
um exemplo de instanciao de um objeto
denominado p da classe K.

(continua)

Exerccios
Q4. Verifique se as afirmativas so verdadeiras ou
falsas:
a) O mtodo construtor deve ser usado para
construir uma classe.
b) O encapsulamento visa restringir o acesso a
implementao interna dos mtodos e aos
atributos de um objeto.

Exerccios
Crie classes que modelam os objetos
funcionrio e aluno.
Especifique os atributos, mtodos e
construtores.

Classe Abstrata

Classe Abstrata
Em classes de carter muito geral ou abstrato,
no faz sentido instanciarmos seus objetos.
Exemplos de classes sem sentido prtico de
instanciao:
Figura Geomtrica, Conta Bancria, Alarme,
Pessoa Jurdica, Profissional, Atleta, etc.

Em casos como esses podemos usar uma


Classe Abstrata

Classe Abstrata
Uma classe abstrata desenvolvida para
representar entidades e conceitos abstratos.
Uma classe abstrata utilizada tipicamente
como uma classe base para derivar outras
classes.
Comportasse como um modelo (template)
para as suas subclasses .
Apresenta definies que sero aproveitadas
por outras classes da hierarquia.

Classe Abstrata
No podemos instanciar uma classe abstrata
Ou seja, a classe abstrata sempre uma
superclasse que no possui instncias
composta por mtodos abstratos, que so
desprovidos de implementao, e tambm
por mtodos no abstratos

Classe Abstrata

Classe Abstrata

Classe Abstrata

Classe Abstrata em UML

Classe Abstrata em C++


Em C++, a palavra virtual antes
do nome do mtodo:
Class FormaGeometrica{
protected:
int x,y;
public:
virtual void mostrar(void);
};

Classe Abstrata em C++


Mtodos abstratos so declarados em C++ por
meio da palavra-chave virtual.
Todos os mtodos abstratos devem ser
implementados pela classe concreta que
herda (:) dela, a menos que a subclasse
tambm seja abstrata.

class Alarm {
public:
virtual void programarAlarm(void);
}

Um mtodo abstrato contm somente a declarao do mtodo.

class AlarmVeicular: public Alarm{


public:
void AlarmVeicular::programarAlarm(void){
cout<<Alarme programado<<endl;
}
}

Deve ser implementado por qualquer classe concreta que herda dela com o objetivo

de definir o comportamento especfico.

//Esta uma classe abstrata que representa


qualquer operao matemtica
class OperacaoMatematica {
...
public:
virtual double calcular(double x, double
y);
};

class Soma : OperacaoMatematica {


...
//Override
public:
double Soma::calcular(double x, double y) {
return x + y;
}
};

class Subtracao : OperacaoMatematica {


...
//Override
public:
double Subtracao::calcular(double x, double
y) {
return x - y;
}
}

class Multiplicacao : OperacaoMatematica {


...
//Override
public:
double Multiplicacao::calcular(double x,
double y) {
return x * y;
}
}

class Divisao : OperacaoMatematica {


...
//Override
public:
double Divisao::calcular(double x, double
y) {
return x / y;
}
}

//ExemploClasseAbstrata
void mostrarCalculo(OperacaoMatematica operacao,
double x, double y) {
cout<<"O resultado : <<operacao.calcular(x,
y))<<endl;
}
int main() {
mostrarCalculo(new
mostrarCalculo(new
mostrarCalculo(new
mostrarCalculo(new
}

Soma, 5, 5);
Subtracao, 5, 4);
Multiplicacao, 5, 4);
Divisao, 8, 4);

Exerccio
Elabore um digrama de classes que modele
uma classe abstrata que represente um tpico
eletrodomstico, com os atributos voltagem,
preo, on_off e os mtodos abstratos ligar() e
desligar().
Modele tambm classes concretas derivadas
a partir da classe abstrata, e os respectivos
mtodos abstratos herdados.

Exerccio
Implemente em C++ uma classe abstrata que
represente um tpico eletrodomstico, com os
atributos voltagem, preo, on_off e os
mtodos abstratos ligar() e desligar().
Implemente tambm classes concretas
derivadas a partir da classe abstrata, e os
respectivos mtodos abstratos herdados.
Instancie objetos a partir das classes
concretas.

Muito Obrigado

Você também pode gostar