Auladehoje• EstudaremosoutrasduasestruturasdeencapsulamentodaOrientaçãoaObjetos– Classes– Pacotes
Leonardo Murta Introdução a OO 2
ParadigmaprocedimentalversusOO
Leonardo Murta Introdução a OO 3
• Oparadigmaprocedimentalorganizaoprogramaemtermosdealgoritmos
• OparadigmaOOorganizaoprogramaemtermosdeobjetos
AlgoritmosObjetos
AlgoritmosObjetos• Podemoscriarprogramapensandoemtermosdeobjetosaoinvésdealgoritmos?
• Omundoécompostodeobjetos– Umalojatemprodutos,pedidos,estoque,etc.– Umrestaurantetemmesas,garçons,comidas,bebidas,etc.
– Umauniversidadetemprofessores,alunos,disciplinas,etc.– Umarodoviáriatemônibus,passageiros,bagagens,etc.
• Esecriarmosprogramasbasicamentecriandoobjetosequivalentesaomundoreal,efazendocomqueessesobjetossecomuniquem?
Leonardo Murta Introdução a OO 4
Leonardo Murta Introdução a OO 5
• Definição– Umobjetoéarepresentaçãocomputacionaldeumelementoouprocessodomundoreal
– Cadaobjetopossuisuascaracterís;caseseucomportamento
• ExemplosdeObjetos
cadeira mesa caneta lápiscarro piloto venda mercadoriacliente aula programa computadoraluno avião
Objetos
Leonardo Murta Introdução a OO 6
• Definição– UmacaracterísOcadescreveumapropriedadedeumobjeto,ouseja,algumelementoquedescrevaoobjeto.
– CadacaracterísOcaéchamadadeatributoefuncionacomoumavariávelpertencenteaoobjeto
• ExemplodecaracterísOcasdoobjetocarro– Cor– Marca– Númerodeportas– Anodefabricação– TipodecombusSvel
CaracterísOcasdeObjetos
Leonardo Murta Introdução a OO 7
• Definição– Umcomportamentorepresentaumaaçãoourespostadeumobjetoaumaaçãodomundoreal
– Cadacomportamentoéchamadodemétodoefuncionacomoumprocedimento/funçãopertencenteaoobjeto
• Exemplosdecomportamentoparaoobjetocarro– Acelerar– Frear– Virarparadireita– Virarparaesquerda
ComportamentodeObjetos
Leonardo Murta Introdução a OO 8
Características
Comportamento
Objeto no Mundo Real
Atributos
Métodos
Objeto Computacional
MapeamentodeObjetos
ParadigmaProcedimentalversusOO(exemplo:Agenda)
ParadigmaProcedimental• Variáveis
– Vetordenomes– Vetordeendereços– Vetordetelefones
• Procedimentos– Listagemdetodososnomes– Listagemdoendereçodadoum
nome– Listagemdotelefonedadoum
nome– Adiçãodenome,endereçoe
telefone– Remoçãodenome,endereçoe
telefone
ParadigmaOO• ObjetoAgenda
– Atributo• VetordeContatos
– Métodos• ListagemdeContatos• AdiçãodeumContato• RemoçãodeumContato
• ObjetoContato– Atributos
• Nome• Endereço• Telefone
– Métodos• Exibiçãodenome,endereçoe
telefone• Ediçãodenome,endereçoetelefone
Leonardo Murta Introdução a OO 9
ParadigmaOO(Exemplo:totaldacompra)
Leonardo Murta Introdução a OO 10
Quais são os objetos participantes do cálculo do total da compra?
Pedido:12345Cliente:JoãodaSilvaEndereço:RuadosBobos,númerozero
Item Produto Preço QuanOdade Subtotal
1 Açúcar R$2,00 5 R$10,00
2 Macarrão R$2,50 2 R$5,00
3 Feijão R$3,00 3 R$9,00
TOTAL R$24,00
ParadigmaOO(Exemplo:totaldacompra)
Leonardo Murta Introdução a OO 11
Pedido:12345Cliente:JoãodaSilvaEndereço:RuadosBobos,númerozero
Item Produto Preço QuanOdade Subtotal
1 Açúcar R$2,00 5 R$10,00
2 Macarrão R$2,50 2 R$5,00
3 Feijão R$3,00 3 R$9,00
TOTAL R$24,00
Pedido12345
Item1
Item2
Item3
ProdutoAçúcar
ProdutoMacarrão
5
ProdutoFeijão
2
3
2,00
2,50
3,00
ParadigmaOO(Exemplo:totaldacompra)
• Comoobterototaldacompra?1. OobjetoCaixapediriaaoobjetoPedidoseuvalor
total2. OobjetoPedido,porsuavez,percorreriatodosos
seusobjetosItemperguntandooseuvalorsubtotalesomariaessesvalorespararesponderaoobjetoCaixa
3. CadaobjetoItemperguntariaaoobjetoProdutooseupreçoemulOplicariaessepreçopelaquanOdadequeestásendocomprada,pararesponderaoobjetoPedido
Leonardo Murta Introdução a OO 12
ClassesversusObjetos• AClasseéo;podoObjeto
Leonardo Murta Introdução a OO 14
Fonte: livro “Object-Oriented Analysis and Design with Applications”
ClassesversusObjetos• ValorestêmOposprimiOvos
– 123éumvalorinteiro– Trueéumvalorbooleano– 12,3éumvalorreal
• Objetospertencemaclasses– João,PedroePaulosãodaclassePessoa– FuscaeFerrarisãodaclasseCarro– FlamengoeFluminensesãodaclasseTime
Leonardo Murta Introdução a OO 15
TiposPrimiOvos Valores
Classes Objetos
ClassesversusObjetos• Umaclasseéumafôrma,capazdeproduzirobjetos• Osprogramadorescriamclasses,asclassesinstanciamobjetos
Leonardo Murta Introdução a OO 16
ClassePessoa
João,10anos,olhosverdes
Maria,14anos,olhosazuis
Pedro,56anos,olhos
marrons
Isabel,90anos,olhosverdes
Paulo,40anos,olhos
castanhos
Leonardo Murta Introdução a OO 17
• AclassedescreveascaracterísOcasecomportamentodeumconjuntodeobjetos– EmJava,cadaobjetopertenceaumaúnicaclasse– Oobjetopossuiráosatributosemétodosdefinidosnaclasse
– Oobjetoéchamadodeinstânciadesuaclasse– AclasseéoblocobásicoparaaconstruçãodeprogramasOO
Classes
ExemplodeClassepublic class Carro {
private int velocidade;
public void acelera() {
velocidade++;
}
public void freia() {
velocidade--;
}
}
Leonardo Murta Introdução a OO 18
Atributos (características) são variáveis globais acessíveis por
todos os métodos da classe
Métodos (comportamentos)
Criaçãodeobjetos• Aclasseéresponsávelpelacriaçãodeseusobjetosviamétodoconstrutor– Mesmonomedaclasse– SemOpoderetorno
public Carro(int velocidadeInicial) {
velocidade = velocidadeInicial; }
Leonardo Murta Introdução a OO 19
Criaçãodeobjetos
• ObjetosdevemserinstanciadosantesdeuOlizados– Ocomandonewinstanciaumobjeto,chamandooseuconstrutor
• Exemplo: Carro fusca = new Carro(10);
Carro bmw = new Carro(15); fusca.freia(); bmw.acelera();
fusca = bmw;
Leonardo Murta Introdução a OO 20
Qual a velocidade de cada carro em cada momento?
O que acontece aqui?
Leonardo Murta Introdução a OO 21
Criaçãodeobjetos• Valornull:
– UOlizadopararepresentarumobjetonãoinicializado– Quandoummétodoretornaumobjeto,elepoderetornarnullparaindicar,porexemplo,queoobjetonãofoiencontrado
– Épossívelatribuirnullparadescartarumobjetopreviamenteinstanciado
• Exemplo: Carro fusca = new Carro(10); fusca.acelera(); fusca = null;
Pacotes• UOlizadosparaagregarclassesrelacionadas• Opacotedeumaclasseéindicadonaprimeiralinhadaclasse
– Declaraçãopackage• Seumaclassenãodeclaraseupacote,o interpretadorassume
queaclassepertenceaumpacotedefault
package br.uff.ic; public class Pessoa { ... }
Leonardo Murta Introdução a OO 23
Leonardo Murta Introdução a OO 24
Pacotes• Modificadorespermitemquedeterminadasclasses
sejamvisíveisapenasparaoutrasclassesdomesmopacote
Pacotes• Semprequeforusarumaclassedeoutropacote,énecessário
importar• Aimportaçãoserealizaatravésdapalavra-chaveimport,
seguidadonomedaclassedesejada– Asimportaçõessãoapresentadasantesdadeclaraçãodaclassemasdepoisdadeclaraçãodopacote
– Aimportaçãodeumpacotenãoimportaossubpacotesrecursivamente
package br.uff.ic.prog1; import java.util.Scanner; public class Fisica { ... }
Leonardo Murta Introdução a OO 25
Regradeouroparaclassesepacotes
• Classesdevemsermapeadasemarquivoscomomesmonome– ClassePessoa– ArquivoPessoa.java
• Pacotesdevemsermapeadosemdiretórios– Pacotebr.uff.ic– Diretóriobr\uff\ic
• Seonomecompletodaclasseébr.uff.ic.Pessoa– Devehaverbr\uff\ic\Pessoa.java
Leonardo Murta Introdução a OO 26
Modificadores• Atributosemétodospodemterdiferentesvisibilidadeseescopos– Estamosatéagorausandosomenteosmodificadorespublicsta7c
– Oquesignificamessesmodificadores?– Quaisoutrosmodificadoresexistem?
Leonardo Murta Introdução a OO 28
Modificadordevisibilidade• Indicaquempodeacessaroatributooumétodo:
– Omodificadorprivateindicaqueoatributooumétodopodeserchamadoapenasporoutrosmétodosdaprópriaclasse
– Aausênciademodificadoréconhecidacomopackage,eindicaqueoatributooumétodopodeserchamadosomenteporclassesdomesmopacote
– Omodificadorprotectedindicaqueoatributooumétodopodeserchamadosomenteporclassesdomesmopacoteousubclasses;
– Omodificadorpublicindicaqueoatributooumétodopodeserchamadoporqualqueroutraclasse
Leonardo Murta Introdução a OO 29
Leonardo Murta Introdução a OO 30
• Indicaaquempertenceométodo(ouatributo)– Aoobjeto(instância)– Àclassecomoumtodo(comparOlhadoparatodasasinstâncias)
• AtributosoumétodosestáOcos(sta7c)pertencemàclassecomoumtodo– Podemserchamadosdiretamentenaclasse,semanecessidadede
instanciarobjetos
– MétodosestáOcossópodemmanipularatributosestáOcos
• Aausênciadomodificadorsta7cindicaqueoatributooumétodoédeinstância
Modificadordeescopo
Passagemporvalorvs.passagemporreferência
• Algumaslinguagenspermitempassagemdeargumentosporreferência– NãoéocasodeJava,quesemprefazpassagemporvalor
• Diferenças– Passagemporvalor=cópiadosvaloresparaoutraposiçãodememória
– Passagemporreferência=reusodaposiçãodememória
Leonardo Murta Introdução a OO 32
Passagemporvalorvs.passagemporreferência
• VariáveisquecontêmOposprimiOvos(byte,short,int,long,float,double,char,boolean)sempreocupamdiretamenteumaposiçãonamemória
Leonardo Murta Variáveis Compostas 33
6.0
‘A’
7.1
8.2
true
nota2
flaTheBest
nota1
nota3
bloco
Passagemporvalorvs.passagemporreferência
• Variáveisquecontêmobjetosnaverdadeguardamaposiçãodememóriadosobjetos
Leonardo Murta Variáveis Compostas 34
&1234
velocidade:10cor:branca
&1234
fusca
Passagemporvalorvs.passagemporreferência
• Quandoépassadoumobjetoporvalorareferênciaécopiada– Mudançasnosatributosdosobjetossãovistasdefora– Instanciaçõesdenovosobjetosnasvariáveisnãosãovistasdefora
Leonardo Murta Introdução a OO 35
ClassessãoOpos!• ClassespodemseruOlizadascomo
– Tiposdosatributosdeumaoutraclasse– Parâmetrosdeummétodo– Tipoderetornodeummétodo
Leonardo Murta Introdução a OO 36
ClassessãoOpos!class Time {
private Jogador[] jogadores; … public Jogador getJogador(int numero) { ... public void escala(Jogador jogador) { ...
} class Jogador {
private Time time; …
}
Time
Jogador
Leonardo Murta Introdução a OO 37
Exercício1• IdenOfiqueasclassesparaaseguinteespecificação:
“Osupermercadovendediferentes7posdeprodutos.Cadaprodutotemumpreçoeumaquan7dadeemestoque.Umpedidodeumclienteécompostode itens,ondecada itemespecifica o produto que o cliente deseja e a respec7vaquan7dade.Essepedidopodeserpagoemdinheiro,chequeoucartão.”
Leonardo Murta Introdução a OO 38
Exercício2• Refaçaoexercíciodaauladevariáveiscompostasusandosomenteumvetor(eclasse)nolugardedoisvetores(umdenomeseoutrodeidades)– Lembrete:oexercícioeraparalistar10pessoasordenadopornomeedepoisporidade
Leonardo Murta Introdução a OO 39
Exercício3• Refaçaoexercíciodaauladesubprogramaçãousandoumaclassepararepresentaracalculadora
Leonardo Murta Introdução a OO 40