Sie sind auf Seite 1von 55

Aula 05 Introduo a OO: Classes,

atributos, mtodos e objetos


Profa: Jarbele Cssia
{jarbele.cassia@gmail.com}

Histrico da
Orientao a
Objetos

Histrico da Orientao a
Objetos
A OO surgiu no final da dcada de 60, quando dois
cientistas dinamarqueses criaram a linguagem Simula
(Simulation Language).

1967 - Linguagem de Programao Simula-67-conceitos


de classe e herana.
O termo Programao Orientada a Objetos (POO)
introduzido com a linguagem Smalltalk (1980).
Inicio dos anos 90 Paradigma de Orientao a Objetos.
Abordagem poderosa e prtica para o desenvolvimento
de software

Vantagens
Abstrao de dados: os detalhes referentes s
representaes das classes sero visveis apenas
a seus atributos;
Reutilizao: o encapsulamento dos mtodos e
representao dos dados para a construo de
classes facilitam o desenvolvimento de software
reutilizvel, auxiliando na produtividade de
sistemas;
Flexibilidade: as classes delimitam-se em
unidades naturais para a alocao de tarefas de
desenvolvimento de software;

Vantagens
Extensibilidade: facilidade de estender o
software devido a duas razes:
herana: novas classes so construdas a partir das
que j existem;
as classes formam uma estrutura fracamente
acoplada o que facilita alteraes;

Mesma notao utilizada desde a fase de


anlise at a implementao.
Manutenibilidade: a modularizao natural em
classes facilita a realizao de alteraes no
software.

Exemplos de Linguagens OO
Existem diversas linguagens OO, tais
como:
Smalltalk (1980)
Ada (1983)
Eiffel (~1985)
Object Pascal (1986)
Common Lisp (1986)
C++ (~1989)
Java

Classes

Contextualizando...
Estamos acostumados a criar programas que:
Apresentam mensagens ao usurio;
Obtm dados do usurio;
Realizam clculos e tomam decises.
Todas estas aes eram delegadas funo
main ou outras;
A partir de agora, nossos programas tero uma
funo main e uma ou mais classes
Cada classe consistindo de dados e funes.

Conceitos de Classe
Classes:
um tipo definido pelo usurio que contm o
molde, a especificao para os objetos, assim
como o tipo inteiro contm o molde para as
variveis declaradas como inteiros.
A classe envolve, associa, funes e dados,
controlando o acesso a estes, defini-la implica
em especificar os seus atributos (dados) e suas
funes membro (cdigo).
Todo objeto uma instncia de uma Classe.
Possuem
propriedades
(ATRIBUTOS)
e
comportamento (MTODOS).

Classes
Definir uma classe dizer ao compilador
quais mtodos e atributos pertencem
classe:
A definio comea com a palavra class;
Em seguida, o nome da classe
Por padro, a primeira letra de cada
palavra no nome maiscula.
O corpo da classe delimitado por { e };
No se esquea do ; no final.

Classes
Sintaxe:
class nomeDaClasse {
corpoDaClasse;
}
O corpo de uma classe pode conter:
Atributos;
Mtodos;
Construtores;
Outras classes ...

Classes
Exemplos de Classes:

aluno
conta corrente
folha de cheque
automvel
cliente
fornecedor
time de futebol
jogo de futebol

Exemplo:
Modelando um retngulo em C++:
class Retangulo {
int largura;
int altura;
int area() {
return largura * altura;
}
int perimetro() {
return 2 *(largura + altura);
}
} ret1; // declara uma varivel do tipo Retangulo

Modificadores de acesso
em Classes
Membros de uma classe podem ser:
public
Podem ser acessados em qualquer lugar

private
S podem ser acessados pelos membros da
prpria classe

protected
Podem ser acessados apenas por membros
da prpria classe ou das suas sub-classes.

Especificadores de acesso so sempre


seguidos de :

Exemplo:
class Retangulo {
int largura;
private:
int altura;
public:
int area() {
return
largura * altura;
}
protected:
int perimetro() {
return 2 *
(largura + altura);

}
};

Obs.: Por default todo


