You are on page 1of 23

1/23

Objetivos

Aprender conceitos essenciais de Orientao a


Objetos com Java
2/23
Orientao a Objetos

Objeto um objeto genrico, sem identidade


espec!ca

Classe de!ne a estrutura "in#orma$es e


comportamento% de um tipo de objeto

Instncia um objeto espec!co, com seu


pr&prio estado e identidade

O programador escreve "de!ne% c'asses


3/23
Orientao a Objetos

A orientao a objetos baseada em muitos dos


princpios (ue tambm embasaram o projeto de
'inguagens procedurais)

*or e+emp'o, todas visam decompor um prob'ema


maior em prob'emas menores, a programao
top,do-n. /anto a programao orientada a
objetos (uanto a programao estruturada do
import0ncia a se estruturar dados de acordo com
a 1rea de ap'icao, ou domnio do prob'ema.
2/23
Orientao a Objetos

3uitos dos critrios para se ava'iar a (ua'idade de


uma sub,rotina ou bib'ioteca, (ue seja reuti'i41ve'
e #1ci' de se manter, tambm servem como
critrios para se ava'iar uma boa c'asse, por
e+emp'o5

ocultamento de informaes: (uem c6ama


uma sub,rotina "ou um objeto% no precisa saber
dos deta'6es sobre o seu #uncionamento interno)

coeso: uma boa sub,rotina tem um prop&sito


7nico e bem de!nido, no uma rotina
genrica (ue atende a v1rias necessidades de
uso muito di#erentes entre si)
8/23
Orientao a Objetos

baixo acoplamento: uma boa sub,rotina


independente de outras sub,rotinas, ou seja, 7ti'
por si s&, e no e+ige (ue outras sub,rotinas
sejam c6amadas em uma ordem espec!ca, antes
ou depois de'a, para preparar um ambiente
apropriado.
9/23
Relacionamentos entre Objetos

Uso5 um objeto c6ama outro, depende de'e para


#a4er seu traba'6o

Areao / Composio5 um objeto guarda


outros objetos, um objeto composto

!eleao5 um objeto passa a bo'a para outro,


e comunica o resu'tado para (uem c6amou

"erana / #speciali$ao5 (uando uma


subc'asse "ou c'asse !'6a% 6erda estado e
comportamento de uma superc'asse "ou c'asse
me%
:/23
Uso

#ntreador usa %roduto

#ntreador recebe %roduto como argumento


em seus mtodos

#ntreador usa a re#er;ncia recebida como


argumento para c6amar mtodos de %roduto

EntregadorV2 "do-n'oad 4ip no <a=%


>/23
#ntreador usa %roduto
1. public class Entregador {
2. ...
3. public boolean isEntregavel(Produto produto) {
4. if (produto.getPeso() > PESO!"#$!O
%. ...
?/23
Areao & Composio

/rans#ormar as #ai+as de categorias A, @ e A em


#ntreador em dados din0micosB

Csar uma c'asse Cateoria#ntrea para


arma4enar os 'imites de cada #ai+a

#ntreador contm "agrega% um arraD de


Cateoria#ntrea

<ste arraD deve ser inicia'i4ado no construtorB

EntregadorV3 "do-n'oad 4ip no <a=%


1E/23
#ntreador area
Cateoria#ntrea
1. public class CategoriaEntrega {
2. private double co&pri&ento' largura' altura' peso(
3. private )ig*eci&al valor(
4. ...
%. public class Entregador {
+. private CategoriaEntrega[] categorias;
,.
-. public Entregador(CategoriaEntrega[] categorias) {
.. this.categorias = categorias;
1/. 0
11....
11/23
'estando a Areao
1. public class Entregador1est e2tends 1est3ase {
2. private Entregador entregador(
3.
4. protected void set4p() t5ro6s E2ception {
%. 3ategoriaEntrega78 categorias 9 {
+. ne6 3ategoriaEntrega(3%' 2%' %' 1///' 1/)'
,. ne6 3ategoriaEntrega(1//' %/' 4/' -///' 3/)'
-. ne6 3ategoriaEntrega(2//' 1%/' 1//' 2////' %/)
.. 0(
1/. entregador = new Entregador(categorias);
11. super.set4p()(
12. 0
12/23
!eleao

Cm objeto aparece para o mundo e+terno como


tendo uma certa inte'ig;ncia

Fnternamente, este objeto passa a bo'a para


outro objeto, (ue (uem rea'mente tem a
inte'ig;ncia

Cma de'egao s& pode e+istir se tambm e+istir


um uso ou uma agregao entre o objeto (ue
de'ega e o objeto de'egado
13/23
#ntreador delea para
Cateoria#ntrea

*or (ue no co'ocar Aategoria<ntrega decidindo


se um produto se en(uadra ne'a ou noG

<sta mudana seria um bom e+emp'o de


refatorao

O <c'ipse ajuda5 se'ecione o mtodo


is#ntreavelCateoria em #ntreador "ou
co'o(ue o cursor sobre o seu nome% e se'ecione
no menu Recriar > Mover
12/23
Recriar ( )over
18/23
#ntreador delea para
Cateoria#ntrea
1. public class Entregador {
2. private 3ategoriaEntrega78 categorias(
3.
4. public Entregador(3ategoriaEntrega78 categorias) {
%. t5is.categorias 9 categorias(
+. 0
,. public boolean isEntregavel(Produto produto) {
-. CategoriaEntrega maxima =
9. categorias[categorias.length !](
1/. return maxima.isEntregavel(produto)(
11. 0
12....
19/23
"erana ou #speciali$ao

A'asse !'6a 6erda atributos e mtodos da c'asse


me

Cma boa 6erana uma re'ao um

Auidado para no #a4er 6erana de


conveni;ncia, s& para 6erdar c&digo de outra
c'asse

Cma 6ierar(uia de sub/super c'asses #orma tipos


compatveis de dados para re#er;ncias
1:/23
#xemplo com "erana

EntregadorV4 no <a=

#ntreador agora usa "de'ega% para


)etodo#ntrea

<ntregador contm "agrega% um arraD de


)etodo#ntrea

As categorias A, @ e A do EntegadorV2 agora


esto em #ntrea*an (ue especializa
)etodo#ntrea

#ntrea)ensaeiro de!ne regras a'ternativas


de aceite da entrega e va'or do #rete
1>/23
)etodo#ntrea
1. public class !etodoEntrega {
2.
3. public boolean isEntregavel(Produto prod){
4. return false(
%. 0
+.
,. public )ig*eci&al get:alor;rete(Produto prod){
-. return null(
.. 0
1/.
11. 0
1?/23
#ntrea*an especiali$a
)etodo#ntea
1. public class Entrega:an extends "etodoEntrega {
2.
3. <Override
4. public )ig*eci&al get:alor;rete(Produto prod) {
%. if (prod.getPeso() =9 PESO"
+. >> prod.get3o&pri&ento() =9 3O!P?$!E@1O"
,. >> prod.getAargura() =9 A"?B4?""
-. >> prod.get"ltura() =9 "A14?"")
.. return P?E3O"(
1/. else if (prod.getPeso() =9 PESO)
11....
2E/23
"erana e %olimor+smo

A 6erana "ou especia'i4ao% s& interessante


mesmo graas H capacidade de se #a4erem
c,amadas polim-r+cas

Cma re#er;ncia dec'arada com o tipo da


superc'asse pode apontar para inst0ncias de
(uais(uer subc'asses

Ie esta re#er;ncia #or usada para c6amar


mtodos "ou consu'tar atributos% ser1 usada a
de!nio da c'asse da inst0ncia, e no da c'asse
da dec'arao "da vari1ve'%
21/23
#ntreador c,ama
polimor+camente
)etodo#ntrea

<nto, se entregador c6ama is#ntreavel em


uma vari1ve' dec'arada como re#er;ncia a
)etodo#ntrea, mas esta re#er;ncia aponta
para uma inst0ncia de #ntrea*an, ser1 usada a
verso de is#ntre.vel #ornecida por
#ntrea*an

Ou ento, se a vari1ve' apontar para uma


inst0ncia de #ntrea)ensaeiro, seria usada a
verso de is#ntreavel em
#ntrea)ensaeiro

Ou seja, dependendo da inst0ncia apontada em


tempo de execuo, ser1 e+ecutado c&digo
di#erenteB
22/23
#ntreador delea
/polimor+camente0 para
)etodo#ntrea
1. public class Entregador {
2. private !etodoEntrega78 &etodosEntrega(
3. public Entregador(!etodoEntrega78 &etodosEntrega){
4. t5is.&etodosEntrega 9 &etodosEntrega(
%. 0
+. public )ig*eci&al get:alor;rete(Produto produto) {
,. for (!etodoEntrega &etodoEntregaC &etodosEntrega){
-. if (metodoEntrega.isEntregavel(produto) 99 true)
.. return metodoEntrega.get#alor$rete(produto)(
1/. 0
11. return null(
12. 0
23/23
Assustado1 230

Jea'mente compreender o uso de Orientao a


Objetos no desenvo'vimento de so#t-are toma
tempo

You might also like