41
Introdução a Orientação a Objetos Leonardo Gresta Paulino Murta [email protected]ff.br

Introdução a Orientação a Objetos - ic.uff.brleomurta/courses/poo/aula7.pdf · nome – Adição de nome, endereço e telefone ... seus objetos Item perguntando o seu valor subtotal

  • Upload
    ngokien

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

IntroduçãoaOrientaçãoaObjetos

[email protected]

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

CLASSES

Leonardo Murta Introdução a OO 13

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

Leonardo Murta Introdução a OO 22

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

ATRIBUTOSEMÉTODOS

Leonardo Murta Introdução a OO 27

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

Agorajásabemosler!!!

publicstaOcvoidmain(String[]args)

Leonardo Murta Introdução a OO 31

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

IntroduçãoaOrientaçãoaObjetos

[email protected]