membro de uma classe
considerado private
// Exemplo de acesso:
int main() {
Retangulo r;
// Errado:
r.altura = 10;
// Errado:
r.largura = 40;
// OK:
int a = r.area();
// Errado:
a = r.perimetro();
}

Classes
Quando implementamos um mtodo
dentro de uma classe o compilador
copia e cola o cdigo toda vez que o
mtodo chamado!
O mtodo dito inline
Isto torna o executvel mais rpido
Mas deixa o executvel bem maior
S bom para mtodos muito curtos

Qual a soluo?
Utilizar o operador ::

O operador : :
Permite a implementao de mtodos fora da
classe
A classe passa a possuir apenas o prottipo
do mtodo
O corpo pode ficar no mesmo arquivo ou em
outro
Sintaxe:
nomeDaClasse::nomeDoMembro
Tambm podemos usar o modificador
inline para que mesmo assim o mtodo
seja inline

Exemplo:
class Retangulo {
private:

int largura;
int altura;
public:
int area();
int perimetro();
};
// fora o mtodo a ser inline
int inline Retangulo::area() {
return largura * altura;

}
int Retangulo::perimetro() {
return 2 *(largura + altura);
}

Objetos

Conceitos de Objetos
Objetos:
Tudo em Orientao a Objetos OBJETO.
Objeto, no mundo fsico, tipicamente um
produtor e consumidor de itens de informao.
Definio (mundo do software)
Qualquer coisa, real ou abstrata, a respeito da qual
armazenamos dados e mtodos que os manipulam
Martin, Odell (1995)

Abstrao de uma entidade do mundo real e


que possu caractersticas (VALORES).
uma instanciao de uma classe.

Conceitos de Objetos
Um Objeto uma instncia particular
de um tipo de dado especfico (classe);
uma instncia de uma classe;
Instanciar um objeto criar seu espao
de memria e repassar um ponteiro
para ele.
TipoClasse nomeDoObjeto;
Retangulo ObjetoRetangulo;

Conceitos de Objetos
Exemplos de objetos:

um aluno (Carlos Alberto da Silva)


uma conta corrente (0123-003934-1)
uma folha de cheque (234564)
um automvel (Honda Civic preto 06/06)
um cliente (Maria Antonia Guimaraes)
um fornecedor (Bosch)
um time de futebol (Palmeiras)
uma partida de futebol (Palmeiras x
Santos)

Exemplos de Classe e Objeto


Objetos e Classes
Palio

JWO-4567

Parati

KLJ-0978

Automvel
Marca
Placa

Celta

JDK-6543

CLASSE
OBJETOS
(Instncias da classe Automvel)

Atributos

Conceitos de Atributos
Atributos:
Representam um conjunto de informaes, ou
seja, elementos de dados que caracterizam
um objeto.
Descrevem as informaes que ficam
escondidas em um objeto para serem
exclusivamente manipulado pelas operaes
daquele objeto.
So variveis que definem o estado de um
objeto, ou seja, so entidades que
caracterizam os objetos.
Cada objeto possui seu prprio conjunto de
atributos.

Atributos
Nossa classe no possui atributos,
apenas um mtodo;
Atributos so representados como
variveis na definio de uma classe
Declarados dentro da classe
Porm, fora dos mtodos.

Cada objeto da classe possui sua


prpria cpia dos atributos.

Getters e Setters
Atributos so definidos como privados
Logo, s podem ser alterados dentro da prpria
classe
Tentar acess-los for a da classe causar erro.
Ocultao de informao;
Um mtodo que altere o valor de um atributo
chamado de setter
Por padro, a nomenclatura set+[nome do
atributo].
Um mtodo que retorne o valor de um atributo
chamado de getter
Por padro, a nomenclatura get+[nome do
atributo].

Getters e Setters
Uma vez que nossa classe possui
getter e setter, os atributos s devem
ser acessados e alterados por eles
Mesmo dentro de outros mtodos que
porventura necessitem acessar/alterar
os atributos.

Vamos alterar nosso exemplo


anterior para que a string utilizada
seja agora um atributo
Com getter e setter.

Mtodos get e set


