Introduçãoa OrientaçãoaObjetos LeonardoGrestaPaulinoMurta [email protected]ff.br Auladehoje • Estudaremosoutrasduasestruturasde encapsulamentodaOrientaçãoaObjetos – Classes – Pacotes Leonardo Murta Introdução a OO 2 ParadigmaprocedimentalversusOO • Oparadigmaprocedimentalorganizaoprograma emtermosdealgoritmos • OparadigmaOOorganizaoprogramaemtermos deobjetos Algoritmos Leonardo Murta Objetos Introdução a OO 3 AlgoritmosObjetos • Podemoscriarprogramapensandoemtermosde objetosaoinvésdealgoritmos? • Omundoécompostodeobjetos – Umalojatemprodutos,pedidos,estoque,etc. – Umrestaurantetemmesas,garçons,comidas,bebidas, etc. – Umauniversidadetemprofessores,alunos,disciplinas,etc. – Umarodoviáriatemônibus,passageiros,bagagens,etc. • Esecriarmosprogramasbasicamentecriando objetosequivalentesaomundoreal,efazendocom queessesobjetossecomuniquem? Leonardo Murta Introdução a OO 4 Objetos • Definição – Umobjetoéarepresentaçãocomputacionaldeumelementoou processodomundoreal – Cadaobjetopossuisuascaracterís;caseseucomportamento • ExemplosdeObjetos cadeira carro cliente aluno Leonardo Murta mesa piloto aula avião caneta venda programa Introdução a OO lápis mercadoria computador 5 CaracterísOcasdeObjetos • Definição – UmacaracterísOcadescreveumapropriedadedeumobjeto,ou seja,algumelementoquedescrevaoobjeto. – CadacaracterísOcaéchamadadeatributoefuncionacomouma variávelpertencenteaoobjeto • ExemplodecaracterísOcasdoobjetocarro – – – – – Leonardo Murta Cor Marca Númerodeportas Anodefabricação TipodecombusSvel Introdução a OO 6 ComportamentodeObjetos • Definição – Umcomportamentorepresentaumaaçãoourespostadeumobjeto aumaaçãodomundoreal – Cadacomportamentoéchamadodemétodoefuncionacomoum procedimento/funçãopertencenteaoobjeto • Exemplosdecomportamentoparaoobjetocarro – – – – Acelerar Frear Virarparadireita Virarparaesquerda Leonardo Murta Introdução a OO 7 MapeamentodeObjetos Objeto no Mundo Real Objeto Computacional Características Atributos Comportamento Métodos Leonardo Murta Introdução a OO 8 ParadigmaProcedimentalversusOO (exemplo:Agenda) ParadigmaProcedimental ParadigmaOO • Variáveis • ObjetoAgenda – Atributo – Vetordenomes – Vetordeendereços – Vetordetelefones • VetordeContatos – Métodos • Procedimentos – Listagemdetodososnomes – Listagemdoendereçodadoum nome – Listagemdotelefonedadoum nome – Adiçãodenome,endereçoe telefone – Remoçãodenome,endereçoe telefone Leonardo Murta • ListagemdeContatos • AdiçãodeumContato • RemoçãodeumContato • ObjetoContato Introdução a OO – Atributos • Nome • Endereço • Telefone – Métodos • Exibiçãodenome,endereçoe telefone • Ediçãodenome,endereçoetelefone 9 ParadigmaOO (Exemplo:totaldacompra) Pedido:12345 Cliente:JoãodaSilva Endereç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 Quais são os objetos participantes do cálculo do total da compra? Leonardo Murta Introdução a OO 10 ParadigmaOO (Exemplo:totaldacompra) Pedido:12345 Cliente:JoãodaSilva Endereç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 Item1 Pedido12345 Item2 Item3 Leonardo Murta ProdutoAçúcar 2,00 5 ProdutoMacarrão 2,50 2 ProdutoFeijão 3,00 3 Introdução a OO 11 ParadigmaOO (Exemplo:totaldacompra) • Comoobterototaldacompra? 1. OobjetoCaixapediriaaoobjetoPedidoseuvalor total 2. OobjetoPedido,porsuavez,percorreriatodosos seusobjetosItemperguntandooseuvalorsubtotal esomariaessesvalorespararesponderaoobjeto Caixa 3. CadaobjetoItemperguntariaaoobjetoProdutoo seupreçoemulOplicariaessepreçopelaquanOdade queestásendocomprada,pararesponderaoobjeto Pedido Leonardo Murta Introdução a OO 12 CLASSES Leonardo Murta Introdução a OO 13 ClassesversusObjetos • AClasseéo;podoObjeto Fonte: livro “Object-Oriented Analysis and Design with Applications” Leonardo Murta Introdução a OO 14 ClassesversusObjetos • ValorestêmOposprimiOvos – 123éumvalorinteiro – Trueéumvalorbooleano – 12,3éumvalorreal • Objetospertencemaclasses – João,PedroePaulosãodaclassePessoa – FuscaeFerrarisãodaclasseCarro – FlamengoeFluminensesãodaclasseTime Leonardo Murta TiposPrimiOvos Valores Classes Objetos Introdução a OO 15 ClassesversusObjetos • Umaclasseéumafôrma,capazdeproduzirobjetos • Osprogramadorescriamclasses,asclassesinstanciamobjetos João,10 anos, olhos verdes Paulo,40 anos, olhos castanhos Classe Pessoa Isabel,90 anos, olhos verdes Leonardo Murta Maria,14 anos, olhos azuis Pedro,56 anos, olhos marrons Introdução a OO 16 Classes • AclassedescreveascaracterísOcase comportamentodeumconjuntodeobjetos – EmJava,cadaobjetopertenceaumaúnicaclasse – Oobjetopossuiráosatributosemétodosdefinidosna classe – Oobjetoéchamadodeinstânciadesuaclasse – Aclasseéoblocobásicoparaaconstruçãode programasOO Leonardo Murta Introdução a OO 17 ExemplodeClasse public class Carro { private int velocidade; Atributos (características) são variáveis globais acessíveis por todos os métodos da classe public void acelera() { velocidade++; } Métodos (comportamentos) public void freia() { velocidade--; } } Leonardo Murta Introdução a OO 18 Criaçãodeobjetos • Aclasseéresponsávelpelacriaçãodeseus objetosviamétodoconstrutor – Mesmonomedaclasse – SemOpoderetorno public Carro(int velocidadeInicial) { velocidade = velocidadeInicial; } Leonardo Murta Introdução a OO 19 Criaçãodeobjetos • ObjetosdevemserinstanciadosantesdeuOlizados – Ocomandonewinstanciaumobjeto,chamandooseu construtor • Exemplo: Qual a velocidade de cada carro em cada momento? Carro fusca = new Carro(10); Carro bmw = new Carro(15); fusca.freia(); bmw.acelera(); fusca = bmw; Leonardo Murta Introdução a OO O que acontece aqui? 20 Criaçãodeobjetos • Valornull: – UOlizadopararepresentarumobjetonãoinicializado – Quandoummétodoretornaumobjeto,elepoderetornar nullparaindicar,porexemplo,queoobjetonãofoi encontrado – Épossívelatribuirnullparadescartarumobjeto previamenteinstanciado • Exemplo: Carro fusca = new Carro(10); fusca.acelera(); fusca = null; Leonardo Murta Introdução a OO 21 PACOTES Leonardo Murta Introdução a OO 22 Pacotes • UOlizadosparaagregarclassesrelacionadas • Opacotedeumaclasseéindicadonaprimeiralinhadaclasse – Declaraçãopackage • Se uma classe não declara seu pacote, o interpretador assume queaclassepertenceaumpacotedefault package br.uff.ic; public class Pessoa { ... } Leonardo Murta Introdução a OO 23 Pacotes • Modificadorespermitemquedeterminadasclasses sejamvisíveisapenasparaoutrasclassesdomesmo pacote Leonardo Murta Introdução a OO 24 Pacotes • Semprequeforusarumaclassedeoutropacote,énecessário importar • Aimportaçãoserealizaatravésdapalavra-chaveimport, seguidadonomedaclassedesejada – Asimportaçõessãoapresentadasantesdadeclaraçãodaclassemas depoisdadeclaraçãodopacote – Aimportaçãodeumpacotenãoimportaossubpacotes recursivamente package br.uff.ic.prog1; import java.util.Scanner; public class Fisica { ... } Leonardo Murta Introdução a OO 25 Regradeouroparaclassesepacotes • Classesdevemsermapeadasemarquivoscomo mesmonome – 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étodospodemterdiferentes visibilidadeseescopos – Estamosatéagorausandosomenteosmodificadores publicsta7c – Oquesignificamessesmodificadores? – Quaisoutrosmodificadoresexistem? Leonardo Murta Introdução a OO 28 Modificadordevisibilidade • Indicaquempodeacessaroatributooumétodo: – Omodificadorprivateindicaqueoatributooumétodopodeser chamadoapenasporoutrosmétodosdaprópriaclasse – Aausênciademodificadoréconhecidacomopackage,eindicaqueo atributooumétodopodeserchamadosomenteporclassesdo mesmopacote – Omodificadorprotectedindicaqueoatributooumétodopodeser chamadosomenteporclassesdomesmopacoteousubclasses; – Omodificadorpublicindicaqueoatributooumétodopodeser chamadoporqualqueroutraclasse Leonardo Murta Introdução a OO 29 Modificadordeescopo • Indicaaquempertenceométodo(ouatributo) – Aoobjeto(instância) – Àclassecomoumtodo(comparOlhadoparatodasasinstâncias) • AtributosoumétodosestáOcos(sta7c)pertencemàclassecomo umtodo – Podemserchamadosdiretamentenaclasse,semanecessidadede instanciarobjetos – MétodosestáOcossópodemmanipularatributosestáOcos • Aausênciadomodificadorsta7cindicaqueoatributooumétodoé deinstância Leonardo Murta Introdução a OO 30 Agorajásabemosler!!! publicstaOcvoidmain(String[]args) Leonardo Murta Introdução a OO 31 Passagemporvalorvs. passagemporreferência • Algumaslinguagenspermitempassagemde argumentosporreferência – NãoéocasodeJava,quesemprefazpassagempor valor • Diferenças – Passagemporvalor=cópiadosvaloresparaoutra posiçãodememória – Passagemporreferência=reusodaposiçãode memória Leonardo Murta Introdução a OO 32 Passagemporvalorvs. passagemporreferência • VariáveisquecontêmOposprimiOvos(byte,short, int,long,float,double,char,boolean)sempre ocupamdiretamenteumaposiçãonamemória Leonardo Murta nota1 8.2 flaTheBest true nota2 6.0 nota3 7.1 bloco ‘A’ Variáveis Compostas 33 Passagemporvalorvs. passagemporreferência • Variáveisquecontêmobjetosnaverdade guardamaposiçãodememóriadosobjetos velocidade:10 cor:branca fusca Leonardo Murta &1234 &1234 Variáveis Compostas 34 Passagemporvalorvs. passagemporreferência • Quandoépassadoumobjetoporvalora referênciaécopiada – Mudançasnosatributosdosobjetossãovistasdefora – Instanciaçõesdenovosobjetosnasvariáveisnãosão vistasdefora 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! Time class Time { private Jogador[] jogadores; … public Jogador getJogador(int numero) { ... public void escala(Jogador jogador) { ... } Jogador class Jogador { private Time time; … } Leonardo Murta Introdução a OO 37 Exercício1 • IdenOfiqueasclassesparaaseguinte especificação: “Osupermercadovendediferentes7posdeprodutos.Cada produtotemumpreçoeumaquan7dadeemestoque.Um pedidodeumclienteécompostodeitens,ondecadaitem especifica o produto que o cliente deseja e a respec7va quan7dade.Essepedidopodeserpagoemdinheiro,cheque oucartão.” Leonardo Murta Introdução a OO 38 Exercício2 • Refaçaoexercíciodaauladevariáveiscompostas usandosomenteumvetor(eclasse)nolugarde doisvetores(umdenomeseoutrodeidades) – Lembrete:oexercícioeraparalistar10pessoas ordenadopornomeedepoisporidade Leonardo Murta Introdução a OO 39 Exercício3 • Refaçaoexercíciodaauladesubprogramação usandoumaclassepararepresentaracalculadora Leonardo Murta Introdução a OO 40 Introduçãoa OrientaçãoaObjetos LeonardoGrestaPaulinoMurta [email protected]ff.br