MindView Inc.

Pensando em Java, 3ª ed. Revisão 4.0


[ Viewing Hints ] [ Book Home Page ] [ Free Newsletter ]
[ Seminars ] [ Seminars on CD ROM ] [ Consulting ]

Anterior Próximo Página Inicial Índice Conteúdo

Introdução



“Ele deu ao homem a palavra, e com a palavra criou-se o pensamento que é a escala do Universo” —Prometheus Unbound, Shelley



Os seres humanos... estão muito à mercê da linguagem em particular cuja qual tem se tornado o meio de expressão para sua sociedade. É uma completa ilusão imaginar que estes ajustam a realidade essencialmente sem o uso da linguagem e que a linguagem é meramente um meio provável de solucionar problemas específicos de comunicação e reflexão. O fato que importa é que o "mundo real" é em grande extenção inconcientemente construido nos hábitos linguísticos do grupo.



O Estado da Linguística como uma Ciência, 1929, Edward Sapir



Assim como a linguagem humana, Java oferece uma maneira de expressar conceitos. No alcance de seu sucesso, este meio de expressão será significativamente mais fácil e flexível comparado a outras alternativas, à medida que os problemas crescem e se tornam mais complexos.Comentários (em inglês)



Você não pode olhar para a Java como a uma coleção de características—algumas destas características não fazem sentido isoladas. Você pode usar a soma das partes somente se você estiver pensando sobredesign e não simplesmente codificando. E para enterder Java desta maneira, você tem que entender seus problemas e com a programação em geral. Este livro discute problemas de programação, porque eles são problemas e a abordagem tida com Java pare resolve-los. Assim, o conjunto de características que eu explico em cada capítulo é baseado na maneira em que eu vejo um tipo particular de problema sendo resolvido com a linguagem. Desta forma eu espero levá-lo, pouco a pouco, ao ponto onde a intenção Java se torne a sua língua nativa. Comentários (em inglês)



Durante o percurso, Eu estarei tomando a atitude de que você quer construir um modelo na sua cabeça que o permita a desenvolver um profundo entendimento da línguagem; se você encontrar um enigma, você irá estar apto a alimentar o seu modelo e deduzir a resposta. Comentários (em inglês)

Pré-requisitos



Este livro assume que você tenha alguma familiaridade com programação: você entende que um programa é uma coleção de expressões, a ídeia de uma subrotina/função/macro, controle de expressões como “if” e construções de laço como “while,” etc. Entretanto, você pode ter aprendido isto em vários lugares, como na programação com linguagens macros ou trabalhando com uma ferramenta tipo Perl. Por tanto tempo que você tenha programado até o momento que que você sinta-se confortável com ídeias básicas de programação, você estará apto a trabalhar com este livro. Claro, o livro será fácil para os programadores C e mais ainda para os programadores C++, portanto não se exclua se você não tem experiência com estas linguagens—mas venha a querer trabalhar duaramente (também, o CD multimídia que acompanha este livro tráz a velocidade em fundamentos necessários para aprender Java). No entanto, Eu irei introduzir conceitos de programação orientada a objetos (POO) e mecanismos básicos de controle do Java. Comentários (em inglês)



Embora referências sejam feitas freqüentemente para características da linguagem C e C++, estas não pretendem ser comentários internos, mas de preferência ajudar a todos os programadores colocarem Java em perspectiva com estas linguagens, das quais, apesar de tudo, Java é descendente. Eu tentarei tornar estas referências simples e explicar qualquer coisa que eu pense que alguém que não programe C/C++ não estaria familiarizado. Comentários (em inglês)

Aprendendo Java



Quase ao mesmo tempo em que meu primeiro livro Usando C++ saiu, Eu comecei a ensinar esta linguagem. Ensinar linguagens de programação tornou-se minha profissão; Tenho visto cabeças balançando, rostos pálidos, expressões estarrecidas em auditórios por todo o mundo desde 1987. Quando comecei a dar treinamentos a domicílio com pequenos grupos de pessoas, descobri algo durante os exercícios. Mesmo aquelas pessoas que estavam sorrindo e assentindo estavam confusas a respeito de muitos detalhes. Eu percebi, criando e conduzindo o caminho do C++ para a Conferência de Desenvolvimento de Softwares por um número de anos (e mais tarde criando e conduzindo o caminho Java), que eu e outros oradores tendíamos a entregar para a audiência típica, muitos tópicos muito rapidamente. Assim eventualmente, através de ambos, a variedade de níveis na audiência e o jeito com o qual eu apresentava o material, eu acabaria perdendo uma parte da audiência. Talvez seja pedir demais, mas porque eu sou uma daquelas pessoas resistentes à leitura tradicional (e para a maioria das pessoas, creio, tal resistência resulta do tédio), eu quis tentar manter a todos atualizados.Comentários (em inglês)



Durante certo tempo, eu estava criando um número de diferentes apresentações uma após a outra. Assim, eu acabei aprendendo pela experiência e iteração (uma técnica que também funciona bem em projetos de programação Java). Casualmente, eu desenvolvi um curso usando tudo o que eu havia aprendido de minha experiência lecionando. Ele aborda o problema do aprendizado em discretos, passos fáceis-de-digerir, e em um curso prático (a situação ideal de aprendizado), há exercícios seguindo cada uma das pequenas lições. Minha companhia MindView, Inc., agora, disponibiliza este como um curso Pensando em Java público e in-house; este é nosso principal curso introdutório que prove uma base para nossos cursos mais avançados. Você pode encontrar detalhes em www.MindView.net. (O curso introdutório também está avaliável como um prático CD ROM Java. Mais informação avaliável no mesmo Web site.)Comentários (em inglês)



O feedback que eu recebo de cada curso me ajuda a mudar e refocar o material enquanto me pareça que funcionará melhor como um meio de ensino. Mas este livro não são apenas anotações de um curso; Eu tentei empacotar tanta informação quanto pude nestas páginas, e estruturei-as para te levar até o próximo tópico. Mais do que qualquer coisa, este livro foi projetado para servir ao leitor solitário que está se empenhando em uma nova linguagem de programação. Comentários (em inglês)

Objetivos



Assim como meu livro anterior Pensando em C++, este livro veio a se estruturar no processo de lecionar a linguagem. Em particular, minha motivação é de criar algo que me provenha com uma forma de ensinar a linguagem em meus próprios cursos. Quando eu penso em um capítulo no livro, eu penso em termos de o que faz uma boa lição durante um curso. Meu objetivo é obter peças com o tamanho de pedaços que possam ser ensinados em um período de tempo razoável, seguidos por exercícios que sejam possíveis de completar em uma sala de aula.Comentários (em inglês)



