Escolar Documentos
Profissional Documentos
Cultura Documentos
LOO 06 Classes
LOO 06 Classes
Classes e Objetos
Conceitos de orientao a objetos
Objetos
Objetos so o empacotamento de procedimentos e dados relacionados. Na maioria dos casos
correspondem aos objetos de negcio do mundo real tais como: pedidos, faturas, produtos,
mquinas, departamentos, pessoas, etc.
A idia bsica desta tecnologia replicar a forma como so construdos os equipamentos de
hardware. Nesta analogia, os objetos se comportam como uma "caixa preta", equivalente, aos
circuitos integrados utilizados na construo dos referidos equipamentos.
Classes
Classes (class) so como gabaritos para definio de tipos de objetos. So parecidas com
estruturas (struct), porm fornecem mais recursos ao programador.
Uma classe define objetos que compartilham estrutura e comportamento comuns.
Por exemplo, todo objeto Nota Fiscal poderia ser descrito como uma nica classe de Notas Fiscais,
onde estariam especificados todas as propriedades ou os atributos de todas as notas, assim como
os procedimentos ou servios possveis de serem oferecidos por essas notas.
Classe representa uma abstrao.
A varivel de uma classe chamada de objeto ou instncia de classe.
A diferena fundamental entre classes e objetos est no fato de um objeto constituir uma entidade
concreta com tempo e espao de existncia, enquanto a classe somente uma abstrao.
Por exemplo, podemos abstrair uma classe lapis que formaliza todas as propriedades deste tipo
de instrumento para escrever, mas no se consegue escrever sem ter em mos um objeto desta
classe.
Membros (atributos e mtodos) de uma classe
Uma classe possui dados (que definem suas propriedades) e procedimentos (que devem ser
executados sobre esses dados).
Esses dados e procedimentos so denominados de membros da classe.
Os dados caracterizam atributos e os procedimentos caracterizam mtodos da classe.
$WULEXWRV
Os atributos ou variveis membros, em geral, devem ser manipulados por mtodos associados
classe.
Existem dois tipos de atributos:
o Atributos de objetos - Descrevem valores mantidos em um objeto. Diferentes objetos de
uma mesma classe no compartilham os atributos de objetos.
o Atributos de classe - Quando um atributo compartilhado entre os vrios objetos da classe,
eles constituem um atributo de classe. Por exemplo, um atributo de classe que constitui um
contador de objetos da classe. Ao se criar um objeto, incrementa-se esse atributo e
decrementa-o quando o objeto desaparecer (veja exemplo no prximo captulo).
0pWRGRV
Mtodo um comportamento especfico, residente no objeto, que define como ele dever agir
quando invocado. Em termos de programao, os mtodos esto implementados em funes
membro.
Exemplo
No exemplo a seguir, os atributos iNmero e cLogradouro no podem ser acessado diretamente,
mas podem ser acessados pelos mtodos Atribui_Endereco e Exibe_Endereco.
Observe que a definio dos mtodos utiliza o operador de escopo (::).
#include <iostream>
using namespace std;
// declarao da classe
class TEndereco
{
private:
int iNumero;
char cLogradouro[30];
public:
void Atribui_Endereco();
void Exibe_Endereco();
};
// funo principal
int main(int argc, char *argv[])
{
TEndereco t1;
t1.Atribui_Endereco();
t1.Exibe_Endereco();
cout << endl;
system("pause");
return 0;
}
Observao: deve-se evitar o uso de comandos de entrada e sada dentro de mtodos, a no ser que sejam
mtodos especficos de entrada ou sada de dados. Isto faz com que a reutilizao da classe seja mais fcil.
Mtodos set e get
comum a criao de mtodos de acesso (leitura e escrita) aos atributos privados. Em geral os
mtodos de leitura comeam com o prefixo get e os mtodos de escrita comeam com o prefixo
set.
Exemplo:
#include <iostream>
#include <string>
using namespace std;
// declarao da classe
class Pessoa
{
private:
string nome;
int idade;
public:
void setNome(string n);
string getNome();
void setIdade(int i);
int getIdade();
};
// definio dos mtodos set e get
void Pessoa::setNome(string n)
{
nome = n;
}
string Pessoa::getNome()
{
return nome;
}
void Pessoa::setIdade(int i)
{
idade = i;
}
int Pessoa::getIdade()
{
return idade;
}
// funo principal
int main(int argc, char *argv[])
{
Pessoa p;
p.setNome("Sergio");
p.setIdade(18);
cout << "Nome = " << p.getNome() << endl;
cout << "Idade = " << p.getIdade() << endl;
system("pause");
return 0;
}
/*
Nome = Sergio
Idade = 18
Pressione qualquer tecla para continuar. . .
*/
#include "pessoa.h"
using namespace std;
int main(int argc, char *argv[])
{
Pessoa p;
p.setNome("Sergio");
p.setIdade(18);
cout << "Nome = " << p.getNome() << endl;
cout << "Idade = " << p.getIdade() << endl;
system("pause");
return 0;
}
Tipos de atributos
Um atributo pode ser um tipo pr-definido da linguagem, um tipo definido pelo programador ou
um tipo de uma biblioteca externa como a STL.
Exemplo:
class TEndereco
{
private:
int iNumero;
string sLogradouro;
};
class Funcionario
{
private:
char cNome[40];
TEndereco endereco;
};
// tipo pr-definido
// classe da STL
// tipo pr-definido
// classe definida pelo usurio
Exerccio
Criar uma classe para representar um crculo. Implementar os seguintes mtodos: setRaio, getRaio,
setDiametro, getDiametro, area e comprimento. Criar um programa (funo main) para testar a
classe e todos os seus mtodos. A classe deve ser codificada em uma unidade independente.
a = r2
c = 2 r
Funes e objetos
Como classe um novo tipo de dado criado pelo usurio, possvel ter um objeto como valor de
retorno de uma funo/mtodo. Algumas funes/mtodos tambm podem receber um objeto
como parmetro.
Exemplo:
#include <iostream>
using namespace std;
class Venda
{
private:
int nPecas;
float fPreco;
public:
void setVenda(int pc, float pr);
void exibe();
Venda soma(Venda x);
};
void Venda::setVenda(int pc, float pr)
{
nPecas = pc;
fPreco = pr;
}
void Venda::exibe()
{
cout << "nPecas = " << nPecas
<< " fPreco = " << fPreco << endl;
}
Venda Venda::soma(Venda x)
{
Venda vTemp;
vTemp.nPecas = nPecas + x.nPecas;
vTemp.fPreco = fPreco + x.fPreco;
return vTemp;
}
int main()
{
Venda v1, v2, v3;
v1.setVenda(10,30);
v2.setVenda(20,40);
v3 = v2.soma(v1); // Soma v1 com v2 e armazena em v3
v1.exibe(); v2.exibe(); v3.exibe();
system("pause");
return 0;
}
/*
nPecas = 10 fPreco = 30
nPecas = 20 fPreco = 40
nPecas = 30 fPreco = 70
Pressione qualquer tecla para continuar. . .
*/
Outra forma:
...
void Venda::soma(Venda x, Venda y)
{
nPecas = x.nPecas + y.nPecas;
fPreco = x.fPreco + y.fPreco;
}
int main()
{
...
v3.soma(v1,v2); // Soma v1 com v2 e armazena em v3
...
}
Arrays de objetos
A criao de um array de objetos em C++ segue a sintaxe da declarao de arrays de outros tipos
de dados:
Exemplo:
O acesso a variveis e funes membro de um objeto elemento de array pode ser feita da seguinte
forma:
mEmp[i].Exibe();
Exemplo em C:
double *ptr;
ptr = (double *)malloc(sizeof(double));
free (ptr);
Exemplo em C++:
double *ptr;
ptr = new double;
delete ptr;
segue um esquema ligado necessidade, ou seja, alocamos quando necessrio e liberamos quando
o objeto deixa de ser til.
Exemplo:
CDATA *pDT = new CDATA;
CDATA *pDT1 = new CDATA(1,1,2005);
Exemplo:
CDATA *pDT = new CDATA[10];
Exemplo:
CDATA *pDT;
pDT = new CDATA;
pDT->Recebe();
(&pDT[i])->Recebe();
(pDT + i)->Recebe();
(*(pDT + i)).Recebe();
pDT[i].Recebe();
//
//
//
//
i
i
i
i
a
a
a
a
posio
posio
posio
posio
no
no
no
no
array
array
array
array
...
delete []pDT;
Ponteiro THIS
Quando criamos instncias de uma classe, cada uma delas tem sua prpria cpia dos atributos.
Para efetivar a ligao entre atributos/mtodos e os objetos, o C++ possui um ponteiro
implicitamente criado para cada mtodo, denominado this. Sua finalidade apontar para o
objeto que chamou o mtodo.
Exemplo :
void LIVRO::Exibe()
{
cout << "\n Titulo " << this->cTitulo; // ponteiro this implicito
cout << "\n Autor " << this->cAutor; // portanto, no precisa
cout << "\n Total " << this->iTotal; // ser usado neste caso
}
Benefcios da tecnologia OO
As aplicaes podem ser desenvolvidas em menos tempo e com menor custo, devido
reutilizao de objetos existentes.
Os sistemas possuem qualidade superior, por serem construdos com componentes testados e
comprovados, oferecendo melhores solues para os problemas, com menos bugs.
A implementao dos objetos pode ser modificada sem afetar outros objetos, tornando a aplicao
mais fcil de ser mantida e permitindo maior flexibilidade e agilidade no crescimento e na
evoluo das aplicaes.
10
Agradecimentos
Parte deste material foi adaptada a partir das aulas dos Professores Jamilson Bispo do Santos,
Vilmar Pedro Votre, Lincoln Csar Zamboni e Srgio V. D. Pamboukian.