Você está na página 1de 692
PN ela arya Aporaauniies Os principais conceitos e praticas da programacao orientada a objetos em apenas 21 dias Apliqne Eyer eol al alta lun alco} ao mundo real BY LCT OEE DETTE AM Tans Aprenda Programagao Orientada a Objetos em 21 Dias Tony Sintes Tradugao ‘Joao Eduardo Nébrega Tortello Revisdo Técnica ‘Ana Fernanda Gomes Ascencio el em Ciéncia da Computagdo pela PUC-SP Especialista em Sistema de Informacao pela UFSCAR e mestre em computagio pela UFRGS Bach: TaN onl veered i Tee} Séo Paulo Brasil Argentina Colémbia Costa Rica Chile Espanha Guatemala México Peru Porto Rico Venezucla © 2002 by Pearson Education do Brasil Titulo Original: Object Oriented Programming in 21 Dias © 2002 by Sams Publishing Todos 0s direitos reservados Editora: Gisélia do Carmo Costa Gerente de Produgéo: Silas Camargo Produtora Editorial: Sandra Cristina Pedri Roviogo: Jorgo Abdalla Noto Capa: Marcelo da Silva Frangozo, sobre 0 projeto original Editoragao Eletrénica: ERJ Informatica Lida. Dados de Catalogagio na Publicagéo Sintes, Tony Aprenda Programagao Orientada a Objetos em 21 Dias ‘Tradugao: Joao Eduardo Nébrega Torello Revisao Técnica: Ana Fernanda Gomes Ascencio Sao Paulo: Pearson Education do Brasil, 2002 Titulo Original: Object Oriented Programming in 21 Dias ISBN: 85.346.1461-X indice para Catélogo Sistematico 1. Programagao Orientada a Objetos 2002 Direitos exclusivos para a lingua portuguesa cedidos & Pearson Education do Brasil, uma empresa do grupo Pearson Education Av. Ermano Marchetti, 1435 CEP 05038.001 - Lapa - Sao Paulo ~ SP Tel: (11) 3613-1222 Fax: (11) 3611-0444 e-mail: vendas@ pearsoned.com Sobre o autor TONY SINTES trabalha com tecnologias orientadas a objetos ha sete anos. Nesse tempo, Tony fez parte de muitos trabalhos de desenvolvimento orientados a objetos de larga escala. Atual- mente, Tony trabalha na First Class Consulting, uma empresa que fundou para ajudar as grandes empresas a integrar seus diversos sistemas em uma estrutura unificada. Antes de iniciar a First Class Consulting, Tony trabalhou na BroadVision como consultor sénior, onde ajudou a cons- truir alguns dos maiores sites Web do mundo. Atualmente, as principais responsabilidades de Tony so como arquiteto, lider técnico ¢ mentor da equipe, ajudando a construir as habilidades em desenvolvedores menos experientes. Tony é um autor técnico amplamente reconhecido, cujos trabalhos tém aparecido na JavaWorld, Dr. Dobb's Journal, LinusWorld, JavaOne Today e Silicon Prairie, onde é co-autor de uma co- luna mensal altamente respeitada sobre programagao orientada a objetos. Atualmente, Tony es- creve a coluna mensal de perguntas e respostas da JavaWorld, Vocé pode entrar em contato com ele no endereco siyoopiaifirstclassconsulting.net. Agradecimentos Escrever um livro 6 um proceso como nenhum outro. A quantidade de pessoas que colaboram em um livro, e que sao necessdrias para produzir a c6pia final que voce estd lendo agora, é sim- plesmente espantoso. Gostaria de estender minha gratidao equipe inteira de editoriais da Sams. Sem seu trabalho Arduo, este livro simplesmente nfo e: Pelonome, gostaria de agradecer'a Michael Stephens, Carol Ackerman, Tiffany Taylor e George Nedeff. A lideranga e toques sutis de Carol foram o que realmente fizeram este livro prosseguir até sua conclusao. A capacidade de Tiffany de estruturar ¢ encadear o mate! 0, Clara e concisamente, é simplesmente espantosa. Nao apenas as edigdes de Tiffany tornaram este livro mais legivel, mas acho que seu trabalho me ensinou algumas ligdes valiosas sobre redagao tée- a. Também gostaria de agradecer a William Brown. William entrou em contato comigo a respeito do projeto STY OOP, no inicio de agosto de 2000. Confiar tal projeto a um autor relativamente desconhecido era arriscado e agradego a William por me dar a chance de escrever este livro. técr Agradego especialmente aos editores tecnicos, Mark Cashman e Richard Baldwin, que garanti- ram que 0 material apresentado fosse teenicamente bom. Agradego a vocés pela atuaco técnica, Aos meus colegas, muito obrigado. Gostaria de estender os agradecimentos especiais a David Kime Michael Han, Eucamecei este livro enquanto estava na Broad Vision e gostariade agrade- cer a David Kim por me permitir aquelas férias de panico, quando os prazos de entrega comega- ram a se aproximar. Também gostaria de agradecer a Michael Han, por suas idéias técnicas e por escrever 0 apéndice sobre Java deste livro. Por iltimo, mas nao menos importante, tenho o privilégio de agradecer a minha maravilhosa es- posa, Amy, por seu apoio firme, revisdo e paciéncia, Agradego ainda a minha familia e amigos, que ofereceram seu apoio e que ouviram minhas reclamagées. Diga-nos 0 que vocé acha! Como leitor deste livro, vocé & nosso critico e colaborador mais importante. Valorizamos sua opiniao e queremos saber o que estamos fazendo corretamente, o que poderfamos fazer melhor, sobre quais areas vocé gostaria de nos ver publicando e qualquer outra sugestao importante que deseje passar para n Ss. Receberemos com satisfacdio seus comentérios. Vocé pode enviar um fax, e-mail ou escrever di- retamente, para que possamos saber o que gostou ou nao neste livro — assim como o que pode- mos fazer para tomar nossos livros melhores. Por favor, entenda que ndo podemos ajudé-lo em problemas técnicos relacionados ao assunto deste livro € que, devido ao grande volume de correspondéncia que recebemos, nao possamos responder a todas as mensagens. Quando vocé escrever, certifique-se de incluir 0 titulo e 0 autor deste livro, assim como seu nome ¢ nimero de telefone ou fax. Examinaremos seus comentarios cuidadosamente e os com- partilharemos com os autores e editores que trabalharam no livro. Fax: (11) 3611-9686 Fone: (11) 3613-1213 Enderego eletrénico: clientes@makron.com.br Enderego postal: Pearson Education do Brasil Lida Rua Emilio Goeldi, 747 — Lapa Sao Paulo — SP — CEP: 05065-110. Sumario SEMANA 1 Dia 1 Dia 2 Introdugao xxl Sobre os exemplos eeities y . XXIV que vocé precisa saber para usar este livro XXIV Definindo OO 1 Introducao a programacao orientada a objetos Programacio orientada a objetos em um contexto histérico: + Precursores da POO: «- - Programagdio orientada a objetos =< = +++ 9+ Uma estratégia de POO para software usando objetos - O que é uma classe? +» - Reunindo tudo: classes e ebjers Fazendo 0 objetos trabalhar Relacionamentos de objeto - Como a programagao orientada a objetosf fundamenta o passado- 14 Vantagens e Secs da OO + y sinteie 4 Natural: 1s Confidvel - Is Reutilizavel «=~ -- “15 Manutenivel “16 Extensivel - 16 Oportuno « 16 Armadilhas: © = +++ +++ 16 Armadilha 1: pensar na POO simplesmente como uma linguagem 7 Armadilha 2: medo da reutilizago = +++ +++ ++ 222+ ee eee 7 Armadilha 3: pensar na OO como uma solugde a tudor srs re reese ee AT Armaclila proer amiss eapirte : : 7 18 A proxima semana ~~ -- Gee 18 Resumo - 18 Perguntas e respostas - - 19 Workshop - : 19 Teste : peereseeees 19 Exercicios -- ++ ++ 00s 0 eee e nese nee e rene ee renee en ener seers e620 Encapaulamento: aprenda a manter os detalhes consigo mesmo a Encapsulamento: o primeiro pilar - -- Um exemplo de interface e implementagao x Aprenda Programacao Orientada a Objetos em 21 Dias Dia 3 Pablico, privado e protegido s+ +++ ++ +5000 e sree eters reser senses ses 25 Por que voce deve encapsular? © +++ +++ 25 Abstragdo: aprendendo a pensar e programar de forma abstrata 26 que é abstragaio? «- forte eeees 26 Dois exemplos de abstragio - + : 27 Abstragio eficaz: +++ +++ +++ perenne eee etree 28 Guardando seus segredos através da ccultagzo da Ja implementagto peeee seen 29) Protegendo seu objeto através do TAD (Abstract Data Type — Tipo Abstrato de Dados): + erent eee eee ee +30 © que € um tipo? 30 Um exemplo de TAD «+--+» satiom facie . wees Protegendo outros de seus segredos, através da ocultagdio da implementagio - - 34 Um exemplo real de ocultagaio da implementacfio - - 36 fo-da responsebiliade: preocupando-ea com sou proprio negéeio +++ 37 Dicas e armadilhas do encapsulamento « : : 41 Dicas e armadilhas da abstragao - - 4l Dicas e armadilhas do TAD- 43 Dicas da ocultagao da implementagio Como o encapsulamento atende os objtivos da programago orientada a objetos « . Adverténcias «+++ +0 seer ee ee se Resumo +++: Perguntas e respostas + Workshop - Teste - Exercicios - Encapsulamento: hora de escrever algum cédigo. Laboratorio 1; configurando 0 ambiente Java> ++ +++ ++ Exposicio do problema: +++ ++ +++ ++ Laboratério 2: classes bisicas: + - Exposigio do problema = Solugbes ¢ discusstio: «-= +++ anid calves Laboratério 3: 0 encapsulamento--+ +--+ +> Exposigio do problema: + - - tenes Solugdes ¢ discussfio +++ +606 6e eee eens ees Uaborasirio 4: estudo-de-cazo — os pacotes de primitives Java (opcional) «=~ = €2 Exposigio do problema pen tei? 66 Solugdes ¢ discusstio- 66 Perguntas e respostas - 67 Workshop - + Teste +++ Exercicios - Sumario Xl Dia 4 Dias Heranga: obtendo algo para nada n © que € heranga? « ‘ 1 Por que herang: te pr een stern ne rene ener eees m4 “€ um” versus “tem um”: aprendendo quando usar heranga - 75 Aprendendo a navegar na teia emaranhada da heranga + « Mecfiniea da heranga pettitetne es Metodos ¢ atributos sobrepostos *+ ++ ++ +++ Novos métodos e atributos +++ +++ ++ +++ Métodos e atributos recursivos Tipos de heranga - Heranga para implementagao- - Problemas da heranea da implementagao - Heranga para diferenga ~~~ : : Especializacao - teens Heranga para substituigaio de ae, Dicas para a heranga eficaz:-- + Resumo « feet Como a heranga atende aos objetivos da OO - Perguntas e respostas - Workshop ° Teste - Exercicios » Heranga: hora de escrever algum cédigo Laboratorio 1: heranga simples -« Exposicio do problema: +--+ Solugies e discussfio- +++ +++ + Laboratério 2; usando classes abstrats para heranga planejada- Exposigiio do problema: Solugdes e discussao- Laboratéri 3: conta em banco — pratcando a heranca simples - see 107 Uma conta genérica « settee ees “107 A conta poupanga* “107 Uma conta com vencimento programado “107 Conta com cheques: - : “107 Conta com cheque especial: ++ +++ ++ seers rere ee reste terres eee ees 108 Exposigiio do problema: « Exposigio estendida do problema Solugbes e discussdio- «++ +++ Laboratério 4: estudo de caso — “é um”, “tem um” ¢ java.util.Stack: Exposig&io do problema: - SG ENRON a Suluydes © diseussau eae Resumo - + Perguntas € respostas «+--+ +--+ +++ Sa eae Sehr Xil Aprenda Programacao Orientada a Objetos em 21 Dias Dia é Dia7 NcnShops ee Teeter eee beet ee cee ee cee eee eee ee es 120 Teste - 120 Exercicios - “120 Polimorfismo: aprendendo a prever o futuro 121 POM TRA iS ie Sa nce e Scone SH +122 Polimorfismo de inclustio «+++ ++ “126 Polimorfismo paramétrico = + +++ +++ sees +131 Métodos paramétricos 131 Tipos paramétricos - - +133 Sobreposigio ++ +++ +7134 Sobrecarga * +135 Conversiio - +137 Polimorfismo eficaz » 137 Armadilhas polimorficas: «+++ +++ ++ ++ +139 Armadilha 1: mover comportamentos para cima na hierarquia- “140 Armaaltha 2: sobrecarga de desempenho “140 Armaditha 3: vendas- + +++ +++ tee “141 ae NN cr er eget) “142 Como 0 polimorfismo atende os objetivos da 00 -- sees “142 Bacio career Oe eee ee Canon eon eee Perguntas e respostas 144 Workshop: +++ +++ +++ 145 Teste-+++- 145 Exercicios « +145 Polimorfismo: hora de escrever algum codigo 147 Laboratério 1: aplicando polimorfismo: +++ +++ ++ e+ ee 0ee 085 sees 147 Exposigiio do problema: + vente : +154 Solugdes ¢ discussie : coe sees 155 Laboratorio 2: conta de banco — aplicando polimorfismo « em um exemplo conhecido: » PRISER. em Exposi¢ao do problemas Solugdes e discussaio- Laboratério 3: conta de banco — usando polimorfismo para escrever cédigo A prova do fituro © ++ 66s essere ence newness ee) Exposigio do problema: +++ ++ - 162 Solugdes e discussaio- “ +163 Laboratério 4: estudo de caso — estruturas condicionais Java ¢ poli 165 Corrigindo uma estrutura condicional “167 Exposigdo do problema: - Solugées ¢ discussao: Resumo sss seers secre Sumario xill Perguntas ¢ respostas “13 Workshop: «+ 173 Teste - 173 Exercicios ++ +++ +++ r+ ee ++ 1B Semana 1 Emreviséo 174 Semana 2 Aprendendo a aplicar OO 175 Dia 8 Introdugdo a UML 7 Introdugio a Unified Modeling Language «+++ ++ ++ +++s8sseeeseeeeeee 177 Modelando suas classes-+ +--+ ++ 02+ 2+ ee2005 “179 Notagao bisica de classe+ ++ ++ see +179 Notagdo avangada de classe ++ cents senses 181 Modelando suas classes de acordo com seus objetivos -- “181 Modelando um relacionamento de classe -- ~~ - - 183 Dependéncia: SAAS NEN + 183 Associagiio- +184 Agregagdo - - 186 Composigao * 187 Generalizagao- +188, Reunindo tudo +189 Resumo « +190 Perguntes ¢ respostas “191 Workshop: = -- ++ =* 191 Teste = s+ eeee cee ee ees “191 Fivercioica sag am eacio eee Se ee aE Dia 9 Introdu¢ao a AOO (Analise Orientada a Oban) 193 O processo de desenvolvimento de software: - SRE TA RAR RNAI I +194 © processo iterativo - 195 Uma metodologia de alto nivel "++ ++ 020202500508 seee 197 AOO (Anélise Orientada a Objetos): - 198 Usando casos de estudo para descobrir 0 uso do sistema: ++ ++ +++ ++ 8+ ++ ++ 199 Crie uma lista preliminar de casos de uso ++ ++ ++ +++ ++ *201 Construindo 0 modelo de dominio: - - - se 21B E agora? 214 Resumo => >> +7215 Perguntas e¢ respostas +216 Workshop: +++ 1005s 0s seer es 216 Teste 216 Exereiclos «+++ + seers scenes peeee neers : 217 Dia 10 Introdugao ao POO (Projeto Orientado a Objetos) 219 POO (Projeto Orientado a Objetos) «++ ++ ++ eres ee ee ee es : +220 XIV Aprenda Programagao Orientada a Objetos em 21 Dias Dia 11 Dia 12 Como vocé aplica POO (Projeto Orientado a Objeto)?: Passo 1: gere uma lista inicial de objetos * «- Passo 2: refine as responsabilidades de seus objetos - Passo 3: desenvolva os pontos de interac «++ ++ ++ Passo 4: detalhe os relacionamentos entre os objetos Passo 5: construa seu modelo - Resumo sss steer ee eeeeeeees Perguntas e respostas «++ +++ +++ Workshop: ++ ++ 205s e555 Teste Exereicios *+ + Fisrsesafne pai toe ttravss 86 pane at pvodets 237 Reutilizagao de projeto : Padrdes de projeto «+++ ++ © nome do padrao «++ -- © problema +++ ++ +++ ++ A solugio: + As consequéncias Realidades do padrao - - Padrées por exemplo- padrdo Adapters +++ ++ 200s rest ee eset nen ne ee ee tence e eee 2 © padrao Proxy © padrao Iterator = +++ ++ +++ Apossando-se de um padrao Resumo = +++ => Perguntzs e respostas «+ Workshop: °° - Teste oss sere rere ee ees Exercicios « Respostas do teste: Respostas dos exercicios Padres avancados de projeto 263 Mais padrdes por exemplo: + «+ ++ O padraio Abstract Factory - - - O padrao Singleton: ++ +++ +++ padrao Typesafe Enum - + «+ Armadithas do padrto: ” Resumo ++ +++ +0505 Perguntes € respostas Workshop: =: - Teste - $ Exercicios «++ +++ +++ Fil We SEAMEN PRET ReAoes RD, Sumario XV Dia 13 Dia 14 ‘SEMANA 2 Semana 3 Dia 15 Respostas do teste: ~~ - 284 Respostas dos exercicios: ++ ++ ++ +++ e+ 20+ aia tases eatin aese 285 00 e programagao dainterfacecomo usuario 289 POO ea interface com 0 usudi 2 : nes 289) A importncia das Uls desacopladas * ++ ++ +++ « : seers 90 Como desacoplar a UI usando 0 padraio Model View Controller ~ si 293 © modelo: « eee sees $204 © modo de visualizagto © controlador: +++ ++ = Problemas como MVC Uma énfase nos dados -- Acoplamento forte «++ ++ Ineficiéncia Resumo + ° + Perguntas e rele . Workshop: + + vee Teste «++ ++ eee ine ceiescanntereuniaaneermocsure Construindo software confiavel através de testes Testando software OO +++ Testes e 0 processo de desenvolvimento de software iterativo- - ata: 7314 Formas de teste: ROO) Teste de unidade- Teste de integragao - 318 Teste de sistemas: +++ ++ +++ Teste de regressfio «++ +++ +++ Um guia para escrever cédigo confidvel- 319 Combinando desenvolvimento e teste +++ 319 Escrevendo c6digo excepeional ++ ++ +0 errr renee er eee ee ener rene 9335 Escrevendo documentagto eftcaz 336 Resumo ++ +++ s+ reereee ees 339 ergata e respostas 330 Workshop: « 340 Teste == tisigestinin nies “341 Exercicios + teeeteterenees “341 Emrevisao 342 Reunindo tudo: um projeto 00 completo 345 Aprondendo a combinar teria @ proceseo 27 Jogo Vinte-e-um 347 Por qué vinte-e-um? + +348 XVI Aprenda Programacao Orientada a Objetos em 21 Dias Declaragaio da visio - -348 Requisitos de sobreposigao - - +349 Anilise inicial do jogo vinte-e-um +349 As regras do jogo vinte-e-um + +350 Criando uma lista preliminar de casos de uso- +353 Planejando as iteragdes -+ +++ +802 ee ee 353 Iterago I: jogo basico +++ ++ +354 Iteragdo 2: regras «+++ ++ ++ ++ +355 Iteragao 3: aposta + : +355 Iterago 4: interface com 0 usuario Bsa 55 lteragto 1: jogo bisico «+ +--+ +356 Aniilise do jogo vinte-e-um: «+ +356 Projeto do jogo vinte-e-um - - + +360 A implementagio + +++ +0200 0s re sree eee ener eens renee n ee £365: Resumo - : - 380 Perguntas © respostas - +381 Workshop: - “381 Teste - “381 Exereieios -+ +002 0e ee eee “381 Dia 16 Iteracéo2 dojogo vinte-e-um: adicionandoregras 383 Regras do jogo vinte-e-um ++ ++ s1e seer eee ee sete ee estes eee ne s+ 383 Aniilise das regras 384 Projeto das regras- +++ +++ ++ 388 Implementagio das regres +395 Teste - +++ +409 Resumo + +++ +++ : 409 Perguntes € respostas * : : sess + 410 Workshop: ++ ++ esse essere rece reese ee ee seen t ee ee eres ee rere eee Teste: +++ “41 Exercicios - : : ail Dia 17 Iteragdo3 dojogo vinte-e-um: adicionando aposta 413 Aposta no jogo vinte-e-um ==> - ++ +--+ e000 “413 Anilise da aposta - +414 Projeto da aposta » -417 Implementagao da aposta - > - +420 A implementag&o de Bank (Banco) + => - -421 Um equeno deste: um objeto falsificado = -427 Regan >> . - 454 A filosofia do PAC: ++ ++ +++ sete +454 Quando usar o saias de projeto PAC: - +455 Analisando a GUI PAC do jogo vinte-e-um “455 Projetando a GUI PAC do jogo vinte-e-um - +455 Identificando os componentes da camada de apresentacao- - 456 Projetando os componentes de camada de abstragio - 457 Projetando a camada de controle = +--+ +++ ++ ++ - 458 Usando 0 padrao Factory para evitar erros comuns - - 458 Implementando a GUI PAC do jogo vinte-e-um > +> =~ - 460 Implementando VCard e VHand = +460 Implementando VBettingPlayer + 462 Implementando VBlackjackDealer- +464 Implementando GUIPlayer - - - 465 Reunindo tudo com o Controle - 465 RAbHG Ga)ssianis wasn 468 Peiyuntas © respustas eee 468 Workshop: : 468 XVII Aprenda Programacao Orientada a Objetos em 21 Dias Dia 21 SEMANA 3 Apéndices Teste Exercicios - + - ndo-se com o polimorfismo: ~ Criando um jogador 0 iogador seguro - « Adicionando SafePlayer na GUI ++ + Aperfeigoamento POO e simulagoes: - + «+ Os jogadores do jogo vinte-e-um- Resumo - : : Perguntas e respostas +++ ++ Workshop: Testes +++ + Exereicios ~ O Gitimo quilémetro ‘Amarrando as pontas. - + Refazendo 0 projeto do jogo vinte- sistemas-+ ++ + - Identifcando as ventagens/que'a POO tours pars'e vinte-e-um +++ Realidades do setor e POO - - Resumo « : Perguntas e respostas Workshop: - - Teste - Exercicios - Emrevisao Apéndice A Respostas Dia I Respostas do testes +++ +0065 Respostas do teste: *- Dia 2 Respostas do teste e dos exercicios Respostas do teste: Respostas dos exercicios: = ++ Dia 3 Respostas do teste e dos exercicios Respostas do teste- Respostas dos exercicios +++ ++ ++ Dia 4 Respostas do teste e dos exercicios Respostas do teste: = +--+ = ++ istema do jogo 497 +497 +497 +499 +499 - 501 - 501 - 501 aileat terete aalareateiNTO3 SOB - 505 +505 Sumario XIX Respostas dos exercicios: - Dia 5 Respostas do teste Respostas do teste Dia 6 Respostas do teste e dos exercicios Respostas do teste: «++ «+++ ++ ++5++ Respostas dos exercicios: +++ +++ Dia 7 Respostas do teste = +++ ++ +++ ++ Respostas do teste: +++ ++ +++ ene Dia & Respostas do teste e dos exercicios Respostas do teste Respostas dos exercicios: «> =» Dia 9 Respostas do teste e dos exercicios- - Respostas do teste: +++ ++ +++ sere reer ee Respostas dos exercicios Dia 10 Respostas do teste dos exercicios~ Respostas do testes «+++ +++ Respostas dos exercicios: - -- Dia 11 Respostas do teste e dos exercicios- + Respostas do teste: Respostas dos exercicios* Dia 12 Respostas do teste e dos exercicios- Respostas do teste: +++ ++ 2005055 es 8 Respostas dos exereicios: + ++ Dia 13 Respostas do teste © dos exercicios: » Respostas do teste: - settee Respostas dos exercicios Dia 14 Respostas do teste e dos exercicios- - « Respostas do teste: +++ +++ es sre eres Respostas dos exercicios: - - - Dia 15 Respostas do teste e dos exercicios: « Respostas do teste: +++ +--+ +> eet Respostas dos exercicios: «+++ Dia 16 Respostas do teste © dos exereicios Respostas do teste- ween Respostas dos exercicios~ Dia 17 Respostas do teste e dos exercicios- « Respostas do teste: s+ + 05-0 tees Respostas dos exercicios: + Dia 18 Respostas do teste € dos exercicios- Respostas do teste Respostas dos exercicios+ «+ + Dia 19 Respostas do teste € dos exercicios Respostas do teste: = +++ +++ +++ : - 507 + 508 ++ 508 + 508 + $08 510 “SIL “SL +512 512 513 +515 +515 SIT “517 “S17 2519. + $20 + $20 +521 + $23 + $23 +524 - 528 - 528 = $20 -531 531 +532 +533 533. + $33 534 “534 +534 + 536 +536 - 536 +540 +540 + $40 + $43 +543 XX Aprenda Programacao Orientada a Objetos em 21 Dias Respostas dos exercicios: - : Dia 20 Respostas do teste e dos exercicios: Respostas do teste = ++ ++ =+ +> Respostas dos exercicios: = + - + Dia 21 Respostas do teste e dos exercicios- + Respostas do teste: == += 072505 Respostas dos exercicios: +++ +++ +++ Apéndice B Resumo do Java 555 O Java Developer's Kit: J2SE 1.3 SDK: + nee +555 Configuragao do ambiente de desenvolvimento ~ 356 Panorama das ferramentas do SDK 337 Compilador Java: javac: + +357 Interpretador Java: java: 558 Utilitario de _compactagao de arquivos Java: jar +558 Documentacio Java e 0 gerador de documentagao: javadoc - +559 Cercadinho Java: seu primeiro programa Java Compilando ¢ executando Criando um arquivo jar » Gerando javadoc: - +> - ~~ Mecfnica da linguagem Java Classe Java simples « - -- Tipo de Dados - : Varidveis »++ ++ +0000 eee eeee Constantes - Operadores- Estruturas condicionais Lagos ou estruturas de repetigao - Classes ¢ interfaces — blocos de construgio da linguagem Java - Usando classes ja existentes -+ +++ +++ +> Criando suas proprias classes ++ +++ +++ ++ Interfaces «++» > Classes internas e classes internas anonimas: « Resuinig oo std maeaannac sien nem mmarasians Apéndice C Referéncia da UML Referéncia da UML - Classes: - Objeto +++ - Visibilidade Classes e métodos abstratos: - - sNotaseeroe ase Esteredtipos cone Relaclonamientverout TeaxtanmtcS tte seen zy Sumario XXI Dependénci Associagao Papéis -- Multip Agregacaio Composigio « - - Generalizagaio- Diagramas de interagdio~ Diagramas de colaboragao- + + + 586 Diagramas de seqtiéncia seen 86) Apéndice D Bibliografia selecionada 587 Anilise, projeto e metodologias- - preeeee Programagao com C++ > ” Padres de projet -- Principios e teoria geral da OO -- Teoria “Hard Core” (mas nfo deixe isso assusti-lo!) ++ Programagio com Java Miscelanea- ‘Smalltalk > - Teste = Apéndice E Listagens do cédigo do jogo vinte-e-um 591 blaclgackicotes -- + ees a a mers blackjack.core.threaded - blackjack.exe blackjack. players blackjack.ui blackjack.ui.mve- blackjack.ui.pac - indice Remissivo Introdugao Este livro adota uma estratégia pratica para ensinar programagdio orientada a objetos (POO). Em vez de ensinar POO em um nivel académico, este livro apresenta ligdes e exemplos avessiveis € amigaveis, para permitir que vocé comece a aplicar POO imediatamente. Em vez de tentar ensi- nar cada detalhe tedrico, este livro destaca os assuntos que vocé precisa conhecer para poder aplicar POO em seus projetos didrios —e nao perder seu tempo se degladiando em algum debate teorico. O objetivo deste livro é fornecer a voce uma base sélida sobre programagao orientada a objetos. Apés 21 dias, vocé devera ter uma boa idéia dos conceitos bésicos da POO. Usando essa base, vocé pode comegar a aplicarconceitos de POO em seus projetos didrios, assim como continuara construir seus conhecimentos de OO, através de estudo adicional, Vocé niio aprenderé tudo a respeito de POO em 21 dias —isso simplesmente nao € possivel. Entretanto, € possivel construir uma base sdlida e comegar com o pé direito. Este livro 0 ajuda a fazer exatamente isso. Dividimos este livro em tres partes. A Semana | apresenta os tres principios da POO (também conhecidos como os trés pilares da POO). Esses tr8s prineipios formam a base da teoria da orien- tagfio a objetos. O entendimento desses trés principios é absolutamente fundamental para enten- der POO. As ligdes da semana estao divididas entre apresentagdo da teoria e o fornecimento de experiéncia pratica, através de laboratérios. A Semana 2 apresenta o processo de desenvolvimento de software OO. Embora as ligdes do Ca- pitulo 1, “Introdugdo a programagao orientada a objetos”, sejam importantes, mandé-lo progra- mar sem qualquer outra instrugo é como dar a vocé madeira, uma serra, um martelo e alguns pregos, ¢ dizer para construir uma casa, A Semana 2 mostra como aplicar as ferramentas apre- sentadas nas ligdes da Semana 1. A Semana 3 0 conduz em um esiudo de caso completo, de um jogo de cartas OO. Esse estudo permitird que vocé percorra um ciclo de desenvolvimento OO inteiro, do inicio ao fim, assim como pratique a escrita de algui teoria da OO ¢ tome as coisas mais concretas. cédigo. Fsperamos que esse estudo de caso ajude a esclarecera Também existem varios apéndices no final do livro. De importancia especial é 0 “Resumo do Java”, no Apéndice B, ¢ a bibliografia selecionada, no Apéndice D. O Apéndice B serve como um guia excelente paraa linguagem de programagio Java. A bibliografia mostra os recursos que vocé desejard consultar, quando continuar seus estudos de POO. Esses recursos certamente fo- ram valiosos para escrever este livro. Sobre os exemplos Todos os exemplos de cédigo-fonte foram escritos em Java. Algumaexperiéneia em Java ajuda- ; entretanto, o Apéndice B deve ajudé-loa ter velocidade, caso vocé esteja enferrujado ou nun- catenha visto a linguagem antes. Desde que vocé tenha algum conhecimento de programagao, 98 exemplos fio os mais acessiveis. Os recursos e truques especiais do Java foram particular. mente evitados nos exemplos, O que vocé precisa saber para usar este livro Este livro presume alguma experiéncia anterior em programagao e nao tenta ensinar programa- gai basica. Este livro pega o conhecimento que vocé jé tem e mostra como pode usé-lo para es- crever software orientado a objetos. Ou escrever software orientado a objetos melhor. Isso nao. quer dizer que vocé precisa ser um guru de programaggo para ler ¢ entender este livo —um cur so de programagao introdutorio ou simplesmente a leitura de um livro de programagao é todo 0 conhecimento que vocé deve precisar. Para poder tirar total proveito dos exemplos e exercicios, vocé também precisara de um compu- tador com acesso A Internet. A escolha do ambiente operacional e do editor ficam completamen- te por conta de seu gosto pessoal. O tinico requisito € que vocé possa fazer download, instalar € executar Java. O Apéndice B 0 conduz pelo processo de obtengao de um SDK Java. Finalmente, vocé precisa de determinagao, dedicagao ¢ uma mente aberta. A programagao orien tada a objetos nao € facil e voc€ demorara mais de 21 dias para dominar, mas aqui vocé pode ter um inicio bom e sélido. O mundo maravilhoso da POO esté 4 espera... SEMANA 1 Definindo OO es = wauee Introdugio & programagio orientada a objetos Encapsulamento: aprenda a manter os detalhes consigo mesmo Encapsulamento: hora de escrever algum cédigo Heranga: obtendo algo para nada Heranga: hora de escrever algum eédigo Polimorfismo: aprendendo a prever o futuro Polimorfismo: hora de escrever algum eédigo Panorama Os proximos sete dias fomeceriio a vocé uma base sdlida sobre programagao orientadaa objetos. ODia | descreve os fundamentos da OO (orientado a objetos). Vocé aprende a respeito de orien- tagdo a objetos a partir de uma perspectiva historica e vé como a OO evoluiu a partir de lingua- gens de programagio existentes. Vocé também aprende a terminologia basica, assim como as vantagens ¢ armadilhas da programagao orientada a objetos. Os dias 2, 4 e 6 apresentam os trés pilares da programacio orientadaa objetos: encapsulamenio, heranca e polimorfismo. Esses capitulos nio apenas explicam os fundamentos da programagio orientada a objetos, mas como ¢ quando usé-los, assim como os e7ros @ serem evitados. Os dias 3, Se 7 fornecem laboratérios correspondentes a cada um des trés pilares. Cada capitulo de laboratério fornece experiéncia prética que Ihe permite se familiarizar-se com os pilares apre~ sentados nos dias 2, 4 € 6, ‘Apés concluir a primeira semana, voré deverd ter um entendimento completo do qué constitui um programa orientado a objetos. Voré deve poder identificar os trés pilares da OO eaplicé-los em seu cédigo. Testes ¢ exercicios seguem a ligao de cada dia, para ajuda-lo.a entender melhor os assuntos abor- dados. As respostas de cada pergunta dos testes ¢ exercicios aparecem no Apéndice A. SEMANA 1 DIA 1 Introducao a programacao orientada a objetos Embora as linguagens orientadas a objetos jé existam desde a década de 1960, os iltimos 10 anos tém visto um crescimento sem paralelo no uso € na aceitagdo de tecnologias de objeto, por todo o setor de software. Embora tenham comegado como algo secundario, sucessos recentes, como Java, CORBA ¢ C++, tém impulsionado as técnicas orientadas a objetos (OO) para novos niveis de aceitago. Isso niio é por acaso. Apés anos presa nos meios académicos e tendo de lutar uma ardua batalha contra as praticas entrincheiradas, a programagdo orientada a objetos (POO) amadureceu até 0 ponto onde as pessoas séo finalmente capazes de perceber as promesses que a técnica contém, No passado, vocé tinha de convencer seu chefe a permitir o uso de uma lingua gem orientada a objetos. Hoje, muitas empresas obrigam seu uso. E seguro dizer que as pessoas esto finalmente ouvindo. Se voe8 esti lendo este livro, finalmente foi convencido. Provavelmente é alguém com um nivel intermediario de experiéncia em programagiio. Se vocé conhece C, Visual Basic ou FORTRAN, Jd estava nas imediagdes, mas decidiu que precisa dar uma séria olhada na programaggo orienta- da a objetos e tomé-la parte de seu conjunto de habilidades. Mesmo que vocé tenha alguma experiéncia com uma linguagem orientada a objetos, este livro pode ajudi-lo a solidificar seu entendimento de OO. Mas nao entre em panico, caso vocé nio esteja familiarizade com uma lingnagem OO. Embhora este livro use Java para ensinar canceitos de. 4 Dia1 00, um conhecimento prévio de Java nao € necessdrio. Se vocé ficar confuso ou precisar de um lembrete da sintaxe, basta consultar 0 Apéndice B, “Resumo do Java”. Se voc’ precisa de OO para se manter no mercado, terminar seu projeto mais recente ou satis fazer sua propria curiosidade, entio veio ao lugar certo. Embora nenhum livro possa ensinar tudo que ha em relagao a OO, este livro promete fornecer uma base slida em OO. Com essa base, voc’ pode comegar a praticar POO, E, mais importante, a fundamentagio fornecerd a base duravel que vocé precisa para continuar a aprender e, finalmente, dominar esse paradig- ma de programagaio. Hoje voc? aprendera + Programagaio orientada a objetos em um contexto histérico + A base da programagaio orientada a objetos + As vantagens ¢ objetivos da programagao orientada a objetos + As faldcias e armadilhas comuns associadas & programagio orientada a objetos Programagao orientada a objetos em um contexto historico Para entender 0 estado atual da POO, vocé deve conhecer um pouco da histéria da programagzo. Ninguém concebeu a POO da noite para o dia. Em vez disso, a POO ¢ apenas outro estigio na evolugio natural do desenvolvimento de software. Com o passar do tempo, se tornou mais facil identificar as praticas que funcionam e as que comprovadamente falham. A POO combina prati- cas comprovadas € testadas 0 mais eficientemente possivel. 006 aabreviatura de orientado a objetos. OO é um termo geral que inclui qualquer estilo de desenvolvimento que seja baseado no conceito de “objeto” — uma entidade queexibe caracteristicas e comportamentos. Vocé pode aplicar uma estratégia orientada a objetos na programagio, assim como na anilise € no projeto, Vocé também pode dizer que OO é um estado da mente, uma maneira de ver o mundo todo em termos de objetos. Simplesmente, a OO contém tudo que pode ser denominado como orientado a objetos. Voc’ vai ver 0 termo OO muitas vezes neste livro. Precursores da POO Atualmente, quando usa um computador, vocé tira proveito de 50 anos de refinamento. Antiga- mente, a programagiio era engenhosa: os programadores introduziam os programas diretamente na meméria principal do computador, através de bancos de chaves (switches). Os programado- es escreviam seus programas em linguagem binaria. lal programagao em linguagem binaria Introdugao & programagao orientada a objetos 5 era extremamente propensa a erros a falta de estrutura tornou.a manuttengao do cédigo pratica- mente impossivel. Além disso, 0 cédigo da linguagem bindria néio era muito acessivel. Quando es computadores se tornaram mais comuns, linguagens de nivel mais alto e procedurais ‘comegaram a aparecer; a primeira foi FORTRAN. Entretanto, linguagens procedurais posterio- res, como ALGOL, tiveram mais influéncia sobre a OO. As linguagens procedurais permite ao programader reduzir um programa em procedimentos refinados para processar dados. Esses sa esses procedimentos refinados definem a estrutura global do programa. Chamadas seqiienci procedimentos geram a execugao de um programa procedural. O programa termina quando aca- ba de chamar sua lista de procedimentos. Esse paradigma apresentou diversas melhorias em relagao a linguagem binaria, incluindo a adi- ‘cdo de uma estrutura de apoio: o procedimento. As fungdes menores nao siio apenas mais ficeis de entender, mas também sto mais faceis de depurar. Por outro lado, a programagao procedural ita a reutilizagdio de cédigo. E, com muita freqtiéncia, os programadores produziam cédigo de espagueti — cddigo cujo caminho de execugto se assemelhava a uma tigela de espagueti. Fi- nalmente, a natureza voltada aos dados da programagio procedural causou alguns problemas proprios. Como os dados e o procedimento so separados, nao existe nenhum encapsulamento dos dados. Isso exige que cada procedimento saiba como manipular corctamente os dados. Infe- lizmente, um procedimento com comportamento errOneo poderia introduzir erros se naio mani- pulasse os dados corretamente, Uma mudanga na representagao dos dados exigia alteragdes em cada lugar que acessasse os dados. Assim, mesmo uma pequena alteragio poderia levar a uma cascata de alteragdes, por todo o programa —em outras palavras, um pesadelo de manutengio. A programagiio modular, com uma lingtagem como Modula2, tenta melhorar algumas das defi- ciéncias encontradas na programagéio procedural. A programaggio modular divide os programas em varios componentes ou médulos constituintes. Ao contrério da programagaio procedural, que separa dados e procedimentos, os médulos combinam os dois. Um médulo consiste em dados e procedimentos para manipular esses dados, Quando outras partes do programa precisam usar um médulo, elas simplesmente exercitam a interface do médulo. Como os médulos ocultam todos 9 dados internos do restante do programa, € facil introduzir a ideia de estado: um médulo con- tém informagdes de estado que podem mudar a qualquer momento, © estado de um objeto € o significado combinado das variiveis intemnas do objeto. Uinta varitved imlernal ui Vale imaikido dentio de urn objets. Mas a programacao modular sofre de duas deficiéncias préprias importantes. Os médulos naio sdo extensiveis, significando que vocé nao pode fazer alteragées incrementais em um médulo sem abrir 0 cédigo a forga e fazer us alteragdes diretamente. Vocd também nfo pode basear um médulo em outro, a nao ser através de delegagao. E, embora um médulo possa definir um tipo, um médulo nao pode compartithar o tipo de outro médulo. 6 Dia1 Nas linguagens modulares € procedurais, os dados estruturados ¢ nao estruturados tém um “tipo”. O tipo é mais facilmente pensado como o formato da meméria para os dados. As lingua gens fortemente tipadas exigem que cada objeto tenha um tipo especifico e definido. Entretanto, 05 tipos no podem ser estendidos para eriar outro tipo, exceto através de um estilo chamado ‘agregagao’. Por exemplo, em C, podemos ter dois tipos de dados relacionados: typedef ctruct { int a ‘int b5 } aBaseTypes typedef struct { aBaseType Base; int c; } aberivedType: Nesse exemplo, aDerivedType ¢ baseado em aBeseType, mas uma estrutura de aDerivedType nio pode ser tratada diretamente como uma estrutura de aBaseType. Uma sé pode fazer referéncia a0 membro Base de uma estrutura aDerivedType. Infelizmente, essa organizagao leva a eédigo que possuii muitos blocos case e it/else, pois 0 aplicativo deve saber como manipular cada médulo que encontra. Finalmente, a programagao modular também é um hibrido procedural que ainda divide um pro- grama em varios procedimentos. Agora, em vez de atuar em dados brutos, esses procedimentos manipulam médulos. Programagao orientada a objetos APOO di opriximo passo légico apés a programagio modular, adicionando heranga e polimor- fismo a0 médulo. A POO estrutura um programa, dividindo-o em varios objetos de alto nivel. Cada objeto modela algum aspecto do problema que vocé esté tentando resolver. Escrever listas seqiienciais de chamadas de procedimento para dirigir o fluxo do programa nfo é mais o foco da programagéio sob a OO. Em vez disso, 03 objetos interagem entre si, para orientar o fluxo global do programa. De certa forma, um programa OO se torna uma simulagao viva do problema que vocé esta tentando resolver. Uma estratégia de POO para software usando objetos Imagine que voc tivesse de desenvolver um programa OO para implementar um carrinho de compras on-line ou um terminal de ponto de vendas. Um programa 00 conterd os objetos item, carrinho de compras, cupom e caixa. Cada um desses objetos vai interagir uns com os outros para orientar o programa, Por exemplo. quando o caixa totalizar um pedido. ele verificara o pre- 0 de cada item. Introdugao & programagao orientada a objetos 7 Definir um programa em termos de objetos é uma maneira profunda de ver o software. Os obje~ tos 0 obrigam a ver tudo, em nivel conceitual, do que um objeto faz: seus comportamentos, Ver um objeto a partir do nivel conceitual é um desvio da observagio de como algo ¢ feito: a imple- mentagiio. Essa mentalidade o obriga a pensar em seus programas em termos naturais e reais. Em vez de modelar seu programa como um conjunto de procedimentos e dados separados (termos do mundo do computador), vocé modela seu programa em objetos. Os objetos permitem que vocé modele seus programas nos substantivos, verbos e adietivos do dominio de seu problema. A implementagao define como algo ¢ feito, Em termos de programacao. implemen- tagdo € 0 cédigo. RUNS © dominio € 0 espaso onde um problema reside. © dominio é 0 conjunto de conceitos que representam os aspectos importantes do problema que vocé estd tentando resolver. Quando recua ¢ pensa nos termos do problema que esté resolvendo, voc@ evita se emaranhar nos detalhes da implementagao, E claro que alguns de seus objetos de alto nivel precisatao interagir com 0 computador . Entretanto, o objeto isolard essas interagdes do restante do sistema. (O Dia 2, “Encapsulamento: aprenda a manter os detalhes consigo mesmo”, explorari melhor essas vantagens.) ‘0 caixa nao ve dados brutos ao totalizer um pedido. O caixa nao sabe procurar, emcertas posigdes de meméria, numeros de item e outra variével para um cu- pom. Em vez disso, 0 caixa interage com objetos item. Ele sabe perguntar quanto custa o item, Em termos do carrinho de compras, ocultacéo de implementapao significa que ow ad PI raga ipl pao significa q Neste ponto, vocé pode definir objeto formalmente PERE Ray Um objeto éuma construgao de software que encapsula estado e comportamento. Os odjetos permitem que voré modele seu software em termos reais ¢ abstragdes. Rigorosamente falando, um objeto é uma insta oconceito de classe. a de uma classe. A proxima segao apresentara Assim como o mundo real ¢ constituido de objetos, da mesma forma o 60 software orientado a objetos. Em uma linguagem de programagio OO pura, tudo é um objeto, desde os tipos mais ba- sicos, como inteirose légicos, até as instancias de classe mais complexas; nem todas as linguagens orientadas a objeto chegam a esse ponto. Em algumas (como 0 Java), primitivas como int ¢ float, nio sio tratadas como objetos. {3 Dia1 O que é uma classe? Assim como os objetos do mundo real, o mundo da POO agrupa os objetos pelos seus comporta mentos e atributos comuns. A biologia classifica todos os cies, gatos, elefantes € seres humanos como mamiferos. Caracie~ risticas compartilhadas dao a essas criaturas separadas um senso de comunidade. No mundo do soft- ‘ware, as classes agrupam objetos relacionados da mesma maneira. Uma classe define todas as caracteristicas comuns a um tipo de objeto. Especificamente, a classe define todos os atributos e comportamentos expostos pelo objeto. A classe define a quais men- ‘sagens seus objetos respondem. Quando um objeto quer exercer 0 comportamento de outro objeto, ele niio faz isso diretamente, mas pede ao outro objeto para que se mude, normalmente baseado em alguma informagao adicional. Freqiientemente, isso é referido como ‘envio de umamensagem’. PUNT iy Uma classe define os atributos © comportamentos comuns compartilhados por um tipo de objeto. Os objetos de certo tipo ou classificagao compartilham os mesmos comportamentos e atributos. As classes atuam de forma muito parecida com um cortador de mol- de ou biscoito, no sentido de que vocé usa uma classe para criar ou instanciar objetos. REE RE) 417#buios sao as caratersticas de uma classe visiveis extemamente. A cor dos olhos €.a cor dos cabelos sio exemplos de atributos. Um objeto pode expor um atributo fornecendo um link direto a alguma varidvel interna ou retor- nando o valor através de um método. Comportamenio & uma agao executada por um objeto quando passada uma mensa- ‘gem ou em resposta a uma mudanga de estado: & algo que um objeto faz. Um objeto pode exercer 0 comportamento de outro, executando uma operacio sobre esse objeto. Voeé pode ver os termos chamada de método, chamada de funciio ou passar una mensagem, usados em vez de executar uma operagdio. O que &importante é que cada uma dessas ages omi- te.0 comportamento de um objeto, Passagem de mensagem, operagao, chamada de método e chamada de fun- Nota $40; 0 qué vocé usa, freqiientemente depende de seus conceites anteriores. Pensar em termos de passagem de mensagem é uma maneira muito orientada a objetos de pensar. A passagem de mensagem é dinémica. Conceitualmente, ela separa a mensagem do objeto. Tal mentalidade pode ajudar a pensara res- peito das interagdes entre objetos. Linguagens como C++ e Java tém herangas procedurais, onde as chamadas de fungao sao estaticas. Como resultado, essas linguagens freqiientemente se re- ferem a um objeto realizando uma chamada de método a partir de outro obje- to, Uma chamada de método esta fortemente acoplada ao objeto. Este livro normaimonte usar chamada de método, dovido a sua forte ligagao cam Java. Entratanta, padem ovistir acasies em quo o tro mensagom é usado indistintamente. Introdugao & programagao orientada a objetos 9 Reunindo tudo: classes e objetos Pegue um objeto item, por exemplo. Um item tem uma descrigao, id, prego unitario, quantidade ¢ um desconto opcional. Um item saberd calcular seu prego descontado. No mundo da POO, vocé diria que todos os objetos item so instancias da classe Iten. Uma clas- se Item poderia ser como segue: public class Item { private double unit_prices private double discount; //uma porcentagem de desconto que se aplica ao preco private int quantity; private String description: private String id: public Item( String id, String description, int quantity, double price ) { this.id - ids this.description = descriptions if( quantity >= 0) { this quantity = quantity; } else { this.quantity = 0; ) this.unit_price = prices } public double getAdjustedTotal() { double total = unit_price * quantity; double total_discount = total * discount; double adjusted total = total - total discounts return adjusted total: } // aplica uma porcentagem de desconto no prego public void setDiscount( double discount ) { if( discount <= 1.00 ) { this.discount = discount; } else { this.discount = 0.0:

Você também pode gostar