Meus objetivos neste livro são:Comentários (em inglês)

  1. Apresentar o material em um passo simples de cada vez para que você possa facilmente digerir cada conceito antes de seguir em frente.Feedback
  2. Usar exemplos que sejam tão simples e curtos quanto possível. Isto, as vezes, me impede de adicionar problemas "do mundo real", mas eu percebi que iniciantes ficam frequentemente mais felizes quando podem entender cada detalhe de um exemplo do que quando são impressionados pelo escopo do problema que o exemplo resolve. Além disso, há uma grave limitação em relação à quantidade de código que pode ser absorvido em uma situação-sala de aula. Desta forma eu, sem dúvidas, irei receber críticas por estar usando "exemplos de brinquedo", mas eu estou disposto em aceitar isto em favor de produzir algo pedagogicamente útil.Feedback
  3. Cuidadosamente, sequenciei a apresentação de recursos para que um tópico lhe seja apresentado antes que você o veja em uso. É claro que isto nem sempre é possível; nestas situações, é dada uma breve descrição introdutória.Feedback
  4. Eu passo o que eu penso que seja importante para você entender sobre a linguagem, ao invés de passar tudo o que sei. Acredito que haja uma hierarquia da importância da informação, e que existem alguns fatos que 95 por cento dos programadores nunca precisarão saber- detalhes que só confundem as pessoas e aumentam a sua percepção da complexidade da linguagem.Tomando um exemplo de C, se você memorizar a tabela de precedência de operadores (Eu nunca fiz isso), você pode escrever um código mais bem feito. Mas você precisa refletir a este respeito, isto também irá confundir o leitor/mantenedor deste código. Então esqueça sobre precedência, e use parênteses quando as coisas não estiverem muito claras.Feedback
  5. Manter cada seção o suficientemente focada de forma que o tempo de leitura-e tempo entre períodos de exercícios-seja pequeno. Isto não só mantém a mente da audiência mais ativa e envolvida durante um curso prático, mas também dá ao leitor um senso de completude muito maior.Feedback
  6. Prover uma sólida fundação para que você possa entender o assunto bem o suficiente para mover-se a estudos e livros mais difíceis. Feedback

Documentação HTML da JDK



A linguagem Java e as bibliotecas da Sun Microsystems (download gratuito de java.sun.com) vem com documentação na forma eletrônica, legível através de um navegador Web, e virtualmente toda implementação de terceiros da Java tem este ou um sistema de documentação equivalente. Assim sendo, você já tem acesso a este ou pode fazer o download, e a menos que necessário, este livro não vai repetir tal documentação, pois é sempre muito mais fácil se você encontrar as descrições de classes com o seu navegador Web do que ficar procurando num livro (e a documentação on-line, provavelmente está mais atualizada). Simplesmente será indicada a você “a documentação JDK". Este livro proverá descrições extras das classes somente quando for necessário suplementar esta documentação para que você possa entender um exemplo em particular.Comentários (em inglês)

Capítulos



Este livro foi projetado com uma coisa em mente: a forma em que as pessoas aprendem a línguagem Java. O feedback dos cursos ajudou-me a entender as partes difíceis que precisavam de iluminação. Nas áreas onde eu fui ambicioso e inclui muitos detalhes de uma só vez, eu vim a saber -através do processo de apresentação do material- que se você inclui muitas características novas, você precisa explicar todas elas, e isto facilmente confunde os estudantes. Como conseqüência, eu tenho tomado um grande conhecimento da dificuldade de introduzir menos características de uma vez o quanto seja possível.Comentários (em inglês)



O objetivo, então, é para cada capítulo ensinar uma simples característica, ou um pequeno grupo de características associadas, sem no entanto contar com características que não tenham sido introduzidas até então. Desta maneira voce pode diregir cada peça no contexto do seu atual conhecimento antes de avançar. Comentários (em inglês)



Aqui está uma breve descrição dos capítulos contídos no livro, que correspondem a períodos de aula e exercícios do curso Pensando em Java.Comentários (em inglês)



Capítulo 1: Introdução a Objetos



(Lição correspondente no CD ROM). Este capítulo é uma visão geral sobre o que se trata por programação orientada a objetos, incluindo a resposta à questão básica "O que é um objeto?" Ele visualiza a interface versus a implementação, abstração e encapsulamento, mensagens e métodos, herança e composição, e o sutil conceito de polimorfismo. Você também irá obter uma visão geral das minúcias da criação de objetos tais como os construtores, onde os objetos vivem, onde colocá-los uma vez que tenham sido criados, e o mágico coletor de lixo que elimina os objetos que não são mais necessários. Outros assuntos serão introduzidos, incluindo manipulação de erros com exceptions, multithreading para interfaces de usuário interativas, e redes e a internet. Você aprenderá o que faz a linguagem Java tão especial e porque ela tem sido tão bem sucedida.Comentários (em inglês)



Capítulo 2: Tudo é um Objeto



(Lição correspondente no CD ROM). Este capítulo te leva ao ponto em que você pode escrever o seu primeiro programa. Ele começa com uma visão geral do essencial: o conceito de uma referência a um objeto; como criar um objeto; uma introdução aos tipos primitivos e arrays (vetores); escopo e a forma como os objetos são destruídos pelo garbage collector; como tudo em Java é um novo tipo de dados (classe); o básico de como criar as suas próprias classes; métodos, argumentos, e valores de retorno; visibilidade de nomes e uso de componentes de outras bibliotecas; a palavra-chave static; e comentários e documentação (javadocs).Comentários (em inglês)



Capítulo 3: Controlando o Fluxo do Programa



(Conjunto de lições correspondentes no CD ROM: Thinking in C). Este capítulo começa com todos os operadores que vêm para o Java do C e C++. Além disso, você descobrirá armadilhas comuns com os operadores, casting, promoção, e precedência. Isto é seguido das operações de controle de fluxo e seleção básicas que você obtém com virtualmente qualquer linguagem de programação: escolha com if-else, iteração com for e while, interrupção de loops com break e continue bem como o break rotulado do Java e continue rotulado (que corresponde ao "ausente goto" em Java), e seleção usando switch. Apesar de boa parte deste material ter linhas em comum com o código em C e C++, existem algumas diferenças. Comentários (em inglês)



Capítulo 4: Inicialização & Limpeza



(Lição correspondente no CD ROM). Este capítulo inicia introduzindo o construtor, que garante a inicialização apropriada. A definição do construtor leva ao conceito de sobrecarga de método (já que você pode desejar vários construtores). Isto é seguido de uma discussão do processo de limpeza, o que nem sempre é tão simples quanto parece. Normalmente, você só descarta um objeto quando já terminou de utilizá-lo, e o garbage collector eventualmente vem e libera a memória. Esta porção explora o garbage collector e algumas de suas idiossincrasias. O capítulo conclui com um olhar mais de perto sobre como as coisas são inicializadas: inicialização automática de um membro, especificação da inicialização de um membro, a ordem de inicialização, inicialização static, e inicialiação de array. Comentários (em inglês)



