Escolar Documentos
Profissional Documentos
Cultura Documentos
Java Basico Modulo 04
Java Basico Modulo 04
www.t2ti.com
1
para
acompanhar
um
curso
avanado
onde
poder
aprender
www.t2ti.com
2
Mdulo
04
Orientao a Objetos
Classes, Objetos e
Encapsulamento
Introduo
Apesar de no termos sido apresentados formalmente, j estamos
utilizando orientao a objetos nos programas que fizemos at agora, pois algumas
das classes e tipos que utilizamos so verdadeiramente objetos. claro que no
estamos fazendo isto da forma correta ou melhor forma.
Mas porque Programao Orientada a Objetos ao invs da tradicional
Programao Estruturada?
Antes de conhecermos a resposta devemos compreender que em algum
momento o cdigo Orientado a Objetos utiliza-se do paradigma Estruturado, a grande
diferena a forma como a aplicao idealizada.
Um paradigma de programao, seja ele Estruturado ou Orientado a
Objetos a forma como a soluo para um determinado problema desenvolvida. Por
exemplo, em Orientao a Objetos os problemas so resolvidos pensando-se em
interaes entre diferentes objetos, j no paradigma Estruturado procura-se resolver
os problemas decompondo-os em funes e dados que somados formaro um
programa.
Retornando a nossa pergunta, durante muito tempo a programao
Estruturada foi o paradigma mais difundido porm, a medida que os programas foram
tornando-se mais complexos, surgiu a necessidade de resolver os problemas de uma
maneira diferente. Neste contexto surge o paradigma da Programao Orientada a
Objetos.
Em Orientao a Objetos os dados e as operaes que sero realizadas
sobre estes formam um conjunto nico (objeto), e a resoluo de um problema
dada em termos de interaes realizadas entre estes objetos.
Dizemos que um objeto encapsula a lgica de negcios, concentrando a
responsabilidade em pontos nicos do sistema, viabilizando um maior reuso do cdigo
pela modularidade desta abordagem.
www.t2ti.com
3
Modularidade: Uma vez criado um objeto pode ser passado por todo o
sistema;
Encapsulamento:
Detalhes
de
implementao
ficam
ocultos
externamente ao objeto;
Classes e Objetos
Objetos so coisas que temos no mundo real e abstramos no mundo
virtual para que possamos manipul-los na resoluo de problemas. Um objeto no
mundo real sempre possui estado e comportamento, isto , ele possui caractersticas
e aes que so pertinentes a sua natureza. Para clarificar nada melhor do que alguns
exemplos:
Objeto
Estado
Comportamento
Pessoa
Nome, idade, RG
Cachorro
Nome, raa
Latir, correr
Conta bancria
Creditar, debitar
Carro
www.t2ti.com
4
Documento
Documento 1
Documento 2
Foto:
Img1.png
Img4.png
Cdigo:
123456
789012
Nome:
Alfredo
Juliana
Perceba
que,
nesta
tabela
30/09/1987
coluna
Documento
define
classe
www.t2ti.com
5
}
}
do
tipo
Documento
denominada
documento1,
atribumos
varivel
documento1 uma instncia da classe Documento e para cada atributo do nosso objeto
documento1 atribumos os respectivos valores. Ao final o valor do cdigo impresso
Perceba
que
os
atributos
do
documento1
so
acessados
utilizando
Objetos na memria
Observe o seguinte programa:
class Programa {
public static void main(String[] args) {
Documento doc1 = new Documento();
doc1.nome = "Alfredo";
Documento doc2 = new Documento();
doc2.nome = "Juliana";
System.out.println("doc1: "+doc1.nome);
System.out.println("doc2: "+doc2.nome);
}
253 Documento
nome = Alfredo
254
255
256
257
258
doc1 = 253
260 Documento
nome = Juliana
doc2 = 260
261
www.t2ti.com
6
new
acesso.
Agora observe este outro programa muito similar:
class Programa {
public static void main(String[] args) {
Documento doc1 = new Documento();
doc1.nome = "Alfredo";
Documento doc2 = doc1;
doc2.nome = "Juliana";
System.out.println("doc1: "+doc1.nome);
System.out.println("doc2: "+doc2.nome);
253 Documento
nome = Juliana
254
Perceba
que
agora
eu
no
estou
mais
255
desta execuo:
257
doc1: Juliana
doc2: Juliana
258
259
doc1 = 253
260
doc2 = 253
261
www.t2ti.com
7
Mtodos
Ok, dentro de um objeto temos seu estado definido pelo conjunto de
atributos. Mas cad o comportamento? As aes que so realizadas sobre os atributos
so os mtodos, o conjunto de mtodos define o comportamento de um objeto.
Imagine que agora o sistema a ser modelado o de uma corrida de carros.
O principal objeto de uma corrida de carros so os prprios carros nenhuma
novidade at aqui para os quais ns devemos criar uma especificao (classe) para
ser utilizada neste sistema imaginrio.
O nosso carro de corrida ter seu estado definido pelo conjunto de atributos
nmero de identificao, velocidade atual e velocidade mxima. O comportamento
ser definido pelo conjunto de mtodos acelerar, frear, ligar e desligar.
Vamos criar a nossa classe apenas com a definio do estado, inicialmente:
class CarroCorrida {
//Estado
Integer numeroIdentificacao;
Double velocidadeAtual;
Double velocidadeMaxima;
//Comportamento...
}
Pronto! Agora temos o nosso carro de corrida que no faz nada por
enqanto. Vamos adicionar os primeiros comportamentos, ligar e desligar. Estas aes
(ligar e desligar) no retornam nenhum tipo de informao, o carro apenas emite um
som, sendo assim, estes comportamentos podem ser implementados da seguinte
forma:
void ligar()
{
System.out.println("VRUUUMmmmmmmmmm");
void desligar()
{
System.out.println("MMMmmmm......");
www.t2ti.com
8
www.t2ti.com
9
System.out.println("VRUUUMmmmmmmmmm");
}
void desligar()
{
System.out.println("MMMmmmm......");
}
void acelerar()
{
velocidadeAtual += 10;
if(velocidadeAtual > velocidadeMaxima)
{
velocidadeAtual = velocidadeMaxima;
}
}
void frear(Integer intensidadeFreada)
{
if(intensidadeFreada > 100)
{
intensidadeFreada = 100;
}else if(intensidadeFreada < 0)
{
intensidadeFreada = 0;
}
velocidadeAtual -= intensidadeFreada*0.25;
if(velocidadeAtual < 0)
{
velocidadeAtual = 0.0;
}
}
Desta forma toda vez que um carro for instanciado o valor destas variveis
estar previamente atribudo.
Mas,
observando
novamente
nosso
modelo
de
carro
de
corrida
www.t2ti.com
10
//...
www.t2ti.com
11
www.t2ti.com
12
ENCAPSULAMENTO
Apesar
do
nome
relativamente
esquisito
conceito
simples.
www.t2ti.com
13
www.t2ti.com
14
numeroIdentificacao:
Este
atributo
deve
ser
acessado
apenas
atravs
dos
mtodos
frear()
acelerar()
www.t2ti.com
15
www.t2ti.com
16
//...
String getNome() {
return nome;
void setNome(String nome) {
this.nome = nome;
Integer getHabilidade() {
return habilidade;
void setHabilidade(Integer habilidade) {
this.habilidade = habilidade;
Integer getIdade() {
return idade;
void setIdade(Integer idade) {
this.idade = idade;
}
}
www.t2ti.com
17
class Corrida {
public static void main(String[] args) {
//Criacao dos carros que irao correr
CarroCorrida carroEquipeVelocidade = new CarroCorrida(1, 100.0);
CarroCorrida carroEquipeTrapaceiros = new CarroCorrida(2, 100.0);
//Criacao dos pilotos de cada equipe
Piloto pilotoEquipeVelocidade = new Piloto();
Piloto pilotoEquipeTrapaceiros = new Piloto();
//Atributos do piloto da equipe Velocidade
pilotoEquipeVelocidade.setNome("Piloto 1");
pilotoEquipeVelocidade.setIdade(25);
pilotoEquipeVelocidade.setHabilidade(75);
//Atributos do piloto da equipe Trapaceiros
pilotoEquipeTrapaceiros.setNome("Piloto 2");
pilotoEquipeTrapaceiros.setIdade(27);
pilotoEquipeTrapaceiros.setHabilidade(65);
//Os pilotos sao colocados nos seus carros
carroEquipeVelocidade.setPiloto(pilotoEquipeVelocidade);
carroEquipeTrapaceiros.setPiloto(pilotoEquipeTrapaceiros);
//Identificao dos carros
carroEquipeVelocidade.setNumeroIdentificacao(1);
carroEquipeTrapaceiros.setNumeroIdentificacao(2);
//Carros sao ligados
carroEquipeVelocidade.ligar();
carroEquipeTrapaceiros.ligar();
//Inicia a corrida
carroEquipeVelocidade.acelerar();
carroEquipeTrapaceiros.acelerar();
carroEquipeVelocidade.acelerar();
carroEquipeTrapaceiros.acelerar();
carroEquipeVelocidade.acelerar();
carroEquipeTrapaceiros.acelerar();
}
}
Preste ateno neste novo cdigo e compare-o com o que foi implementado
anteriormente, veja que agora no acessamos/modificamos nenhum atributo de forma
direta, somos obrigados a utilizar os mtodos de cada uma das classes.
Exerccios
*Respeite o encapsulamento em todos os exerccios.
www.t2ti.com
18
www.t2ti.com
19
www.t2ti.com
20