Você está na página 1de 41

Programao Orientada a Objetos

C++

Prof. rico Olavo Weissheimer


1

Histrico de 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
2

Vantagens da Orientao a
Objetos
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;
3

Vantagens da Orientao a
Objetos
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.
4

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

Conceitos Bsicos de Orientao


a Objetos
Criou o conceito de objeto, que um tipo de dado com
uma estrutura e operaes para manipular esta estrutura.
Tipos definidos pelo usurio devem se comportar da
mesma maneira de tipos pr-definidos (fornecidos pelo
compilador).
Os objetos trocam mensagens entre si.
Essas mensagens resultam na ativao de mtodos, os
quais realizam as aes necessrias.
Os objetos que compartilham uma mesma interface, ou
seja, respondem as mesmas mensagens, so agrupados em
classes.
6

Exemplo de Classe e Objetos


Objetos e Classes
Palio

JWO-4567

Automvel

Parati

KLJ-0978

Marca
Placa

Celta

JDK-6543
CLASSE

OBJETOS
(Instncias da classe Automvel)

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, defin-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).
8

Conceitos de Classe
Exemplos de Classes:

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

Conceito 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.
10

Conceito 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)
11

Conceito 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.
12

Conceitos Bsicos
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.

13

Notao de Classe em UML


Atributos e Mtodos:
Automvel
Placa
Fabricante
Modelo
Proprietario
RegistrarDados
ImprimirDados
ValidarFabricante

CLASSE
ATRIBUTOS

MTODOS
14

Notao de Classe em UML


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

CLASSE

ATRIBUTOS

MTODOS
15

Exemplo Programao Orientada


a Objetos em C++
class Pessoa
{
// Atributos

int Cpf;
char Nome[30];
int DataNascimento;

Definio de uma
classe Pessoa em C+
+
Dados encapsulados

// Metodos

void
CadastrarPessoa();
void ImprimirPessoa();
void CalcularIdade();
};
main()
{
Pessoa p;
}

return 0;

Mtodos

Instanciao de um
objeto Pessoa (p)
16

Conceito de Encapsulamento
Encapsulamento:

Objetos encapsulam seus atributos.


Propriedade segundo a qual os atributos de uma classe so
acessveis apenas pelos mtodos da prpria classe;
Outras classes s podem acessar os atributos de uma classe
invocando os mtodos pblicos.
Restringe a visibilidade do objeto, mais facilita o reuso
Os DADOS e os MTODOS so empacotados sob um
nome e podem ser reusados como uma especificao ou
componente de programa.
17

Dados Pblicos e Privados


Privados: somente as funes (mtodos) membro da
classe podem acess-los.
Sendo privados, os programas no podem acessar os
membros da classe usando o operador ponto
objeto.alguma_varivel = valor
Se no colocar o rtulo public, pressupe-se que todos
os membros so privados

18

Dados Pblicos e Privados


class funcionario {
private:
char nome[64];
long func_id;
float salario;
public:
int atribui_valores(long x, float y);
void exibe_funcinario();
};
19

Exemplo Programao Orientada


a Objetos em C++
#include <iostream>
using namespace std;
class Pessoa
{
private:
char Nome[30];
char Cpf[11];
int AnoNasc;
public:
void CadastrarPessoa()
{ cout <<"\nNome: ";
cin.getline(Nome,30);
cout << "CPF: ";
cin.getline (Cpf,12);
cout <<"\nAno Nascimento: ";
cin >> AnoNasc;
};
void ImprimirPessoa()
{ cout << Cpf << "\n";
cout << Nome << "\n";
cout << AnoNasc;
};
};

main()
{
Pessoa p;

Erro: varivel Private s


pode ser acessadas pelos
mtodos

p.AnoNasc = 1971;
p.CadastrarPessoa();
p.ImprimirPessoa();
system("pause");
}

20

Exemplo Programao Orientada


a Objetos em C++
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
Ex: class funcionario {
void exibe_func(void);
};

//Prottipo
Nome do mtodo

void funcionario::exibe_func(void)
Nome da classe
{
};
21

Exerccios:
1.
2.

3.

4.