Capítulo 5: Escondendo a Implementação



(Lição correspondente no CD ROM). Este capítulo cobre a forma como o código é empacotado, e porque algumas partes de uma biblioteca são expostas enquanto outras são escondidas. Ele começa visualizando as palavras chaves package e import, que apresentam empacotamento no nível de arquivo e lhe permitem construir bibliotecas de classes. Examina então o assunto caminhos de diretórios e nomes de arquivos. O restante do capítulo olha para as palavras chaves public, private, e protected, o conceito de package access, e o que os diferentes níveis de controle de acesso significam quando utilizados em vários contextos. Comentários (em inglês)



Capítulo 6: Reutilização de Classes



(Lição correspondente no CD ROM). O jeito mais simples de reutilizar uma classe é embutir um objeto dentro de sua nova classe com composição. Entretanto, composição não é a melhor forma de criar novas classes através daquelas já existentes. O conceito de herança é padrão em virtualmente todas as linguagens POO. É uma forma de pegar uma classe já existente e adicionar à sua funcionalidade (de forma a modificá-la - o assunto do Capítulo 7). Herança é freqüentemente uma forma de reutilizar código deixando a "classe base" do mesmo jeito e ir só anexando coisas aqui e ali para produzir o que você quer. Neste capítulo você vai aprender como composição e herança reutilizam código em Java, e como aplicá-las.Comentários (em inglês)



Capítulo 7: Polimorfismo



(Correspondente a leitura no CD ROM). Semelhante a si mesmo, você pode levar nove meses para descobrir e entender poliformismo, uma pedra angular da POO. Através de pequenos, simples exemplos, você irá ver como criar uma família de tipos com herança e manipular objetos nessa família através de classes bases comuns. O poliformismo de Java permite a você tratar genericamente de todos os objetos nesta família, com siguinificados que o volume de seu código não conta em um tipo específico de informação. Isso torna o seu código muito mais flexível, assim é fácil e barato ir construindo programas e dando manutenção no código. Comentários (em inglês)



Capítulo 8: Interfaces & Inner Classes



Java provê ferramentas especiais para projetar e reutilizar relacionamentos: a interface, que é uma pura abstração da interface de um objeto. A interface está justamente além do que faz o extremo de uma classe abstrata (abstract class), pois ela permite executar uma variação de “multipla herança” do C++ pela criação de uma classe que pode ser convertida em mais do que um tipo base. Comentários (em inglês)



Primeiro, classes internas parecem um simples mecanismo de esconder código; você estabelece classes dentro de outras classes. Você aprenderá, todavia, que uma classe interna faz mais do que isso; sabe-se que podem comunicar-se com as classes que a cercam. O tipo de código que você pode escrever com classes internas é mais elegante e limpo. De qualquer modo, este é um novo conceito, e toma algum tempo para tornar confortável seu uso.Comentários (em inglês)



Capítulo 9: Tratando Erros com Exceções



A filosofia básica de Java é que código mal formado não será executado. Enquanto for possível, o compilador pega os problemas, mas algumas vezes um problema - ou um erro de programação ou um erro natural de condição que ocorre como parte de uma execução normal do programa - pode ser detectado e manipulado somente em tempo de execução. Java possui tratamento de exceções para lidar com quaisquer problemas que surgem quando o programa está em execução. Este capítulo examina como as palavras-chave try, catch, throw, throws, e finally trabalham em Java, quando você deve lançar exceções, e como agir quando você as pega. Adicionalmente, você irá ver as exceções padrão do Java, como criar a sua própria, o que acontece com exceções em construtores, e como as exceções são tratadas e descobertas durante uma execução. Comentários (em inglês)



Capítulo 10: Detectando Tipos



A identificação de tipos em tempo de execução (RTTI - Java run-time type identification) permite encontrar o tipo exato de um objeto quando você tem uma referência somente ao tipo base. Normalmente, você ignorará intencionalmente o tipo exato e deixará que o mecanismo de ligação dinâmica do Java (polimorfismo) implemente o comportamento correto para aquele tipo. Mas ocasionalmente, é muito útil saber o tipo exato de um objeto para o qual você tem somente uma referência base. Frequentemente essa informação permite-nos realizar uma operação especial mais eficientemente. Esse capítulo também introduz o mecanismo Java reflexão. Você aprenderá para que RTTI e reflexão são e como usá-los, e também como se livrar deles quando não forem mais necessários.Comentários (em inglês)



Capítulo 11: Coleções de Objetos



É um programa bastante simples que tem apenas uma quantidade fixa de objetos com tempos de vida conhecidos. Em geral, seus programas sempre criarão novos objetos numa variedade de vezes que será conhecida somente quando o programa estiver rodando. Além disso, até o tempo de execução, você não sabe a quantidade ou mesmo o tipo exato de objetos que você precisa. Para resolver esse problema geral de planejamento você precisa criar um número qualquer de objetos em qualquer lugar a qualquer hora. Este capítulo explora com profundidade a coleção de bibliotecas que o Java disponibiliza para organizar objetos enquanto você está trabalhando com os mesmos: simples vetores e conjuntos mais sofisticados (estrutura de dados) tais como ArrayList and HashMap. Comentários (em inglês)



Capítulo 12: O Sistema de E/S do Java



Teoricamente, você pode dividir qualquer programa em três partes: entrada, processo e saída. Isto implica que a E/S (entrada/saída) é uma parte importante da equação. Neste capítulo vamos aprender as diferentes classes que o Java disponibiliza para ler e gravar arquivos, blocos de memória e o console. A evolução da estrutura E/S do Java e o ‘nova’ E/S do JDK 1.4 (nes) serão examinados. Além disso, este capítulo mostra como você pega um objeto, “desmancha” (de forma que ele possa ser deixado no disco ou ser enviado através de uma rede), e o reconstroe, o qual é tratado para você com o objeto de serialização Java. As bibliotecas de compressão Java, que são usadas no formato de ARquivo Java (JAR), serão examinadas. Finalmente, as novas preferências da interface de programação de aplicativos (API) e expressões regulares serão explicadas. Comentários (em inglês)



Capítulo 13: Concorrência



