Beruflich Dokumente
Kultur Dokumente
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).
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;
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.
Exemplo:
class Retangulo {
int largura;
private:
int altura;
public:
int area() {
return
largura * altura;
}
protected:
int perimetro() {
return 2 *
(largura + altura);
}
};
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)
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:
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.
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.
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.
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.
ATRIBUTOS
MTODOS
CadastrarPessoa
CLASSE
ATRIBUTOS
MTODOS
Exemplos
1.
2.
3.
4.
Exemplos
1.
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.
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
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.
especificar
inicializaes
Construtores
possvel criarmos mais de um construtor
na mesma classe
Sobrecarga de construtores
O construtor default no possui parmetros.
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.