Declarar os mtodos do exemplo, colocando os cdigos dos


mtodos fora da classe.
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 14.
22

Conceito de Herana
Herana:

o mecanismo pelo qual uma subclasse herda todas as


propriedades da superclasse e acrescenta suas prprias e
exclusivas caractersticas.
As propriedades da superclasse no precisam ser repetidas
em cada subclasse.
Propicia a reutilizao de cdigo.

23

Herana
Automovel
Placa
Fabricante
Modelo
Proprietario

Passeio

Taxi

Lotao

Cor

NumeroTaxi

NumeroPassag
24

Exemplo Herana
SuperClasse Automovel

class Passeio:public Automovel


SubClasse que esta herdando da SuperClasse Automovel
{
private:
char Cor[15];
public:
void RegistrarCor();
};

...

Mtodo da SubClasse Passeio

void Passeio::RegistrarCor()
{ cout << "Cor: ";
cin.getline (Cor,16);
};
int main()
{
Passeio Pass;

Instanciando SubClasse Passeio

25

Exerccios:
1. Fazer um programa para criar as subclasses mostradas no slide

24, tendo-se nestas subclasses os mtodos para ler e mostrar os


seus atributos.

2. Crie uma classe Retngulo. A classe possui os atributos altura e

base e 4 mtodos:
1. ler a base e a altura,
2. calcular a rea (base*altura) (declarar como funo),
3. calcular o permetro (soma dos todos os lados) (declarar
como funo),
4. mostrar os valores da rea e do permetro.

26

Exerccios:
3. Crie a classe ContaBancaria, com os seguintes atributos:
NumeroConta e Saldo. Esta classe dever ter os seguintes
mtodos:

Aberturaconta, onde dever ser lido o nmero da conta e o saldo


inicializando com 0,
OperacaoCredito, somar valor informado com o saldo,
OperacaoDebito, debitar valor informado do saldo,
MostrarSaldo.

Dever ser lido 5 movimentaes, sendo lido o tipo da


operao (C ou D) e o valor da transao. O nmero da conta e
o saldo devero ser mostrado aps as 5 movimentaes.
27

Exerccios:
4. Implementar em C++ as classes que seguem abaixo:
Pessoa
Nome
Endereo
Cidade
CadastrarPessoa
AlterarEndereo

PessoaFisica

PessoaJuridica

Sexo
Idade
CPF

NomeFantasia
CNPJ
IncluirDadosPJuridica

IncluirDadosPFisica

28

Herana: Arquivo Header


A definio das classes podem estar divididos em vrios
arquivos do tipo Header (extenso .h).
Estes arquivos Header so criados pelos programadores, com o
objetivo de melhor organizao e encapsulamento.
costume deixar nesses arquivos somente a interface das
classes e funes para que os programadores possam olh-los,
como uma "library".

29

Exemplo Arquivo Header


Arquivo header
#include ...
Automovel.h
#include "Automovel.h"
class Taxi:public Automovel
{

private:
int NumeroTaxi;
public:
void RegistrarTaxi();
{ cout << "Numero Taxi ";
cin >> NumeroTaxi;
}; };

int main()
{
Taxi Tx;
Tx.RegistrarDados();
Tx.RegistrarTaxi();
return 0;
}

Arquivo header Automovel.h:


using namespace std;
class Automovel
{
private:
char Placa[7];
char Fabricante[30];
public:
void RegistrarDados();
void ImprimirDados();
void ValidarFabricante();
};
void Automovel::RegistrarDados()
{ cout << "Placa: ";
cin.getline(Placa,8);
};

void Automovel::ImprimirDados()

....
30

Exerccios
1.
2.

Gravar a classe Automovel como sendo um arquivo tipo


header.
Alterar o programa gerado no exerccio 1 do slide 26,
fazendo uso deste arquivo header, onde dever ser criado um
arquivo header para a super-classe automovel e headers para
as sub-classes taxi, passeio e lotacao. Dever ter um
programa principal.

31

Dados Protected
Os atributos da classe pai no podem ser acessados pelos mtodos das
classes filhas, se estes estiverem declarados como private.
Para que os atributos da classe pai possam ser acessados pelos mtodos das
classes filhas, estes devem ser declarados como protected.

Exemplo:

class Automovel
{

protected:
.....

char Placa[7];

class Passeio:public Automovel


{
private:
char Cor[15];
public:
void RegistrarCor();
{
Atributo da classe pai sendo
cout << "Placa: ";
acessado por mtodo de uma
cin.getline (Placa,8); };
classe filha

32

Polimorfismo
Geralmente representa a qualidade ou estado de um objeto ser
capaz de assumir diferentes formas.
Mais especificamente, propriedade segundo o qual vrios
mtodos podem existir com o mesmo nome.
Ao receber uma mensagem para efetuar uma Operao, o
objeto quem determina como a operao deve ser efetuada;
Permite a criao de vrias classes com interfaces idnticas,
porm objetos e implementaes diferentes.

33

Polimorfismo
Veculo
Verificar()
Reparar()
Limpar()

Automvel

Bicicleta

Verificar()
Reparar()
Limpar()

Verificar()
Reparar()
Limpar()

34

Classes Abstratas
Classes abstratas so classes que no produzem instncias. Elas
agrupam caractersticas e comportamentos que sero herdados
por outras classes. Fornecem padres de comportamento que
sero implementados nas suas subclasses.
Podem ter mtodos com implementao definida.
Figura
Atributos

area

Operaes

calcularArea {abstrato}
informarArea

35

Exerccios
1. Implementar as classes da figura abaixo, usando o conceito de
polimorfismo e classe abstrata.
Figura
Atributos
Operaes

Area,altura,base
ler altura,base
calcularArea {abstrato}
MostrarArea

Tringulo

Retngulo
Atributos

Atributos

Operaes

Operaes

calcularArea
altura*base

calcularArea
(base*altura)/2
36

Construtor
So mtodos declarados como funes que so chamados no
momento da criao de um objeto.
So usados para inicializar os objetos.
Este tipo de mtodo no possu valor de retorno.
Um construtor tem sempre o mesmo nome da classe.
Se nenhum for declarado ser criado um construtor default

37

Exemplo Construtor
#include <iostream>
using namespace std;
class ponto
{
float x;
float y;
public:
ponto(int a,int b);
//esse e o construtor, note a ausncia do valor de retorno
void mostra(void);
};
ponto::ponto(int a,int b) //mtodo construtor: tem sempre o nome da classe
{
x=a;
//incializando atributos da classe
y=b;
};
void ponto::mostra(void)
{cout << "X:" << x << " , Y:" << y;
system ("pause");
};
main()
{
ponto ap(1,2);
ap.mostra();
}

38

Destrutor
O destrutor diz como o objeto ser destrudo quando sair de
escopo.
O funcionamento anlogo ao mtodo Construtor, ou seja:
No

possu valor de retorno.


Tem sempre o mesmo nome da classe, s que precedido por
~.
Se nenhum for declarado ser criado um destrutor default.
seu argumento sempre void.
39

Exemplo Destrutor
#include <iostream>
using namespace std;
class ponto
{ float x;
float y;
public:
ponto(int a,int b);
// mtodo construtor
~ponto(void);
// mtodo destrutor
void mostra();
};
ponto::ponto(int a,int b) //cdido do mtodo construtor
{ x=a;
y=b;
};
ponto::~ponto(void)
// mtodo destrutor: tem o mesmo nome da classe precedido de ~
{ cout << " Variaveis destruidas";
system("pause"); };
void ponto::mostra(void)
{ cout << "X:" << x << " , Y:" << y << "\n";
system ("pause"); };
main()
{ ponto ap(1,2);
ap.mostra(); }

// o mtodo destrutor ser executado automaticamente

40

Analogia com Programao


Tradicional
Analogia dos conceitos principais no
paradigma orientado a objeto e no paradigma
tradicional de programao
Linguagens Orientadas a
Objetos

Linguaguens Tradicionais

Objeto

Valor

Classe

Tipo (TAD)

Mensagem

Chamada de Procedimento

Mtodo

Procedimento ou Funo

Interface

Conjunto de nomes e funes


para um fim especfico

41

Você também pode gostar