Java provê uma facilidade interna para suportar múltiplas subtarefas concorrentes, chamadas threads, rodando interiormente em um único programa. (A menos que você tenha múltiplos processadores em sua maquina, isto é apenas uma simulação de múltiplas tarefas). Embora possam ser usadas em qualquer lugar, threads são mais evidentes quando tentam criar uma interface com usuário que reaja positivamente mas, por exemplo, um usuário não é prevenido de pressionar um botão ou entrada de dados enquanto algum processamento está ativo. Este capítulo dá a você uma sólida base sobre os fundamentos da programação concorrente.Comentários (em inglês)



Capítulo 14: Criando Janelas e Applets



Java vem com a biblioteca GUI Swing, que é um grupo de classes que ajuda a criação de janelas de forma portável. Estes programas que possuem janelas podem ser applets da World Wide Web (Internet) ou aplicações locais. Este capítulo é uma introdução para a criação de programas utilizando Swing. Assinatura Applet e Java Web Start são demonstrados. Também uma introdução à importante tecnologia JavaBeans, o qual é fundamental para a construção de programas/ferramentas Rapid Application Development (RAD). Comentários (em inglês)



Capítulo 15: Descobrindo Problemas



Mecanismos de controle de linguagem podem tornar-nos tão distante em nossa busca por desenvolver um programa corretamente. Este capítulo apresenta ferramentas para solucionar os problemas que o compilador não consegue. Um dos maiores passos pela frente é a incorporação de teste de unidade automatizado. Neste livro, um sistema de teste adaptado foi desenvolvido para assegurar a exatidão da saída do programa, mas o sistema de teste padrão JUnit também é mencionado. A construção automática é implementada com a ferramenta de padrão de código aberto Ant, e para grupos de trabalho (times), o básico de CVS também é explanado. Para problemas em tempo de execução, o capítulo apresenta o mecanismo Java assertion (mostrado aqui com Design por acordo), a API de relatório, depuradores, profilers, e mesmo doclets (que pode ajudar a descobrir problemas no código fonte).



Capítulo 16: Análise & Projeto



O paradigma orientado-a-objeto é uma nova e diferente maneira de pensar sobre programação, e muitas pessoas iniciantes tem problemas de como abordar um projeto OO. Uma vez que você entenda o conceito de um objeto, e que você aprenda a pensar mais no estilo orientado-a-objeto, você pode criar "bons" designs e obter vantagens de todos os benefícios que a OO tem a oferecer. Este capítulo introduz as idéias de análises, planejamento, e algumas maneiras de abordar problemas no desenvolvimento em tempo razoável de bons programas orientados-a-objeto. Tópicos incluem diagramas UML (Unified Modeling Language) e metodologias associadas, casos de uso (use cases), cartões CRC (Class-Responsibility-Collaboration), desenvolvimento iterativo, Extreme Programming(XP), maneiras para desenvolver e melhorar código, e estratégias para transição para programação orientada-a-objetos.



Apêndice A: Passando & Retornando Objetos



Dês de que a única forma de se comunicar com objetos em java é através de referências, os conceitos de passar um objeto para um método e retornar um objeto de um método têm algumas conseqüências interessantes. Este apêndice explica o que você precisa saber para manipular objetos quando você está se movendo para dentro e para fora dos métodos, e também mostra a classe String, que usa uma abordagem diferente do problema. Comentários (em inglês)



ApêndiceB: Guia de Programação Java



Este apêndice contém sugestões que recebi e coletei durante anos para guiá-lo durante a preparação de projeto em programação de baixo nível e escrita de código. Comentários (em inglês)



Apêndice C: Suplementos



Descrições de materiais de aprendizado adicionais disponíveis pela MindView:
1. O CD ROM que está nas parte de traz deste livro, que contém o curso-em-CD dos Fundamentos do Java, para prepará-lo para a leitura deste livro.
2. O CD ROM prático de Java, terceira edição, disponível em www.MindView.net. Um curso-em-CD que é baseado no material deste livro.
3. O curso Pensando em Java. O principal curso introdutório da MindView Inc., baseado no material deste livro. Lista e páginas de registro podem ser encontradas em www.MindView.net.
4. Pensando em Enterprise Java, um livro que cobre mais tópicos avançados de Java, apropriados para a programação empresarial. Disponível em www.MindView.net.
5. O curso J2EE. Te introduz no desenvolvimento prático do mundo-real, habilitado para Web, de aplicações distribuídas com Java. Veja em www.MindView.net.
6. Curso de projeto de Objetos & Sistemas. Análise orientada a objetos, técnicas de projeto e de implementação. Veja em www.MindView.net.
7. Pensando em Padrões (com Java), que cobre os tópicos mais avançados de Java em Padrões de Projeto e técnicas de resolução de problemas. Disponível em www.MindView.net.
8. Curso Pensando em Padrões. Um curso presencial baseado no livro acima. Lista e páginas de registro podem ser encontradas em www.MindView.net.
9. Consulta e Revisão de Projetos. Uma assistência para ajudá-lo a manter os seus projetos em um bom formato.



Apêndice D: Recursos



Uma lista de alguns livros de Java que tenho achado em particular útil. Comentários (em inglês)

Exercícios



Eu descobri que exercícios simples são excepcionalmente úteis para consolidar a compreensão de um estudante durante um seminário, então você encontrará alguns no final de cada capítulo.Comentários (em inglês)



A maioria dos exercícios foram desenhados para serem fáceis de resolver para que possam ser concluídos durante um tempo razoavel em situação de aula enquanto o instrutor observa, certificando-se que todos os estudantes estão absorvendo a matéria. Alguns são mais desafiadores, mas nenhum apresenta um desafio principal. Possivelmente, você irá encontra-los por si só, ou o mais provável, eles é que te encontrarão.Comentários (em inglês)



As soluções dos exercícios podem ser encontradas no documento eletrônicoThe Thinking in Java Annotated Solution Guide, disponível por uma pequena taxa em www.BruceEckel.com. Comentários (em inglês)

O CD ROM



Um outro bônus nesta edição é o CD-ROM que está empacotado na parte final do livro. Eu resisti em por CDs atrás de meus livros no passado porque eu sentia uma carga extra em por uns poucos kilobytes de código fonte em um CD enorme não justificava, preferindo, ao invés disto, permitir que as pessoas fizessem download de meu Web site. Entretanto, você verá logo que este CD é diferente.Comentários (em inglês)



O CD não contém o código fonte dos exemplos do livro, mas, por outro lado, tem um link para o código que se encontra em www.MindView.net (você não precisa do link no CD para obter o código fonte. Você pode simplesmente ir ao site e procurá-lo). Existem duas razões para isto: o código não estava completo no momento em que o CD tinha de ser enviado para o impressor, e esta abordagem permite que o código evolua e seja corrigido assim que surja necessidade. Comentários (em inglês)