get()
Serve para se ter acesso aos atributos encapsulados
de uma classe
Exemplo:
int getLargura() { return largura; }

set()
til para permitir a modificao dos atributos da
classe encapsulados
Exemplo:
void setLargura(int l) {
largura = l;
}

Exemplo:
class Retangulo {
private:
int largura;
int altura;
public:
int getAltura() { return
altura;}
protected:
void setAltura(int a) {
// evita um valor invlido
if (a > 0) altura = a;
}
};

Mtodos

Conceitos de Mtodos
Mtodos:
Quando um objeto mapeado dentro do
domnio do software, os processos que podem
mudar a sua estrutura de dados so
denominados Operaes ou Mtodos.
Mtodos so invocados por Mensagens.
Cada objeto possui seu prprio conjunto de
mtodos
Definies: So procedimentos ou funes
definidos e declarados que atuam sobre um
objeto.

Mtodos
A definio de um mtodo se
assemelha a definio de uma funo
Possui valor de retorno;
Assinatura do mtodo
Por padro, comea com uma letra minscula e
todas as palavras seguintes comeam com
letras maisculas.

Lista de parmetros entre parnteses (tipo


e identificador)
Eventualmente, vazia

Alm disso, o corpo de um mtodo


tambm delimitado por { e }.

Mtodos
Para utilizar um mtodo, utilizamos o
operador .
Informamos o nome do objeto, seguido
por . e o nome do mtodo e eventuais
parmetros
Ou somente o par de parnteses.

O mtodo possui acesso aos atributos do


objeto que o chamou
No possui acesso aos atributos de outros
objetos, a no ser que estes sejam passados
por parmetro;
Os atributos so acessados pelo nome definido
na classe.

Notao de classe em UML


Atributos e Mtodos:
Retangulo
CLASSE
Altura
Base
getAltura()
setAltura(int a)
getBase()
setBase(int b)
CalculaPermetro()
CalculaBase()

ATRIBUTOS

MTODOS

Notao de classe em UML


Atributos e Mtodos:
Pessoa
Cpf
Nome
Estado Civil
Ano Nascimento
Naturalidade
UF

CadastrarPessoa

CLASSE

ATRIBUTOS

MTODOS

Exemplos
1.

2.

3.

4.

Declarar os mtodos do exemplo da Classe


Pessoa (exemplo anterior).
Criar um novo mtodo para a classe Pessoa
(exemplo anterior) que calcule a idade. A idade
calculada dever ser mostrada no mtodo
ImprimirPessoa.
Fazer um programa que tenha um mtodo que
inicialize uma varivel com 0, outro que
incremente esta varivel e outro que mostre o
valor incrementado. O programa principal dever
chamar 5 vezes o mtodo que incrementa e o
mtodo que mostra o valor.
Fazer um programa que implemente a classe
Automvel mostrada no slide 23.

Exemplos
1.

Como fica o diagrama de classe da UML para o


exemplo que construmos nesta aula?

Construtores

Construtores
Mtodos construtores so mtodos especiais
definidos com o mesmo nome da classe;
Construtores so chamados automaticamente
toda vez que um objeto da classe criado;
Os mtodos construtores servem para inicializar
as variveis de instncia de seus objetos e no
possuem nenhum valor de retorno.

Construtores
Um construtor um mtodo especial, definido
com o mesmo nome da classe e executado
automaticamente quando um objeto criado
No retorna valores;
No possui valor de retorno;
Deve ser declarado como pblico.

Se no especificarmos um construtor, o
compilador utilizar o construtor padro
No nosso exemplo, foi utilizado o construtor
padro da classe string, que a torna vazia.

Vejamos nosso exemplo, agora com um


construtor.

Construtores
#include "Retangulo.h"
Retangulo::Retangulo(){ //construtor vazio para inicializar o objeto
}
void Retangulo (int a, int b){
altura = a;
base = b;
}
int Retangulo::getAltura(){
return altura;
}
// [...] TO DO

//construtor com parmetros

