Você está na página 1de 474
a numeragao da paginas do livro em si, asta com uma soma de +19 axempla pagina 240 6 = pagina 262 do pdt aproximado, pois as paginas em branco do livro nao digitalizei}, mas facilita na busca. AVISO: algumas paginas estiio com palavras ilegrveis, pois a digitalizagfo néo foi perfeita. a qualidade das imagens nao é a melhor, mas a intengao 6 facilitar 0 acesso ao livre... Fiz o melhor que pude, sendo gasto ao todo "10 horas ", do fim de semana para o resultado final... Grato a todos, e fica a mensagem de que "sem uniao sera dificil para todos !" Programagao orientada a objetos com ‘Peace vated Barnes Sass Kolling Programagao orientada a objetos com Uma introdugao pratica usando o 4° edicao Tradugao Edson Furmankiewicz Docware Traducées Técnicas Revisdo Técnica Joao Luiz Silva Barbosa Professor da Universidade Fumec pUTORE:, le C a) \ a 23 = ZN é ASSCOICAG BRASAIRA DF DRETOS AEPRDGRANCOS ——— 2 iN = - ‘y *O.pmeno Cg 3 z PEARSON S30 Paulo Brasil Argentina Colémbia Costa Rica Chile Espanha Guatemala México Peru Porto Rico Venezuela Capitulo A le 18 1.4 1.5 1.6 TF 1.8 1.9 1.10 1.11 1.12 1213 1.14 Capitulo aul ee 200 2.4 2.5 2.6 2. 2.8 29 2.10 4 Objetos e classes 2 OD SIOS SClASSES icecream 2 Criamdo ObjetOS oo... cece eee ete tenees 3 Chamando Métods ....2.... cic eeceeeeeeee 4 PARA BO Ss crccnmnnenamerncuerrenmenarcenciries 5 TiIDOS de GAdOS ........eeeeecceeeeeseteeeeteteeees 5 Multiplas instAncias .......c cece eee 6 ESTA OG cccinscircnusmaneveiaaiememnesnees t © que ha em um objeto? ....... ee £ Interacdo entre objetos..... 9 COGIGOAONLE tassacies mercer nneraawenes 9 QUITO CXEMPIO oo... eeececeee eee ee eee eeeeee i1 Valores de retorno o.oo eeeeeceeesetteneneee 11 Objetos como parametros .....2.... 12 RES UG xccsrnuscentasanearserrenannemmneneeenen 13 2 f€ntendendo as definigoes de classe 15 Maquinas de vender bilhetes ........... 15 Examinando uma defini¢o de classe... 16 Campos, construtores e metodos ....... 19 Passando dados via parametros......... 23 ATTIDUICA OL. .. ec ccccccceeecccceteceeeeeeeeeeeenees 25 Métodos Cé ACOSSO oe 26 Métodos modificadores ......0..ccccce 28 Imprimindo a partir de métodes.......... 29 Resumo da maquina simples de vender bilhetes .....0...cc.ee 31 Refletindo sobre o projeto da maquina de vender bilhetes........... 32 Fazendo escolhas: a instrucao CONCICIONAL 0... cece eee eeeeee eee 34 Qutro exemplo de instrugao CONGICIONAl savwesiensmcasiemnewcne 36 VANIEVElS OCAIS wrcneccascnesseneremennnemmennes 37 2.14 2.15 2.16 aed 2.18 2.19 Capitulo 3 ae 3.0 3.4 a8 3.6 ul 3.8 39 3.70 Burl Sole avid 3.14 3.15 Capltulo A 4.2 4.3 BS & & mW Oak Campos, parametros e variaveis locais... 36 Resumo da maquina de vender bilhetes aprimorada......... cee 39 Exercicios de auto-revisao........000...0.. AO Revisando um exemplo familiar........... 44 Testando expressdées: o Code Pad...... 44 RES UIT ssiisicwreansneccomence arco 45 3 interagao entre objetos 49 O exemplo do reli... 49 Abstracao e modularizacao.......... 50 Abstracao em software... 51 Modularizagao no exemplo do relogio... 51 implementando o mostracior do reldgio ... 52 Diagramas ce classe versus diagramas 86 SH[SlOiccsscescrnemmnnmnemeenn 53 Tipos primitives e tipos objeto ............. 5o © cddigo-fonte de ClockDisplay.......... 56 Objetos que criam objetos oo. 62 Multiplos construtores oo... eee 64 Chamadas dé M6t0d0 oes 64 Outro exemplo de interacao BE OD] BIOS wecsaxesmnnmeneurecemmenenennmnine 66 Utilizando um depuracor......... ee 70 Revisando as chamadas de método... 73 RESUNTO wecassseesssneeoncnne ce erenemeemameeannanes f4 4 Agrupancdo objetos 7G Agrupando objetos em colecoes de TESS TEV uns eoseeuesnanecerees 78 Bloco de notas pessoal ....... cee Tf Primeira visao das classes Ge: DIDI Ca wi. juceniicnennrnen: Tf Estruturas de objeto com colecées..... 79 CIASSES GENELICAS oo. eect eeeeee eee 81 Numerando dentro de colegées.......... 81 Removendo um item de uma colecao ... 82 Processando uma colecao intetra ....... 84 4.9 4.10 4.411 4.12 4.13 Capitulo 5 a 5:2 a3 5.4 5:5 bo 5.7 5.8 5.9 5.10 3.11 5.12 5.13 5.14 Capitulo 6.4 6.2 6.3 64 6.5 6.6 6.7 6.8 6.9 6.10 6.14 6.12 6:13 Capitulo 7.4 1.2 1.3 Resumo do exemplo de bloco CLE TOTES cevcnsenenunnreeeencannmnennses thet GReRL ees 91 Outro exemplo: um sistema de leilao.... 92 Resumo de colecées flexiveis ..........-- 99 Colecées de tamanho fixo oo... 99 RESUIMOG:,....cssienrin irae es sissies 110 5 Comportamenio mais sofisticado 142 Documentacdo para classes de BIBMGIE CE ee vacsrenrererencnnmemnccasaane 113 Sistema TECHSUPPOSL. ......c cee 113 Lendo a documentacao de classe.... 119 Adicionando comportamento SBS LG HG os exncexcusemnammaamcememrenmenemnn 123 Pacotes 6 importaGdo...... ce 125 Utilizando mapas para associagées... 129 Utilizando CONIUNIOS «1... 133 DivicindO StrindS ........::cccccrettetteees 134 Coneluindo o sistema TechSupport... 135 Escrevendo a documentacao CE CIA SS Gore rwesnvernamenmcmenreermeneanercenes 137 Piiblico versus Privado vse 139 Aprendendo sobre classes a partir de suas InleraceS....... 441 Variaveis de classe e consiantes....... 143 ROBIN cra renenrcunessnnenantet aaa aT 146 6 Objetos bem-comportados 146 [MPOCUSEO:.... 2.0 MEMENTO 148 Teste © CEPULAGAO «cece eee 149 Teste de unidade dentro do Blueu..... 149 Autemacao de teste......ccc ee 56 Modularizacao e interfaces ..........+ 163 Um cenario de depuragao....... 65 Comentario 6 @StilO ....... 1. ceed 165 ReViSGES MANUS... 166 InStrucGeS de IMPrESSAO «0... eee 171 Escolhendo uma estratégia de teste... 175 Depuradores.........ckaneerin 175 Colocando as técnicas em pratica.... 176 RESUS a ccecemuencmnenens momen 176 7 Design de classes 178 INTOCUGAO. eect errr neteteees 178 © exemplo do jogo world-of-zuul....... 180 Introducao a acoplamento e coesao... 181 Sumario | vii 7.4 Duplicacdo de cOdiGO ....-- ee 182 7.5 Fazendo extensdes........-c ee 186 7.6 Acoplamento.......... cece eens 188 7.7 Design baseado na responsabilidade ...........eee 192 7.8 Minimizando alteragoes.........--- ee 195 7.9 Acoplamento implicito ..... ee 195 7-10 Pensando a frente.....cc..ce eee 198 To) CO68SO scores enerensareniincns ‘129 PAZ REGRESS ccscpisseinseacec easements 202 7.13 Refatoracéo para independéncia Ce INGUAQEM..... cece tenes 206 7.14 Diretrizes dé projeto .....cce ee 209 7.15 Executando sem 0 Blued wc. 211 Z.16 ‘R@SUM OG cnanussrsearvecnnarncaxrenenee 212 Capitulo 8 Aperfeicoando estruturas com o uso da heranca 216 B41 Exe@rplo do DOME weenie ceneeeeeeeeee 216 8.2 Utilizando NEPANGA eee eo 8.3 Hierarquias de heranga.......- 22f 8.4 Heranca em JaVa.... eee 228 8.5 DoME: adicionando outros tipos GedtS MA yiscexcmaweser conve 231 8.6 Vantagens da heranga (ate agora).... 233 B27 -- BUST See cxccesocumosennamuememecemmeaantlill 233 8.8 Aclasse Object... tee 239 8.9 Autoboxing e classes empacotacoras ... 240 8.10 Ahierarquia de colecdo ..........--.6: 244 BT RESUMOlenisecccssaversnsanecceemeneneetneen 241 Capitulo9 Mais sobre heranga 243 9.1 © problema: método de impressao GEA DOME sncssccsecrscrvemeasenn enon siernesnmcennes 243 92 Tipo estatico e tipo dinamico............. 244 9.3 SOBPESCrICAO.... eee eeeeceessceeeeeseeeteeseneees 247 94 Pesquisa de método dinamica.......... 249 95 Chamadas super em metodos.......... 254 9.6 Polimorfismo de metodo .......... 255 9.7 Métodos de objeto: toString............. 255 9.8 Igualdade de objetos: equals 6 hashCode ........cceseeecseeeeeees 255 9.9 Acesso prolegido 0... cee 258 9.10 Operador instanceof oo... 260 viii | 9.14 9.12 Capitulo 10.1 10.2 TOS 10.4 10.5 10.6 10.7 10.8 Capitulo 11.1 Tile2 Th 11.4 11.5 11.6 TALE 11.8 11.9 11.10 Capitulo 12.1 12:2 (2.3 12.4 T239 12.6 Programacao orientada a objetos com Java Outro exemplo de heranca com SOMTESE | ICaG mame ne eeunurmeers 260 RESU A Gisecssansnnimssemanrenennoenetnees 263 10 Técnicas de abstragao adicionais 265 SIMUIACGES voce eceec cece ceeeeeeeeeeeeeeeeesenes 265 A simulacao ‘raposas @ coelhos’ ....... 266 Classes ADStratas ......c cc eceeneeeereerees 279 Mais métodos abstratos ..........0. 285 Heranea multipla.......cc.aeonnssncie 287 LBS OES ccrnccaremanmcearenumamamearcne 290 Resumo de heranGa ..... eee 295 RESUMOcss eee 296 11 Criando interfaces graficas do usuario 296 IALOGUGAD see: wuereeecroman res 298 Componentes, layout e tratamento de VEMLOS eee ceceeeeeeeeteeeeenenteateeeesaeees 299 AWT SWING os ccccnrasceseenenasniences 300 Exemoplo do ImageViewer................ 300 ImageViewer 1.0: primeira versao COMBE cssccrsaemsrnseceencermmernes 311 ImageViewer 2.0: aprimorando a estrutura do programa... 323 ImageViewer 3.0: mais componentes Ce Interface... cece eeeeentsteereeeeees 328 Extensdes adicionais ......0.00 cee 331 Outro exemplo: SoundPlayer............. 933 RESUIMO... cc cectenerseeneretteeeteteeeeeeeeeenniins 335 12 Tratando erros 337 O projeto adaress-bO0Ok.......0cee 338 ProgramaGao defensiva..... ices 341 Informe de erro de Servidor... 344 Principios de langamento AE GXCB CBO cess scrpsnrnrcensmasennes comengenns 348 Tratamento de excecdes.............:e 356 Definindo novas classes de excegao... 359 Biblioteca Unidade Butanta Programacao orientada a objetos com java Ac. 74066 - R. 670041 Ex. 15 Compra - Curitiba Nf.: 5243 R$ 58,83 - 02/08/2011 SISTEMAS DE INFORMACAO - BUTANTA 12.7 Utilizando assertivaS...... cece 360 12.8 Recuperacao e prevencado de erros... 364 12.9 Entrada/saida baseada em arquivo... 36/ 12.10 RESUMO.........cccccceceeeceeeeeeteeeeeenseeeeeeeees 3/8 Capitulo 13 Design de aplicagoes af 13.1 Analise © Projeto ce eeeeteeees 376 (32 Design dé:classe acuuscngarncec 382 13.3 DOCUMENTAGAO 2.2... ceeeeetieenne eee 384 TBA COODEPACEG sc eccnercrecarnvenemvanurnsaneess 384 13.5 PrototiPaGeM oe. eee eeeeeeneee tees 385 43.6 Crescimento de software... 385 13.7 Utilizando padrées de design ........... 387 4138 PASO csseccmacceesmmancciemmerens 39? Capitulo 14 Um estudo de caso 394 TAA EStddO G6 CaO scsenccicsisicmeeremrnnes 394 14.2 Analise @ Projeto cece 395 14.3 Design de classe ow... een 399 14.4 Desenvolvimento iterative... A04 14.5 QUO GXCIIDIO cecccccincienwsnccrneninaes 412 TALE! AMEND EICO siceconsccenvusxcesiomacceercermnres 412 Apéndices A Trabalhando com um projeto no B Tioos de daclos Java eee STB © GOGO eS sranuwimenecemenecnnns Ato D Estruturas de controle Java Ap) E Executando Java sem o Blued....... 427 F Utilizando © GEDUPACOE occ 430 G Ferramentas de teste do JUnit ......... 464 H Ferramentas de trabalho em Equipe... 436 Bd ARI cc ccrnesmnueavencunantannarcmmnntennnces MEO 3 Guia de estilo do programa............ 441 K Classes de biblioteca importantes... 444 indice remissivo 448 : uma Observando minha filha Kate e seus colegas de faculdade, notei que fazer um curso Java uti- lizando um [DE comercial era uma experiéncia terrivel. A sofisticagao da ferramenta adicionava complexidade significativa a tarefa de aprendizagem. Olhando para tras, gostaria de entendido mais cedo 0 que estava acontecendo. Mas do jeito que as coisas ocorreram, nao pude conversar com o professor sobre o problema até que fosse tarde demais. Esse é 0 tipo de situagao para a qual o BlueJ é perfeitamente adequado. O Blue] é um ambiente interativo de desenvolvimento que foi projetado para uma missao: ser utilizado por estudantes que estao aprendendo a programar, elaborado por professores que estiveram em sala de aula defrontando-se com esse desafio todos os dias. Foi revigorante falar com as pessoas que desenvolveram o BlueJ: elas tem uma idéia muito clara de qual é seu alvo. As discuss6es tendiam a enfocar mais o que se deveria excluir do que 0 que se deveria incluir. O BlueJ esta muito limpo e é muito objetivo. Mas este livro nao é sobre o BlueJ. E sobre programacao. Em Java. Nos tiltimos anos Java tem sido amplamente utilizado no ensino de programagao. Isso ocorre por muitas razGes. Uma ¢ que ele tem muitas caracteristicas que facilitam o ensino: uma defini- cdo relativamente limpa; a extensa andlise estatica do compilador informa os estudantes sobre eventuais problemas antecipadamente no processo de desenvolvimento; e possui um modelo de meméria muito robusto que elimina a maioria dos ‘misteriosos’ erros que surgem quando os limites dos objetos ou 0 sistema de tipos sao comprometidos. A outra € que o Java tornou-se comercialmente muito importante. Este livro encara o conceito mais dificil de ensinar: objetos. Conduz os estudantes durante seus primeiros passos até alguns conceitos muito sofisticados. Ele conduz o conteido de modo a resolver uma das perguntas mais ardilosas ao se escrever am livro sobre programacao: como lidar com a mecanica de realmente escrever e executar um programa. A maioria dos livros ignora essa questao ou a discute superficialmente, deixando para professor descobrir como resolver o problema e colocando sobre ele o Gnus de relacionar o material sendo ensinado aos passos que os estudantes tém de seguir para trabalhar nos exercicios. Em vez disso, esta obra assume a utilizacfo do BlueJ e € capaz de integrar as tarefas de entender »s conceitos com a mecanica de como os alunos podem explora-los. Gostaria que estivesse disponivel para minha filha no ano passado. Talvez no ano que vem... Este livro é uma introducdo a programacdo orientada a objetos para iniciantes. Ele enfoca conceitos gerais de orientac4o a objetos e programacao sob uma perspectiva de engenharia de software. Os primeiros capitulos sao escritos para estudantes sem experiéncia em programacao; ja os ca- pitulos finais sao adequados para programadores mais avancados ou profissionais. Programadores com experiéncia em uma linguagem nao-orientada a objetos que desejem migrar suas habilidades para a orientac4o a objeto também se beneficiarao da obra. Utilizamos duas ferramentas por todo o livro para permitir que os conceitos introduzidos sejam colocados em pratica: a linguagem de programagao Java e o ambiente de desenvolvimento Java BlueJ. Java O Java foi escolhido por causa de uma combinacao de dois aspectos: o projeto da linguagem e sua popularidade. A propria linguagem de programacdo Java fornece uma implementacfo muito limpa da maioria dos conceitos orientados a objetos importantes ¢ serve bem como uma linguagem de ensino introdutoria. Sua popularidade assegura um grupo imenso de recursos de suporte. Em qualquer area de assunto, ter varias fontes de informagoes disponiveis é muito util, tanto para professores quanto para estudantes. Para Java em particular, incontaveis livros, tutoriais, exercicios, compiladores, ambientes e questionarios ja existem, em muitos tipos e estilos di- ferentes. Muitos deles esto on-line e disponiveis gratuitamente. A grande quantidade e a boa qualidade de material de suporte fazem do Java uma excelente escolha como uma introducdo a programacao orientada a objetos. Com tanto material sobre Java ja disponivel, ainda ha lugar para dizer mais? Acreditamos que sim, ¢ a segunda ferramenta que utilizamos ¢ uma das raz6cs... BlueJ A segunda ferramenta, o BlueJ, merece mais comentarios. Este livro é tinico em sua utiliza- ¢fio completamente integrada do ambiente de BlueJ. O Blue] é um ambiente de desenvolvimento Java desenvolvido e mantido na Universidade de Deakin, Australia, e na Universidade de Kent em Canterbury, Reino Unido, explicitamente como um ambiente de ensino introdutério 4 programacao orientada a objetos. Ele ¢ mais bem adequado ao ensino introdutorio do que outros ambientes por varias razGes: = A interface com o usuario é muito mais simples. Iniciantes podem geralmente utilizar o am- biente BlueJ de maneira apropriada depois de 20 minutos de introdugao. A partir dai, a ins- truco pode se concentrar nos conceitos importantes A mao — a orientacao ao objeto e Java —e nenhum tempo precisa ser desperdi¢ado falando sobre ambientes, sistemas de arquivos, caminhos de classe, comandos do DOS ou conflitos de DLL. Prefacio para o professor xi = O ambiente suporta importantes ferramentas de ensino naio-disponiveis em outros ambien- tes. Uma delas é a visualizacio de estrutura de classes. O BlueJ automaticamente exibe um diagrama como UML que representa as classes e os relacionamentos em um projeto. A visualizacio desses conceitos importantes é uma grande ajuda para professores e estu- dantes. E dificil assimilar o conceito de um objeto quando tudo o que vocé vé na tela sao linhas de cédigo! A notagio de diagrama é um subconjunto simples de UML, novamente personalizado de acordo com as necessidades dos estudantes iniciantes. Isso facilita a com- preensio, mas também permite migracao para toda a UML em cursos posteriores. = Uma das forcas mais importantes do ambiente do BlueJ ¢ a capacidade de 0 usuario criar dire- tamente objetos de qualquer classe e entao interagir com seus métodos. Isso cria a oportunida- de para experimentagao direta com objetos, com pouco overhead no ambiente. Os estudantes podem quase ‘sentir’ o que significa criar um objeto, chamar um método, passar um parametro ou receber um valor de retorno. Eles podem experimentar um método imediatamente depois de escrevé-lo, sem a necessidade escrever drivers de teste. Essa facilidade ¢ uma ajuda inestimavel no entendimento dos detalhes subjacentes dos conceitos e da linguagem. O Blue] é um ambiente Java completo. Nao ¢ uma versao reduzida ou simplificada de Java para ensino. Ele é executado por cima do Java Development Kit da Sun Microsystems e utiliza o compilador padrao e a méquina virtual. Isso assegura que ele sempre obedega a especificagao Java oficial e mais atualizada. Temos varios anos de experiéncia no ensino do ambiente BlucJ (e muitos mais anos sem ele antes disso). Em nossa experiéncia, testemunhamos o quanto a utilizacéo do BlueJ aumentou o envolvimento, o entendimento e a atividade dos alunos nos cursos. Orientacao a objetos com Java Uma das razées para escolher 0 BlueJ foi que este permite uma abordagem em que 0s professo- res lidam verdadeiramente com os conceitos importantes primeiro. ‘Objects firs? (titulo do original em inglés) foi um grito de batalha para muitos autores de livros-texto e professores por algum tempo. Infelizmente, a linguagem Java nao torna esse nobre objetivo muito facil. Numerosos obsta- -ulos de sintaxe e detalhes tém de ser sobrepujados antes de a primeira experiéncia com um objeto vivo surgir. O programa Java minimo para criar e chamar um objeto em geral inclui: = escrever uma classe; = escrever um método main, incluindo conceitos como métodos estaticos, parametros ¢ arrays na assinatura; = uma instrucdo para criar 0 objeto (‘new’); = uma atribuicdo a uma variavel; = 2 declaracao de variavel, incluindo tipo de variavel; = uma chamada de método, utilizando a notagado de ponto; = possivelmente uma lista de parametros. ~omo resultado, os textos em geral: = =m de trabalhar a sua maneira nessa lista proibitiva e abordar apenas objetos em algum lugar ao Capitulo 4; ou w stlizar um programa no estilo ‘Hello, world’ com um unico método main estatico como o orimeiro exemplo, nao criando, assim, nenhum objeto. xii Programagao orientada a objetos com Java Com o BlueJ, isso nao é um problema. Um estudante pode criar um objeto e chamar seus métodos como uma primeira atividade! Como os usuarios podem criar ¢ interagir com obje- tos diretamente, conceitos como classes, objetos, métodos e parametros podem facilmente ser discutidos de maneira concreta antes de olhar para a primeira linha de sintaxe Java. Em vez de explicar mais sobre isso aqui, sugerimos que 0 leitor curioso confira o Capitulo 1 — as coisas rapidamente se tornarao mais claras. Uma abordagem iterativa Outro aspecto importante deste livro é que ele segue um estilo iterativo. Na comunidade de ensino de informatica, existe um padréo de projeto educacional bem conhecido que declara que conceitos importantes deveriam ser ensinados cedo e com freqiiéncia. E muito tentador para au- tores de texto tentar dizer tudo sobre um tépico no ponto em que ele é introduzido. Por exemplo, é comum, ao introduzirem-se tipos, fornecer uma lista completa de tipos de dados predefinidos ou discutir todos os tipos disponiveis de loop ao introduzir seu conceito. Essas duas abordagens conflitam: néo podemos nos concentrar primeiro na discussao de con- ceitos importantes e ao mesmo tempo fornecer cobertura completa de todos os t6picos encontrados. Aprendemos com nossa experiéncia com livros-texto que muitos detalhes iniciaimente causam muita distracdo e tém o efeito de afogar os pontos importantes, dificultando a compreensdo. Nesta obra abordamos todos os tépicos importantes varias vezes, em capitulos diversos. Os conceitos normalmente s&o introduzidos em um nivel de detalhe necessério pata entender © aplicar a tarefa 4 mao. Sao revisitados mais tarde em um contexto diferente ¢ a compreensao se aprofunda a medida que o leitor continua pelos capitulos. Essa abordagem também ajuda lidar com a ocorréncia freqiiente de dependéncias mituas entre conceitos. Alguns professores talvez nao conhecam uma abordagem iterativa. Olhando os primeiros capitulos, professores acostumados a uma introducdo mais seqtiencial se surpreenderao com 0 numero de conceitos abordados to cedo. Pode parecer uma curva de ensino ingreme. E importante entender que esse nao é o fim do assunto. Nao se espera que 0s estudantes entendam tudo sobre esses conceitos imediatamente. Em vez disso, esses conceitos fundamen- tais sfio abordados repetidas vezes por todo o livro, permitindo que os estudantes obtenham um entendimento cada vez mais profundo ao longo do tempo. Visto que seu nivel de conhecimento muda A medida que avan¢am, revisitar topicos importantes mais tarde permite que eles obtenham uma compreensdo geral mais profunda. Tentamos essa abordagem com alunos muitas vezes. Parece que eles tem menos proble- mas em lidar com essa abordagem que alguns professores de longa data. E lembre-se: uma curva de ensino ingreme nao é um problema contanto que vocé assegure que seus alunos possam escala-la! Sem cobertura completa da linguagem Relacionada com nossa abordagem iterativa esta a decisao de nao tentar fornecer cobertura completa da linguagem Java no livro. © foco principal desta obra ¢ transmitir principios de programacao orientada a objetos em geral, nao os detalhes de linguagem Java em particular. Alunos que estudam com este livro po- dem vir a trabalhar como profissionais de software pelos proximos 30 ou 40 anos de sua vida — éuma aposta relativamente segura de que a maioria de seu trabalho no sera em Java. Cada | The ‘Early Bird’ pattern, in J. Bergin: ‘Fourteen pedagogical patterns for teaching computer science’, Proceedings of the Fifth European Conference on Pattern Languages of Programs (EuroPLop 2000), Irsee. Alemanha, julho de 2000. Prefacio para o professor xiii texto importante deve tentar prepara-los de forma natural para algo mais fundamental do que 2 linguagem da moda. Por outro lado, muitos detalhes de Java sio importantes para realmente fazer o trabalho pra- ico. Aqui, abordamos construgées Java em tantos detalhes quantos sfo necessarios para ilustrar +s conceitos 4 mao e implementar o trabalho pratico. Algumas construgoes especificas para Java foram deliberadamente deixadas fora da discussao. Estamos cientes de que alguns professores optarao por abordar alguns topicos que nao dis- -utimos em detalhes. Isso é esperado e necessdrio. Entretanto, em vez de tentar cobrir cada pos- sivel tépico nés mesmos (e assim aumentar 0 tamanho deste livro para além de 1.500 paginas). lidamos com ele utilizando ganchos. Os ganchos sao ponteiros, freqiientemente na forma de per- cuntas que levantam o tépico e oferecem referéncias para um apéndice ou um material externo. Esses ganchos asseguram que um tépico relevante ¢ trazido 4 tona em um momento apropriado ¢ permite ao leitor, ou ao professor, decidir com que nivel de detalhe esse topico deve ser aborda- do. Assim, os ganchos servem como um lembrete da existéncia do tépico e como um marcador de lugar que indica um ponto na seqiiéncia em que a discussao pode ser inserida. Professores podem decidir por utilizar o livro tal como ele é, seguindo nossa seqliéncia suge- da. ou adotar os desvios sugeridos pelos ganchos no texto. Os capitulos também freqiientemente incluem varias perguntas que sugerem o material de Jiscusso relacionado ao tépico, mas no discutido no livro. Esperamos que os professores dis- cutam algumas dessas perguntas em classe ou que 0s alunos pesquisem as respostas como exer- cicios de dever de casa. Abordagem com base no projeto A introducio de material no livro € baseada no projeto. A obra discute varios projetos de crogramacio e fornece muitos exercicios. Em vez de introduzir uma nova construgao e entfio ‘omecer um exercicio para aplicar essa construgéo e resolver uma tarefa, primeiro fornecemos om objetivo e um problema. A analise do problema determina que tipos de solucdes precisamos. Como consegiiéncia, construcdes de linguagem sao introduzidas 4 medida que sAo necessarias sara resolver os problemas em questao. Os capitulos iniciais fornecem pelo menos dois exemplos de discussao. Sao projetos analisa- dos em detalhes para ilustrar conceitos importantes de cada capitulo. A utilizacao de dois exem- -los muito diferentes suporta a abordagem iterativa: cada conceito é revisitado em um contexto diferente depois de ser introduzido. Ao projetar este livro, tentamos utilizar um grande numero e uma ampla variedade de pro- =tos de exemplo diferentes. Esperamos que isso atraia o interesse do leitor, mas isso também uda a ilustrar a variedade de contextos diferentes em que os conceitos podem ser aplicados. cil encontrar bons projetos como exemplo. Esperamos que nossos projetos sirvam para dar sos professores bons pontos de partida e muitas idéias para uma ampla variedade de exercicios mieressantes. A implementagao para todos nossos projetos foi escrita muito cuidadosamente, de modo see muitas questdes periféricas podem ser estudadas lendo-se o cddigo-fonte dos projetos. .creditamos muito no beneficio de aprender lendo e imitando bons exemplos. Para isso funcio- sar. porém, alguém deve certificar-se de que os exemplos sao bem escritos e de que vale a pena mita-los. Tentamos fazer isso. Todos os projetos sio desenvolvidos como problemas abertos. Embora uma ou mais ver- “Ses de cada problema sejam discutidas detalhadamente na obra, os projetos sao desenvolvidos ‘= modo que mais extensdes e aperfeigoamentos possam ser feitos como projetos de aluno. xiv Programacdo orientada a objetos com Java O cédigo-fonte completo para todos os projetos vem incluido no livro. Também é fornecida uma lista de projetos abordados. Seatiéncia dos conceitos em vez das construgées de linguagem Outro aspecto que distingue este livro de muitos outros € sua estruturacido ao longo de tarefas fundamentais de desenvolvimento de software e nao necessariamente de acordo com as constru- cées de linguagem Java particulares. Um indicador disso sao 0s titulos dos capitulos. Aqui vocé nio encontrara muitos dos tradicionais titulos de capitulo, como “Tipos de dados primitivos” ou “Estruturas de controle”. A estruturac3o por tarefas fundamentais de desenvolvimento nos permite dar uma introducdo muito mais geral que nao é guiada pelas complexidades da lingua- gem de programac&o particular utilizada. Tambem acreditamos que é mais facil para o estudante seguir a motivacdo da introducao e que ela torna a leitura muito mais interessante. Como resultado dessa abordagem, nao é tao simples utilizar esta obra como um livro de re- feréncia. Livros-texto introdutérios e livros de referéncia tém objetivos diferentes, parcialmente competitivos. Até certo grau, um livro-texto pode tentar ser ambos, mas certos compromissos tém de ser cumpridos em alguns pontos. Nosso livro € claramente projetado como um livro-texto e onde quer que um conflito tenha ocorrido, o estilo livro-texto assumiu precedéncia sobre sua utilizacio como um livro de referéncia. No entanto, fornecemos suporte para sua utilizagéo como um livro de referéncia listando, na introducao dos capitulos, as construcées Java neles apresentadas. Seqténcia dos capitulos O Capitulo | lida com os conceitos mais fundamentais da orientacao a objetos: objetos, clas- ses e métodos. E dada uma introduciio pratica e sélida a esses conceitos sem entrar nos detathes da sintaxe Java. Também se faz um primeiro exame de alguns codigos-fonte. Fazemos isso uti- lizando um exemplo de formas graficas que pode ser desenhado interativamente e um segundo exemplo de um sistema simples de matriculas em aulas de laboratorio. O Capitulo 2 esclarece definicdes de classe e investiga como 0 cédigo-fonte Java é escrito para criar comportamento de objetos. Discutimos como definir campos ¢ implementar métodos, além de introduzirmos os primeiros tipos de instrucao. O principal exemplo ¢ uma implementa- cao de uma maquina de vender bilhetes. Tambem voltamos ao exemplo de aula de laboratério do Capitulo | para investigar isso um pouco mais. O Capitulo 3, ent&o, expande o quadro para discutir a interacao de multiplos objetos. Vemos como eles podem colaborar invocando os métodos uns dos outros para realizar uma tarefa co- mum. Também discutimos como um objeto pode criar outros objetos. Analisamos um relogio- despertador digital que utiliza dois objetos de exibicdo de niimero para mostrar horas e minutos. Como um segundo exemplo importante, examinamos uma simulagado de um sistema de correio eletrénico em que as mensagens podem ser enviadas entre clientes de correio. No Capitulo 4 continuamos construindo estruturas mais extensas de objetos. Acima de tudo, comecamos a utilizar colegdes de objetos. Implementamos um bloco de notas eletrénico e um sistema de leildo para introduzir colegdes. Ao mesmo tempo, discutimos a iteragAo por colecdes e verificamos inicialmente os loops. A primeira colegdo utilizada é um ArrayList. Na segunda metade do capitulo introduzimos arrays como uma forma especial de uma colecao e 0 loop jor como outra forma de loop. Discutimos uma implementagao de um analisador de log da Web como exemplo para utilizagado de arrays. O Capitulo 5 lida com bibliotecas e interfaces. Introduzimos a biblioteca Java padrio e dis- cutimos algumas classes de biblioteca importantes. Sobretudo explicamos como ler e entender Prefacio para o professor xV documentacao de bibliotecas. A importancia da documentacao escrita em projetos de desenvol- vimento de software é discutida e acabamos por praticar como escrever documentacdo adequada para as proprias classes. Random, Set e Map so exemplos de classes que encontramos neste capitulo. Implementamos um sistema de didlogo semelhante ao Eliza e uma simulagao grafica de uma bola quicando para aplicar essas classes. O Capitulo 6 trata de um grupo inteiro de questées relacionadas a producdo de classes corre- tas, compreensiveis e sustentaveis. Ele aborda questées como escrita de cédigos claros e compre- ensiveis — incluindo estilos e comentarios — para teste e depuragdo. As estratégias de teste sao introduzidas e varios métodos de depuracdo so discutidos em detalhes, Utilizamos um exemplo de um diario para agendamento de compromisso e uma implementacao de uma calculadora ele- ir6nica para discutir esses topicos. No Capitulo 7, discutimos mais formalmente as questées de dividir o dominio de um proble- ma em classes para implementac4o. Introduzimos quest6es para projetar classes bem, incluindo conceitos como projeto com base em responsabilidade, acoplamento, coesao e refatoragéo. Um jogo de aventura interativo com base em texto (world-of-zuul) ¢ utilizado para essa discussao. Passamos por varias iteracGes em aperfeicoar a estrutura interna de classe do jogo e estender sua funcionalidade e terminamos com uma longa lista de propostas para extens6es que podem ser feitas como projetos de aluno. Os capitulos 8 e 9 introduzem heran¢a e polimorfismo, estudando detalhadamente muitas das questdes relacionadas. Discutimos um banco de dados simples de DVDs e videos para ilustrar os conceitos. Questées de heranca de cédigo, subtipagem, chamadas de método polimorfico e cancelamento sao discutidas em detalhe. No Capitulo 10 implementamos uma simulacdo de cagador/caca. Essa simulacao serve para dis- cutir mecanismos adicionais de abstracao baseados em heranga, isto ¢, interfaces e classes abstratas. O Capitulo 11 apresenta dois novos exemplos: um visualizador de imagens e um player de musica. Os dois exemplos servem para discutir como construir interfaces graficas com o usuario (GUI). A dificil questo de como lidar com erros ¢ abordada no Capitulo 12. Varios problemas e soluces possiveis sao discutidos e o mecanismo de tratamento de excecao do Java ¢ discutido em detalhe. Estendemos e aprimoramos uma aplicacao de catélogo de enderecos para ilustrar os conceitos. A entrada/saida é utilizada como um estudo de caso em que o tratamento de erros € um requisito essencial. O Capitulo 13 volta a discutir em mais detalhes 0 proximo nivel de abstragao: como estruturar um problema vagamente descrito em classes e métodos. Em capitulos anteriores assumimos que partes grandes da estrutura da aplicacdo ja existem e fizemos aprimoramentos. Nesse momento discutiremos como podemos comegar a partir de uma lousa limpa. Isso envolve abordagem deta- lhada sobre o que as classes devem ser para implementar nossa aplicagao, como elas interagem ¢ como as responsabilidades devem ser distribuidas. Utilizamos cart6es classe-responsabilidades- colaboradores (CRC) para abordar esse problema durante 0 projeto de um sistema de reserva de lugares em um cinema. No Capitulo 14, tentamos reunir tudo e integrar muitos topicos com base em capitulos ante- riores do livro. E um estudo de caso completo, comecando com o projeto da aplicacdo, passando pelo projeto de interfaces de classe, prosseguindo até a discussao de caracteristicas funcionais e nio-funcionais importantes e detalhes de implementagao. Os topicos discutidos em capitulos anteriores (como confiabilidade, estruturas de dados, projeto de classe, teste e extensibilidade) sio aplicados novamente em novo contexto. Esta edicao Nesta quarta edigdo fizemos varias modificagées por todo o livro. Novos materiais foram adicionados, como 0 uso do Code Pad no BlueJ e um capitulo voltado para a construgao de inter- XVI Programacao orientada a objetos com Java faces graficas visuais, além de termos reformulado todo 0 contetido de acordo com a plataforma Java 5.0. As opinides que recebemos dos leitores das edicdes anteriores foram extremamente positivas € muitas pessoas ajudaram a tornar esta obra melhor enviando comentarios e¢ sugestdes, desco- brindo e informando erros, contribuindo com material ao site do livro e com discussées na lista de mala-direta ou traduzindo o livro para outros idiomas. Material adicional r 4 No Companion Website deste livro (www. prenhall.com/barnes_br), professores e Sf estudantes tém acesso a materiais adicionais que facilitam tanto a exposicao de aulas como 0 processo de aprendizagem. Para o professor’ = Manual de solucées (em inglés). = Apresentagdes em PowerPoint. Para o estudante &# Exemplos de projetos. = BlueJ 2.2.1 (com tutorial em inglés), = Java Development Kit 1.5.0. Grupos de discusséo Mantemos varios grupos de discussdo com a finalidade de facilitar a troca de idéias e oferecer suporte mutuo para leitores deste livro e outros usuarios do Bluel. A primeira lista, objects-first-discussion, é publica (qualquer um pode se inscrever) e visa discutir todas as perguntas ¢ os assuntos relacionados a este livro. Para participar ou ler os repo- sitorios de arquivos, acesse: http://lists.bluej.org/mailman/listinfo/objects-first-discussion A segunda lista, objects-first, ¢ exclusiva para professores. Ela pode ser utilizada para dis- cutir solugées, ensinar dicas, exames e outras questOes relacionadas ao ensino. Para instrucdes sobre como participar, acesse: http://www. bluej.org/objects-first Ha também um grupo de discussdo na Web para qualquer elemento relacionado ao sistema BlueJ em: http: //groups.google.com/group/bluej-discuss * Esses materiais séo de uso exclusivo dos professores e estéo protegidos por senha. Para ter acesso a eles, os professores que adotam o livro devem entrar em contato com seu representante Pearson ou enviar um e-mail para universitarios@pearsoned.com. Exercicios ———__—_. Tom canisnas de =sercicios fornenidas \ 4 “Programagav onuntataa ebjeted com bw Parametros Agen wing a inétioda rewellirkzontal. Voce veri tal didlode que, Digite We cligue em 0K, Vane vero. ii Jperbesrm pie tete: clr 2 ae Der fodo o texto, ne ‘ Seine iginue oem lnses eommmnauomennraon Sie Sango copilad a destinctr ant aude nclteiia deve sez movido. Pariacen, esse metod 6 ®nal de cada secdo, \ thas, etapemnm eaveline Szontal permite especificar até unde mayer a cireaka es estudantes podem : ee Praticar os conceitos até | os compreenderem \ ‘Bapediena ds Tat eae rare Aer tHe. sEEaRCRMIREtIEt ectanpeEE fay antes ty oc er Goma come in8 ponte aiieat marnHar Eze al fata reunite, Fipaae Seequoms, RevisGes dog --—*E conceitos ‘ =SSa$ caixas resumen longo dé car sic OS conceitos gue os estudanies acanaram de ‘er — urna ferramenta Seal para revisao! ‘Dovuloee adicionais que Slyuns nities reqacism sl chennnedies pariuretis: Ln waa vubsagass tae de pardeictess ele eeques Quando chan pee exumplo.omdiedo pavetars zontal comad mosirad na Figura LA.oshalogy eniberd a dita, _sold ruvellarigental tian diatancey “poids & parte superior Tse e chara ussucatira cha mésieba, A stenteatura fomece ulema, mtomagces scbee a metoda em questi pars entre pa eynenes (int. distarce) sla ag infarmactes soltoe a pasénaroe rei Fata cada parienctro-cla define wan lipo c tim aumes A aasisunie ach tabelecesqe o méinds requer uns parimetrbeletipes Let efi Cantie ta wma dca sabes signitecnd ies adh cspetzains - > Vipos de dades ice ga especie ue pe decdados pode sex ranaminda mn gai purimenra, (0) tipo init -sygmafica mumeres ineites (uumbémm chamadta “anteito” fal No wemploaci poder ae execuiado, mais fleiveldo qs powoRLght ¢ moveLatt, Totes sempre movem o cltodhe por soa distinct ee a Kaplinin Onjstaor amass 5 Noseeemplas in! apons, cuimsen tipa de dacs git vimas fei ant, Oope Hinstein dor meraden mined w mein cmangesiaze de tales deve tie Un exsene seine ater dt mes pepmup dhs ete matin pe at Sef ckegren - ahade miloda nu meni inciucnr vs tipos de paonimetry. St um metudondy PERRET er nenliun paraiiciro, w exane do inisodo send seguuds por ute coujanty é vee um parimeta, oupa dace pankaneera cera enabidis Na Lata de poe vera umn nets care aon por aifeemte ae pacity anisiaa odors uma siting, digiter rea" AAvcuiva de Wilojys de chamacds de inétodls amber apelus urna sega deed charmada cen: inert acini da assinstura damctads. Os comentario weluides, para finpecet as ilanuagtes (pata & leitor ghuisanoy ¢ aio desencas na Capsule 2, ¢) esmetcini dn mésado changatolor deccreve quats names de core sistema conbce. infoc> ChamBEGTUr Vn an ean cine be apo die clicks tevin Pi Balad Leva uni aibmpia mata binoies endo aa tuportads mutias coms tea seks wor 8 ngorsteca nina cat rgun doa Sea Nee Ircsoonsy mbvide change aine # acim a0 nin tains sesasuas Oh gsa corny arasniern vases reer Aliseuizens tnden eles ayera, tas sullatenion & fa questo man latde. Se we 4 eta seibre eles agora, consalie w ipendice Db. Wiitiplas instancias Teivelio +7 Cio sinca-ckiotst clitiip ee Horcede de chatter. nce pede face iano fociinanda new Corcle(y a pen do meng power ca toss Crme. wene-os. Eat oT) egal, ohare ran ela unandi 18 aan tage Gust ise parade Atece Bequena dt serrk Tyot 0s cura forme tr fats igen lamar mecres ‘coin anuites circulos.A pastic de Square. 4 (Cada urs esses ekpston team ua progeia psig, oe Se oeid Ved cence eoom ‘wlliea sn atethitiy le ust objets fecenn sete Carsanisl cdaresandes atisa aude) mesic niet, Asso afetard esse objet era perticular, ras otros, Armadilhas- Dasigcam erres comuns comelidos por pragramadores ac escraver programas. Completa integracdo m com o Biued \ Sxercicias ¢ atividades\ por todo o texte \ Sermiter aos 2siudantes usar 6 \ software BlueJ! para \ Graticar 6 visualizar os \ sonceitos anreendidos. 26 Progmmagbo orietlada ackintos com lara nda (A) A cainaeo dbjeto maquina le vender balhencs a Hagia 2-4, enulads “Ties “Machine tenmiteancel” um espayu erates scominte ceepuansts o consinctor execula, Brecrnos crams “de espaqeato consanasar din objeto (ou espapoda metnda quando falamos sore mectouus era oer odexonasta LCS, SA ee e Fanconi Orapyad deccensirter Sule eee on nomes dos pardmetros denira deamcecstrutur os © métada calocesdos parimetior parszaioa de fara, relcrindksnent ans eons seanie fuimenns farmauae nn valores coms parimetros cesis. Domanto, ‘ticketGast um panimetna dermal © um valor fomucido pelo wukno. coma 90, € umn pasieetra seal Core so eapates de armeenar valores, oa sartutiar Hunan 3 tipin ike vareivel. Fm nastor diagranas, todas as varidveis su represcntadas pos varas tnaneas. i Uns pariimetre Retinal oti fool ara an objet peti nia ai . “Mutou mitieds que o declan, Dizemos qoe o e2cepa de um parimeins é restringide tw corps 4 do comsinaler wu metodo fe qual ¢ decane Sve camtrarie, ysocpen ae aie camped he a : efi Ue olese— ee pene ner acest a pore de quer har oa rasa cane: roy he wink eons 4 Um concedin relacionida com excopo ¢0 tempo de wdx da vuridect (romper de vada de ae purdenetie esth linstads swans nies chesney de (eaneretgnoey Om constaitor eatmatita Lieha-ves que essa chomada terka cemelufin sta iret tarela, ob palimnties furmais desaprecem ¢ 3 Maliies que cles mamitete ilo. periidin. Ein oumcis palayas, quate w constant iver finalised Exemplos de codigo seman San tn Codigos dee axemplo Me i bebe partite, onda det eke Inversusemte, (ee anarpisca serseeibcndiabtarienae pn a ciyeoce Porante. oc quincrenas nos enbrar chy custo de billets cu ma gucineua tickel com base ani oraieios \ a cuidadosainente : Te eruazjay nn cumpo price poet construidos foram =Sciuidos @ $40 escutidos nc livre, com rsdes commates de todos os projetes no i i Captuo? 8 ‘Entendenda as derniges de casse a3 Gaeccicie 2M Excarrrmtiede HA ot UES eg ace) saga datpe Steingrhavety weeuure ten er hl pase MASE Bare pe ran cia tampas para registro nonae ea sdhude ds emia pesos, por exemple, Seu ican er toeun a eampletar alguns los eaestichn, couuilteas segiies uteri eapiltile ee eiialag tome da Tiekerwaching por rene a que mia fires chiro. Na paces seein, tarnecemas is Ge tevinio, : Revisando um exemple familiar sets Gumnteiton twos Para agate a toting 25 Neeramente cuir coetenta cligeeentic mas Ea Se aa aes apie ee Ue ee WCadigo 29) fodiga La Avie Student veins cies oa WaySTy dhbke whut: Site de apoic. ‘ "VheenesmrertonstensicncsennenslielEetacttemced i

Você também pode gostar