Pelo motivo do livro ter mudado siguinificativamente a partir da terceira edição, o CD contém a primeira e a segunda edição do livro em formato HTML, incluindo seções que foram removidas por razões óbvias nas últimas edições, mas que podem em alguns casos ser úteis a você. Adicionalmente, você pode baixar a versão HTML atualizada (terceira edição) do livro de www.MindView.net, e esta irá incluir correções na medida em que foram descobertas e corrigidas. Um benefício do livro na versão HTML é que o índice está com hyperlinks tornando a navegação muito mais simplificada. Comentários (em inglês)



A maior parte dos 400+ Megabytes no CD, entretanto é um curso multimídia completo chamado Fundamentos do Java. Isto inclui o curso Pensando em C que lhe dá uma introdução a sintaxe do C, operadores e funções nos quais a sintaxe do Java está baseada. Como acréscimo, estão inclusas as sete primeiras lições da segunda edição do prático curso-em-CD de Java que eu criei e descrevi. Ainda que historicamente o CD prático de Java só está disponível para venda separadamente ( este também é o caso da terceira edição do CD prático de Java que deve estar disponível enquanto você lê este - veja em www.MindView.net), eu decidi incluir as primeiras sete lições da segunda edição porque elas não terão mudado muito em relação à terceira edição do livro, então elas não vão só lhe fornecer (junto com Pensando em C) uma base para o entendimento deste livro, mas além disso eu espero que lhe dê um gosto da qualidade e valor do CD prático de Java, 3ª edição.Comentários (em inglês)



Eu, originalmente, encarreguei Chuck Allison de criar a parte Pensando em C deste curso-em-CD ROM como um produto a parte, mas decidi incluí-lo com a segunda edição de ambos Pensando em C++ e Pensando em Java devido à experiência constante de ter pessoas vindo aos cursos sem uma base adequada da sintaxe básica de C. Aparentemente o pensamento deles é "Eu sou um programador esperto e não quero aprender C, mas ao contrário, quero aprender C++ ou Java, então eu vou simplesmente desviar de C e ir direto pra C++/Java". Depois de chegarem ao curso, lentamente nascia nas pessoas o conceito de que o pré-requisito de entender a sintaxe do C está aí por um bom motivo. Incluindo o CD ROM com o livro, nós podemos nos assegurar de que todos que estiverem seguindo este curso têm uma preparação adequada.Comentários (em inglês)



O CD também permite ao livro atender a uma audiência maior. Mesmo com o capítulo 3 (Controlando o Fluxo do Programa) cobrindo os fundamentos das partes do Java que vêm de C, o CD é uma boa introdução e assume que o estudante tem um background de programação menor que o assumido pelo livro. E ter andado através do material dos primeiros sete capítulos através das leituras correspondentes na segunda edição do CD prático de Java deve ajuda-lo a obter uma base ainda melhor em Java. Tenho esperança de que incluindo o CD, mais pessoas serão capazes de serem levadas a abraçarem a programação Java. O CD ROM prático de Java 3ª edição está disponível somente através de encomenda diretamente pelo site na Web www.BruceEckel.com. Comentários (em inglês)

Código fonte



Todo o código fonte para este livro está disponível como freeware com os direitos registrados, distribuído como um pacote único, pela visita ao Web site www.BruceEckel.com. Para ter certeza que você pegou a última versão, este é o site oficial para a distribuição do código e da versão eletrônica do livro. Você pode encontrar versões espelhadas do livro eletrônico e o código em outros sites (alguns destes sites podem ser encontrados em www.BruceEckel.com), mas você deve checar o site oficial para se assegurar que a versão espelhada é realmente a edição mais recente. Você pode distribuir o código em sala de aula e outras situações educacionais.Comentários (em inglês)



O objetivo primário dos direitos autorais é o de assegurar que a origem do código seja propriamente citada, e preveni-lo de republicar o código em mídia impressa sem permissão. (Assim que o código for citado, usar exemplos do livro na maior parte das mídias geralmente não é um problema).Comentários (em inglês)



Em cada arquivo do código fonte, você encontrará uma referência a seguinte nota de direitos autorais:Comentários (em inglês)



Os direitos autorais deste código fonte pertencem a ©2003 MindView, Inc.
Todos os direitos reservados.

Permissão para usar, copiar, modificar e distribuir este 
código fonte de computador (Source Code) e sua documentação 
sem remuneração e sem um acordo por escrito para os 
propósitos listados abaixo é garantida por meio desta, de acordo com a 
nota de direitos autorais acima, este parágrafo e os 
cinco numerados a seguir aparecem em todas as cópias.

1. É garantida permissão para compilar o código fonte e 
incluir o código compilado, somente em formato executável, em 
programas de software pessoais e comerciais.

2. É garantida permissão para a utilização do código fonte sem 
modificação no emprego em salas de aula, incluindo em 
materiais de apresentação, dado que o livro "Pensando em 
Java" seja citado como sua origem.

3. Permissão para incorporar o código fonte em 
mídia impressa deve ser obtida contatando 

MindView, Inc. 5343 Valle La mesa, Califórnia 91941 
Wayne@MindView.net

4. O código fonte e sua documentação têm seus direitos autorais pertencentes a 
MindView, Inc. O código fonte é fornecido sem 
garantia expressa ou implícita de qualquer tipo, incluindo qualquer 
garantia implícita de comercialização, oportunidade para um propósito 
particular ou não violação. MindView, Inc. não 
garante que a operação de qualquer programa que inclua o 
Código Fonte estará livre de erros ou interrupção. MindView, 
Inc. não provê nenhuma representação a respeito da confiabilidade do 
Código Fonte ou de qualquer software que inclua o Código 
Fonte para qualquer propósito. O completo risco quanto à qualidade 
e desempenho de qualquer programa que inclua o código 
fonte é delegada ao usuário deste. O usuário 
entende que o código fonte foi desenvolvido com propósitos institucionais e de pesquisa 
e está informado de que não deve, 
por qualquer motivo, depender do código fonte ou de qualquer 
programa que inclua este código fonte. Se o código 
fonte ou qualquer software deste resultante se provar defeituoso, o usuário 
assume os custos de qualquer serviço de reparo, ou 
correção.