Construtores
#include "Retangulo.h"
#include <iostream>
using namespace std;
int main()
{
//cria um objeto retangulo
Retangulo r;
r.setAltura(4);
r.setBase(3);
r.CalculaArea();
r.CalculaPerimetro();
r.imprimeArea();
return 0;
}

Construtores
Notem que um construtor pode possuir
parmetros ou no
Por exemplo, poderamos no passar nenhum
parmetro e definir um valor padro dentro do
prprio construtor.

Quando um atributo for objeto de outra classe,


podemos chamar o construtor da outra classe
em um construtor definido por ns
E opcionalmente,
adicionais.

especificar

inicializaes

Todas nossas classes devem possuir


construtores, para evitarmos lixo em nossos
atributos.

Construtores
possvel criarmos mais de um construtor
na mesma classe
Sobrecarga de construtores
O construtor default no possui parmetros.

Da mesma forma que sobrecarregamos


funes;
A diferenciao feita pelo nmero de
parmetros enviados no momento da criao
do objeto
Diferentes objetos de uma mesma classe podem ser
inicializados por construtores diferentes.

Escolhemos qual construtor mais adequado


a cada momento.

Construtores
Podemos ainda ter construtores com parmetros
padronizados
O construtor recebe parmetros para inicializar
atributos;
Porm, define parmetros padronizados, caso no
receba nenhum parmetro.
Suponha uma classe Venda, em que temos os atributos
valor e peas
Ao criar um objeto, o programador pode definir a
quantidade de peas e o valor da venda;
Porm, se nada for informado, inicializaremos os
atributos com o valor -1, usando o mesmo
construtor;
uma forma de economizar o trabalho de
sobrecarregar um construtor.

Construtores
class Vendas
{
public:
//parametros padro
Vendas(int p= -1, float v= -1.0)
{
valor = v;
pecas = p;
}
float getValor()
{
return valor;
}
int getPecas()
{
return pecas;
}
private:
float valor;
int pecas;
};

int main()
{
//inicializa um objeto com -1 e outro com
10
Vendas a, b(10, 10);

cout <<a.getPecas()<<endl
<<a.getValor()<<endl
<<b.getPecas()<<endl
<<b.getValor()<<endl;
return 0;

Exerccio
Como fica o diagrama de classe UML
para a classe Retangulo agora que
temos um construtor?
Dica: para diferenciar um construtor em
relao aos outros mtodos,
escrevemos constructor antes de seu
nome.
Nota: geralmente construtores so
omitidos em diagramas de classes.

Destrutores

Destrutor
Mtodo especial que chamado
automaticamente quando um objeto
est prestes a ser apagado da
memria
Deve ter o mesmo nome da classe
mas precedido por um ~
Assim como o construtor ele no
possui retorno
Alm disso, ele no pode ter
parmetros

Exemplo:
class Retangulo {
private:
int largura;
int altura;
public:
Retangulo(int a, int l);
~Retangulo() { } // destrutor padro
};
Retangulo::Retangulo(int a, int l) {
altura = a;
largura = l;
}

Modularizando
o programa

Modularizando seu
programa
Quando queremos criar um projeto
com diversas classes fazemos uso de
algumas convenes:
Criamos um arquivo .h s com a
definio da classe e os mtodos inline
E um arquivo .cpp s com a
implementao dos seus mtodos

Exemplo:
Retangulo.h
Retangulo.cpp
main.cpp

Referncias
Baltarejo, P.; Santos, J. Apontamentos de
Programao em C/C++. 2006. Disponvel em:
<http://www.dei.isep.ipp.pt/~pbsousa/aulas/ano_0/2
006_07/c/Sebenta-cpp-03-2006.pdf>. Acesso em 02
ago 2015.
Disponvel
em
:
<http://www.vivaolinux.com.br/dica/Funcao-dasprincipais-bibliotecas-do-C++>. Acesso em 02 ago
2015.
Mizrahi, V. V. Treinamento em Linguagem C++,
mdulo 2. 2ed. So Paulo: Pearson Prentice Hall,
2006.
Schildt, Hebert. C++ - Guia para Iniciantes. So
Paulo: Cincia Moderna, 2002.

Das könnte Ihnen auch gefallen