5. EM NENHUMA SITUAÇÃO MINDVIEW, INC. , OU SUA EDITORA DEVE SER 
RESPONSABILIZADA POR QUALQUER  PARTE SOBRE QUALQUER TEORIA LEGAL POR DANOS DIRETOS, 
INDIRETOS, ESPECIAIS, ACIDENTAIS OU SUCESSIVOS DANOS, 
INCLUINDO PERDA DE LUCRO, INTERRUPÇÃO DE NEGÓCIOS, PERDA DE INFORMAÇÃO 
COMERCIAL, OU QUALQUER OUTRO DANO FINANCEIRO, 
OU POR PREJUÍSO PESSOAL, QUE DECORRAM DO USO DESTE CÓDIGO 
FONTE E DE SUA DOCUMENTAÇÃO, OU DECORRENTES AINDA DA INCAPACIDADE DE 
USAR QUALQUER PROGRAMA RESULTANTE, MESMO QUE A MINDVIEW, INC. , OU 
SEU EDITOR TENHAM SIDO COMUNICADOS DA POSSIBILIDADE DE TAIS 
DANOS. MINDVIEW, INC. , EXPLICITAMENTE RENUNCIA A QUALQUER 
GARANTIA, INCLUINDO MAS NÃO LIMITADO À 
GARANTIAS INPLÍCITAS DE COMERCIABILIDADE E OPORTUNIDADE PARA ALGUM 
PROPÓSITO PARTICULAR. O CÓDIGO FONTE E A DOCUMENTAÇÃO FORNECIDOS 
DE ACORDO COM O QUE ESTÁ AQUI ESCRITO SÃO DISPONIBILIZADOS NUMA BASE "COMO ESTÁ", SEM QUALQUER SERVIÇO 
ASSOCIADO PELA MINDVIEW, INC. , E MINDVIEW, INC. NÃO TEM NENHUMA 
OBRIGAÇÃO DE PROVER MANUTENÇÃO, SUPORTE, ATUALIZAÇÕES, 
MELHORIAS OU MODIFICAÇÕES.

Por favor, perceba que MindView, Inc. mantém um site na web que 
é o único ponto de distribuição das cópias eletrônicas do Código Fonte, http://www.BruceEckel.com (e os sites espelhos oficiais)

, lá ele está disponibilizado livremente sob os termos declarados 
acima.

Se você acha que encontrou um erro neste código fonte, 
por favor, submeta uma correção usando a URL marcada como "feedback"
 na versão eletrônica do livro, próxima ao erro que 
você encontrou.




Você pode usar o código em seus projetos e na sala de aula (inclusive em seus materiais de apresentação) conforme as informações de direitos autorais que aparecem em cada arquivo fonte disponibilizado. Comentários (em inglês)

Padrões de Codificação



No texto deste livro, identificadores (métodos, variáveis e nomes de classes) estão grafados em negrito. A maioria das palavras chave também está grafada em negrito, exceto por aquelas palavras que são tão usadas que o negrito pode se tornar tedioso, como em "classe".Comentários (em inglês)



Eu uso um estilo particular no código dos exemplos deste livro. Este estilo segue o estilo que a própria Sun utiliza em praticamente todo o código que você encontrará em seu site (veja java.sun.com/docs/codeconv/index.html), e que parece ser suportado pela maioria dos ambientes de programação Java. Se você já leu meus outros trabalhos, você também irá perceber que o estilo de codificação da Sun coincide com o meu - isto me agrada, contudo eu não tenho nada a ver com isto. O assunto estilo de formatação é um bom assunto para horas de debate, então eu direi que não estou tentando ditar o estilo correto através de meus exemplos; Eu tenho minha própria motivação para utilizar o estilo que utilizo. Pois Java é uma linguagem de programação de formato-livre, você pode continuar a usar qualquer estilo com o qual você já esteja confortável. Comentários (em inglês)



Os programas neste livro são arquivos que foram incluídos no texto pelo processador de textos word, diretamente de arquivos compilados. Desta forma, os arquivos de código impressos neste livro deverão todos funcionar sem erros de compilação. Os erros que podem causar mensagens de erro de tempo de compilação estão comentados com o comentário //! então eles podem ser facilmente descobertos e testados usando meios automáticos. Erros descobertos e reportados ao autor aparecerão no primeiro código fonte distribuído e depois nas atualizações do livro (o qual aparecerá também no site da Web www.BruceEckel.com). Comentários (em inglês)

Versões de Java



De maneira geral, eu me baseio na implementação Java da Sun como referência para determinar qual comportamento é correto.Comentários (em inglês)



Este livro se concentra e foi testado com o Java 2, JDK 1.4. Se você precisa aprender sobre releases anteriores da linguagem que esta edição não cobre, a primeira e a segunda edições do livro estão à disposição para download grátis em www.BruceEckel.com e também estão no CD que vem com o livro. Comentários (em inglês)

Erros



Não importa quantos truques um escritor utilize para detetar erros, alguns sempre escapam e saltam para fora da visão do leitor que está iniciando. Comentários (em inglês)



Já que o feedback provido por leitores astutos tem sido tão valioso para mim, desenvolvi várias versões de um sistema de feedback chamado BackTalk (concebido com a ajuda de Bill Venners, e implementado com a ajuda de várias outras pessoas, usando diversas tecnologias diferentes). Na versão eletrônica deste livro, cujo download pode ser feito gratuitamente em www.BruceEckel.com, cada parágrafo do texto tem sua própria URL, que inicia um email que vai registrar seu comentário no sistema BackTalk para aquele parágrafo específico. Dessa maneira, fica fácil localizar e fazer correções. Se você descobrir qualquer coisa que acredite ser um erro, por favor use o sistema BackTalk para submeter o erro juntamente com sua sugestão para correção. Sua ajuda é apreciada. Comentários (em inglês)

Nota sobre o design da capa



A capa do Pensando em Java foi inspirada no movimento americano "Arts and Crafts", que começou aproximadamente na virada do século e alcançou seu zênite entre 1900 e 1920. Este movimento se iniciou na Inglaterra como uma reação tanto à produção das máquinas da Revolução Industrial, como ao estilo extremamente ornamental da era Vitoriana. "Arts and Crafts" enfatizava design comedido, formas da natureza como visto no movimento "Art Nouveau", trabalho artesanal, e a importância do indivíduo artesão, sem no entanto abster-se do uso de ferramentas modernas. Existem muitos paralelos com a situação atual: a virada do século, a evolução desde as origens cruas da revolução da informática até algo mais refinado e significativo para o indivíduo, e a ênfase maior no artesanato do software que na simples fabricação de código.Comentários (em inglês)



Vejo a linguagem Java da mesma forma: como uma tentativa de elevar o programador da mecânica do sistema operacional ao status de “artesão de software”.Comentários (em inglês)



Ambos o autor e o designer da capa do livro (que têm sido amigos desde a infância) encontram inspiração naquele movimento, e ambos possuem mobília, luminárias, e outras peças que são originais ou inspiradas no período.Comentários (em inglês)



A outra temática abordada na capa sugere uma caixa de colecionador, que um naturalista usaria para expor espécies de insetos que tem preservado. Esses insetos são objetos colocados dentro dos objetos caixas, e os objetos caixas são por sua vez colocados dentro do “objeto tampa”, o que ilustra o conceito fundamental de agregação em programação voltada a objetos. Claro, um programador não pode evitar fazer a associação com “bugs” (erros de programação), e aqui os “bugs” têm sido capturados e presumidamente mortos num vidro de amostra, e por fim confinados em uma pequena caixa para exposição, como para indicar a habilidade da linguagem Java em encontrar, expor e subjugar erros de programação (o que é verdadeiramente um de seus mais poderosos atributos).Comentários (em inglês)

Agradecimentos



Primeiramente, obrigado aos sócios que trabalharam comigo dando seminários, provendo consultoria, e desenvolvendo projetos de ensino: Andrea Provaglio, Dave Bartlett, Bill Venners, Chuck Allison, Jeremy Meyer, e Larry O’Brien. Sou grato à sua paciência enquanto eu continuo tentando desenvolver o melhor modelo para gente independente como nós trabalhar junto.Comentários (em inglês)



Recentemente, sem dúvida por causa da Internet, eu tenho me associado a um número surpreendentemente grande de pessoas que me ajudam em meus esforços, geralmente trabalhando no escritório de suas casas. No passado, eu teria que pagar por um escritório bastante grande para acomodar todas essas pessoas, mas por causa da rede, dos serviços de correio e ocasionalmente do telefone, posso tirar proveito de sua ajuda sem os custos extras. Em minhas tentativas de aprender melhor a “brincar bem com outros”, vocês todos têm sido muito prestativos, e eu espero continuar aprendendo como melhorar meu próprio trabalho através dos esforços de outros. Paula Steuer tem sido inestimável em tomar as rédeas das minhas desorganizadas práticas de negócios e restaurando a sanidade (obrigado por me cutucar quando eu não quero fazer alguma coisa, Paula). Jonathan Wilcox, Esq., peneirou minha estrutura corporativa e virou cada pedra de onde poderiam sair escorpiões, e nos carregou contra a vontade através do processo de endireitar tudo, na área legal. Obrigado por seus cuidados e persistência. Sharlynn Cobaugh (que descobriu Paula) fez de si uma especialista em processamento sonoro, e parte essencial na criação dos CDs de treinamento em multimídia, bem como na resolução de outros problemas. Obrigado por sua perseverança ao se deparar com problemas teimosos e rebeldes no computador. Evan Cofsky (Evan@TheUnixMan.com) se tornou parte essencial no meu processo de desenvolvimento, nadando pela linguagem de programação Python (“jibóia”) como um pato (Hmm. Uma metáfora misturada como essa pode dar em uma jibóia gorda) e resolvendo todo tipo de problemas difíceis, incluindo a re-arquitetura (final?) do sistema BackTalk num banco de dados XML baseado em e-mail. O pessoal em Amaio, em Praga, me ajudou com vários outros projetos. Daniel Will-Harris foi a inspiração original para o trabalho-pela-Internet, e é claro, ele é fundamental para todas as minhas soluções de design. Comentários (em inglês)



Para este projeto, eu dei outro passo que tem fermentado em minha mente por um tempo. No verão de 2002, criei um programa de estágio em Crested Butte, Colorado, inicialmente procurando por dois estagiários e acabando com 5 (dois voluntários). Não apenas eles contribuíram para o livro, mas também ajudaram a me manter concentrado no projeto. Obrigado a JJ Badri, Ben Hindman, Mihajlo Jovanovic, Mark Welsh. Chintan Thakker pôde continuar num segundo estágio até o final do processo do livro e além. E já que eu tinha que alugar o apartamento em Mount Crested Butte, anunciamos vagas para voluntários e conseguimos Mike Levin, Mike Shea, e Ian Phillips, todos os quais fizeram contribuições. Um dia eu talvez venha a fazer outro programa de estágio, visite www.MindView.net para notícias.Comentários (em inglês)



Obrigado à Doyle Street Cohousing Community por aturar os dois anos que levei para escrever a primeira edição deste livro (e por me aturar). Muito obrigado a Kevin e Sonda Donovan por sublocar sua casa na linda Crested Butte, Colorado, durante o verão em que trabalhei na primeira edição do livro (e ao Kevin pela grande reforma que fez no meu apartamento em CB). Obrigado também os simpáticos residentes de Crested Butte e ao Rocky Mountain Biological Laboratory que me fez sentir tão bemvindo. Minhas professoras de ioga em CB, Maria e Brenda, foram de grande ajuda para manter minha sanidade mental durante o desenvolvimento da terceira edição.Comentários (em inglês)



Camp4 Coffee em Crested Butte, Colorado, se tornou o local de escolha para socializar quando os professores vêm dar seminários, e nos intervalos é a melhor comida e de melhor preço que eu já experimentei. Obrigado ao meu camarada Al Smith por abrir e manter um lugar como esse, e por ser uma parte tão interessante e divertida de Crested Butte. Comentários (em inglês)



Obrigado a Claudette Moore da Moore Literary Agency por sua tremenda paciência e perseverança em me conseguir exatamente o que eu queria. Obrigado a Paul Petralia da Prentice Hall por continuar provendo o que eu desejava, e pelo sacrifício para fazer com que tudo desse certo para mim (e por aturar todos os meus pedidos especiais). Comentários (em inglês)



Meus dois primeiros livros foram publicados com Jeff Pepper como editor na Osborne/McGraw-Hill. Jeff surgiu no lugar certo, na hora certa na Prentice Hall para estabelecer as fundações para estes livros, antes de passar a responsabilidade ao Paul. Obrigado, Jeff. Comentários (em inglês)



Obrigado a Rolf André Klaedtke (Suíça); Martin Vlcek, Vlada & Pavel Lahoda (Praga); e Marco Cantu (Itália) por me hospedar durante minha primeira turnê de seminários auto-organizada na Europa. Comentários (em inglês)



Obrigado a Gen Kiyooka e sua empresa Digigami, que graciosamente forneceu o servidor pelos vários primeiros anos da minha presença na Internet. Este foi um inestimável auxílio de aprendizagem. Comentários (em inglês)



Um agradecimento especial para Larry e Tina O’Brien, que ajudaram a transformar meu seminário na primeira edição do CD ROM Hands-On Java (saiba mais em www.BruceEckel.com). Comentários (em inglês)



Algumas ferramentas de open-source se mostraram de inestimável valor durante o meu processo de desenvolvimento e eu sou muito grato a seus criadores todas as vezes que eu as uso. Cygwin (http://www.cygwin.com) resolveu inúmeros problemas para mim que o Windows não resolvia, e eu fico mais afficionado a cada dia (se pelo menos eu tivesse essa ferramenta há 15 anos atrás, quando meu cérebro ainda estava interconectado com Gnu Emacs...). CVS e Ant se tornaram essencial para meu desenvolvimento em Java e eu não poderia voltar atrás agora. Passei até a gostar de JUnit (http://www.junit.org) agora que eles realmente o tornaram “a coisa mais simples possível de funcionar”. O Eclipse, da IBM (http://www.eclipse.org), é realmente uma contribuição maravilhosa para a comunidade de desenvolvedores, e eu antevejo grandes feitos enquanto continua a evoluir (como foi que a IBM virou modismo? Eu devo ter perdido o memorando). Linux foi usado diariamente durante o processo de desenvolvimento, especialmente pelos estagiários. E é claro, se eu ainda não disse o suficiente, eu uso Python (www.Python.org) constantemente para solucionar problemas, a invenção do meu camarada Guido Van Rossum e as genialidades palhaças da PythonLabs com quem eu passei alguns grandes dias fazendo programação XP em Zope 3 (Tim, eu coloquei numa moldura aquele mouse que você pegou emprestado, oficialmente nomeado como “TimMouse”). Vocês precisam encontrar lugares mais saudáveis para almoçar (obrigado também à comunidade Python toda, um incrível bando). Comentários (em inglês)



Muitas pessoas mandaram correções e sou grato a todos, mas em particular obrigado (pela primeira edição) a: Kevin Raulerson (encontrou um monte de excelentes falhas), Bob Resendes (simplesmente inacreditável), John Pinto, Joe Dante, Joe Sharp (os três foram fabulosos), David Combs (muitas correções gramaticais e clarificações), Dr. Robert Stephenson, John Cook, Franklin Chen, Zev Griner, David Karr, Leander A. Stroschein, Steve Clark, Charles A. Lee, Austin Maher, Dennis P. Roth, Roque Oliveira, Douglas Dunn, Dejan Ristic, Neil Galarneau, David B. Malkovsky, Steve Wilkinson, e vários outros. Prof. Ir. Marc Meurrens não mediu esforços para publicar na Europa e tornar disponível por lá a versão eletrônica da primeira edição do livro. Comentários (em inglês)



Obrigado àqueles que me ajudaram a reescrever os exemplos usando a biblioteca Swing (para a segunda edição), e deram diversos auxílios: Jon Shvarts, Thomas Kirsch, Rahim Adatia, Rajesh Jain, Ravi Manthena, Banu Rajamani, Jens Brandt, Nitin Shivaram, Malcolm Davis, e todos aqueles que ofereceram apoio. Comentários (em inglês)



Tem havido um dilúvio de pessoas técnicas inteligentes em minha vida que se tornaram amigos, e tem sido tanto influenciador como incomum o fato de que essas pessoas praticam ioga e outras práticas de aprimoramento espiritual, o que considero muito inspirador e instrutivo. Essas pessoas são Kraig Brockschmidt, Gen Kiyooka, e Andrea Provaglio (que ajudou no entendimento de Java e de programação de maneira geral na Itália, e agora nos Estados Unidos é uma sócia do time MindView). Comentários (em inglês)



Não é surpresa para mim que o conhecimento de Delphi me ajudou a entender Java, uma vez que existem muitos conceitos e decisões de design de linguagem comuns a ambas. Meus amigos Delphi me deram assistência, ajudando a ganhar entendimento naquele maravilhoso ambiente de programação. Eles são Marco Cantu (outro italiano—talvez a imersão do latim leve a um talento para linguagens programação?), Neil Rubenking (que costumava fazer o ioga/vegetariano/Zen até que descobriu computadores), e é claro Zack Urlocker (gerente de produtos da Delphi), um velho amigo com quem eu viajei pelo mundo. Comentários (em inglês)



A percepção e o suporte do meu amigo Richard Hale Shaw têm sido muito úteis (os de Kim também). Richard e eu passamos muitos meses dando seminários juntos e tentando chegar à perfeita experiência de aprendizagem para os participantes. Comentários (em inglês)



O design do livro, o design da capa, e a fotografia da capa foram criadas por meu amigo Daniel Will-Harris, conhecido autor e designer (www.Will-Harris.com), que costumava brincar com letras transfer na escola secundária enquanto esperava a invenção dos computadores e da editoração eletrônica, e reclamava de mim resmungando a resolução dos meus problemas de álgebra. Em todo caso, preparei a paginação sozinho, portanto os erros tipográficos são meus. Microsoft® Word XP para Windows foi usado para escrever o livro e para criar as páginas no Adobe Acrobat; o livro foi feito diretamente dos arquivos PDF Acrobat. Como um tributo à era eletrônica, aconteceu de eu estar fora do país quando as versões finais da primeira e da segunda edições ficaram prontas. A primeira edição foi enviada de Capetown, África do Sul, e a segunda foi mandada de Praga. A terceira veio de Crested Butte, Colorado. A fonte do corpo é Georgia e os títulos são em Verdana. A fonte na capa é ITC Rennie Mackintosh. Comentários (em inglês)



Um especial agradecimento para todos meus professores e alunos (que são meus professores também). A mais engraçada professora que escreveu foi Gabrielle Rico (autora de Writing the Natural Way, Putnam, 1983). Eu sempre aprecio a tremenda semana em Esalen. Comentários (em inglês)



Minha namoradinha Dawn McGee tirou a foto que aparece nas costas do livro, e me faz sorrir dessa maneira.



A lista de amigos nos papéis coadjuvantes inclui, mas não está limitada a: Andrew Binstock, Steve Sinofsky, JD Hildebrandt, Tom Keffer, Brian McElhinney, Brinkley Barr, Bill Gates da Midnight Engineering Magazine, Larry Constantine e Lucy Lockwood, Greg Perry, Dan Putterman, Christi Westphal, Gene Wang, Dave Mayer, David Intersimone, Andrea Rosenfield, Claire Sawyers, mais italianos (Laura Fallai, Corrado, Ilsa, e Cristina Giustozzi), Chris e Laura Strand, os Almquists, Brad Jerbic, Marilyn Cvitanic, os Mabrys, os Haflingers, os Pollocks, Peter Vinci, as famílias Robbins, as famílias Moelter (e os McMillans), Michael Wilk, Dave Stoner, Laurie Adams, os Cranstons, Larry Fogg, Mike e Karen Sequeira, Gary Entsminger e Allison Brody, Kevin Donovan e Sonda Eastlack, Chester e Shannon Andersen, Joe Lordi, Dave e Brenda Bartlett, Patti Gast, os Rentschlers, os Sudeks, Dick, Patty, e Lee Eckel, Lynn e Todd, e suas famílias. E claro, Mamãe and Papai. Comentários (em inglês)


Anterior Próximo Página Inicial Índice Conteúdo