t
t
t
t
t t b) Avant-propos
tttt
b) Avant-propos
Texte original t Traducteur : Jean-Pierre VIDAL
t
t
    
Ce chapitre contient 2 pages
1 2
\\\
t t t
t t t
t

25.04.2001 - Version 0.2 :
- Mise en forme du code html (titres-hx[verdana], paragraphes-p[Georgia], code-blockquote).
19.08.2000 - Version 0.1 :
- Derni?e mise jour de la version fran?ise
Traducteur :
- Jean-Pierre VIDAL
Texte original :
- Thinking in Java, 2nd edition, Revision 10
? 2000 by Bruce Eckel
t t t
Introduction t Introduction
t t t
Like any human language, Java provides a way to express concepts. If successful, this medium of expression will be significantly easier and more flexible than the alternatives as problems grow larger and more complex. t Tout comme n'importe quel langage humain, Java permet d'exprimer des concepts. S'il y parvient, il deviendra un moyen d'expression consid?ablement plus simple et plus souple que n'importe quelle alternative, alors m?e que les probl?es augmentent en taille et en complexit?
t t t
You can’t look at Java as just a collection of features—some of the features make no sense in isolation. You can use the sum of the parts only if you are thinking about design, not simply coding. And to understand Java in this way, you must understand the problems with it and with programming in general. This book discusses programming problems, why they are problems, and the approach Java has taken to solve them. Thus, the set of features I explain in each chapter are based on the way I see a particular type of problem being solved with the language. In this way I hope to move you, a little at a time, to the point where the Java mindset becomes your native tongue. t Il est impossible de consid?er Java uniquement sous l'angle d'une collection de fonctionnalit? — beaucoup de fonctionnalit? perdent leur sens hors de leur contexte. On ne peut utiliser la somme des parties que si l'on pense en termes de conception, et non simplement en termes de code. Pour appr?ender Java de cette mani?e, il faut comprendre les probl?es qui lui sont propres et ceux qui rel?ent de la programmation en g??al. Ce livre traite de probl?es de programmation, en quoi ce sont des probl?es, et quelle est l'approche de Java pour les r?oudre. Ainsi, l'ensemble de fonctionnalit? que je pr?ente dans chaque chapitre est bas? sur ma mani?e de r?oudre un certain type de probl?es au moyen de ce langage. Par cette d?arche j'esp?e peu peu amener le lecteur au point o ? penser Java ? lui deviendra naturel.
t t t
Throughout, I’ll be taking the attitude that you want to build a model in your head that allows you to develop a deep understanding of the language; if you encounter a puzzle you’ll be able to feed it to your model and deduce the answer. t Je garderai constamment l'esprit qu'il faut que chacun se construise un mod?e de pens? permettant de d?elopper une profonde connaissance du langage ; lorsqu'il rencontrera un probl?e ardu il devra ?re capable d'en alimenter ce mod?e et d'en d?uire la solution.
t t t

Prerequisites

t

Pr?equis

t t t
This book assumes that you have some programming familiarity: you understand that a program is a collection of statements, the idea of a subroutine/function/macro, control statements such as “if” and looping constructs such as “while,” etc. However, you might have learned this in many places, such as programming with a macro language or working with a tool like Perl. As long as you’ve programmed to the point where you feel comfortable with the basic ideas of programming, you’ll be able to work through this book. Of course, the book will be easier for the C programmers and more so for the C++ programmers, but don’t count yourself out if you’re not experienced with those languages (but come willing to work hard; also, the multimedia CD that accompanies this book will bring you up to speed on the basic C syntax necessary to learn Java). I’ll be introducing the concepts of object-oriented programming (OOP) and Java’s basic control mechanisms, so you’ll be exposed to those, and the first exercises will involve the basic control-flow statements. t Ce livre part du principe que le lecteur est un familier de la programmation : il sait qu'un programme est un ensemble d'instructions, il sait ce que sont un sous-programme, une fonction, une macro-instruction, un ordre de contr?e tel que ? if ? ainsi qu'une structure de boucle telle que ? while ?, etc. Toutefois, il a certainement appris cela de diff?entes fa?ns, par exemple en programmant avec un macro-langage ou bien en utilisant un outil tel que Perl. Si vous faites partie de ceux qui sont l'aise avec les id?s de base de la programmation, vous lirez ce livre sans probl?e. Bien entendu, le livre sera plus facile pour les programmeurs C et encore plus pour les programmeurs C++, mais n'abandonnez pas pour autant si vous n'avez aucune exp?ience de ces langages (en revanche, pr?arez-vous travailler dur ; par ailleurs, le CD multim?ia fourni avec ce livre vous am?era rapidement comprendre la syntaxe de base du langage C n?essaire l'apprentissage de Java). Je vais introduire les concepts de la programmation orient? objet (POO) et les m?anismes de contr?e de base de Java, ainsi le lecteur en aura connaissance, et rencontrera dans les premiers exercices les instructions de base du contr?e de flux de programme.
t t t
Although references will often be made to C and C++ language features, these are not intended to be insider comments, but instead to help all programmers put Java in perspective with those languages, from which, after all, Java is descended. I will attempt to make these references simple and to explain anything that I think a non- C/C++ programmer would not be familiar with. t Bien qu'il soit souvent fait r??ence aux fonctionnalit? des langages C et C++, il ne s'agit pas d'un apart pour initi?, mais au contraire d'aider tous les programmeurs mettre Java en perspective avec ces deux langages, qui, apr? tout, sont ses parents. Je vais essayer de simplifier ces r??ences et d'expliquer un programmeur ne connaissant ni C ni C++ tout ce que j'imagine ?re peu familier pour lui.
t t t

Learning Java

t

Apprendre Java

t t t
At about the same time that my first book Using C++ (Osborne/McGraw-Hill, 1989) came out, I began teaching that language. Teaching programming languages has become my profession; I’ve seen nodding heads, blank faces, and puzzled expressions in audiences all over the world since 1989. As I began giving in-house training with smaller groups of people, I discovered something during the exercises. Even those people who were smiling and nodding were confused about many issues. I found out, by chairing the C++ track at the Software Development Conference for a number of years (and later the Java track), that I and other speakers tended to give the typical audience too many topics too fast. So eventually, through both variety in the audience level and the way that I presented the material, I would end up losing some portion of the audience. Maybe it’s asking too much, but because I am one of those people resistant to traditional lecturing (and for most people, I believe, such resistance results from boredom), I wanted to try to keep everyone up to speed. t J'ai commenc enseigner C++ l'?oque o ?ait ?it mon premier livre Using C++(Osborne McGraw-Hill, 1989). Enseigner la programmation est devenu ma profession ; depuis 1989 j'ai vu bien des hochements de t?e, de visages vides, ainsi que beaucoup d'expressions d'incompr?ension chez maint auditoire travers le monde. Lorsque je me mis donner des cours chez moi, pour des groupes plus r?uits, je d?ouvris que m?e ceux qui souriaient et hochaient la t?e ?aient d?oncert? face de nombreux probl?es. J'ai d?ouvert aussi, alors que je pr?idais le cursus C++ durant plusieurs ann?s la Software Development Conference (et plus tard le cursus Java), que moi-m?e ainsi que les autres conf?enciers avions tendance traiter trop de choses trop rapidement. Finalement, cause des diff?ences entre les niveaux de mes auditeurs tout autant que de la mani?e dont je pr?entais mon expos? j'aurais fini par perdre une partie de mon auditoire. Je me suis pos beaucoup de questions, mais, faisant partie de ceux qui rechignent au cours magistral (et chez beaucoup de gens, je crois qu'une telle attitude ne peut provenir que du souvenir de l'ennui que distillent de tels cours), j'ai voulu faire en sorte que tout le monde reste ?eill?
t t t
For a time, I was creating a number of different presentations in fairly short order. Thus, I ended up learning by experiment and iteration (a technique that also works well in Java program design). Eventually I developed a course using everything I had learned from my teaching experience—one that I would be happy giving for a long time. It tackles the learning problem in discrete, easy-to-digest steps, and in a hands-on seminar (the ideal learning situation) there are exercises following each of the short lessons. I now give this course in public Java seminars, which you can find out about at www.BruceEckel.com. (The introductory seminar is also available as a CD ROM. Information is available at the same Web site.) t ? une certaine p?iode, je terminais mes diff?ents cours sous la pression des besoins. C'est ainsi que j'ai fini par enseigner par essais et erreurs (une technique qui marche bien ?alement dans la conception des programmes Java), et finalement j'ai r?lis un cours qui utilise tout ce que j'ai appris gr?e mon exp?ience d'enseignant — un cours qu'il me serait agr?ble de donner durant longtemps. Il consiste s'attaquer au probl?e de l'apprentissage par touches discr?es et faciles int?rer, et lors d'un s?inaire impromptu (la situation id?le pour enseigner) chaque courte le?n est suivie d'exercices. Je donne maintenant ce cours dans des s?inaires Java publics, que l'on peut trouver sur le site http://www.BruceEckel.com. (Le s?inaire d'introduction est ?alement disponible sur le CD ROM, son contenu est disponible sur le m?e site Web.)
t t t
The feedback that I get from each seminar helps me change and refocus the material until I think it works well as a teaching medium. But this book isn’t just seminar notes—I tried to pack as much information as I could within these pages, and structured it to draw you through onto the next subject. More than anything, the book is designed to serve the solitary reader who is struggling with a new programming language. t Le retour d'exp?ience que me procure chaque s?inaire m'aide modifier et recentrer mon discours jusqu' ce qu'il devienne un bon moyen d'enseignement. Mais ce livre est plus qu'une simple compilation de notes de s?inaires : j'ai tent d'y int?rer autant d'informations que je le pouvais, et je l'ai structur afin que chaque sujet m?e droit au suivant. Enfin, plus que tout, le livre est con? pour aider le lecteur solitaire qui se bat avec un nouveau langage de programmation.
t t t

Goals

t

Buts

t t t
Like my previous book Thinking in C++, this book has come to be structured around the process of teaching the language. In particular, my motivation is to create something that provides me with a way to teach the language in my own seminars. When I think of a chapter in the book, I think in terms of what makes a good lesson during a seminar. My goal is to get bite-sized pieces that can be taught in a reasonable amount of time, followed by exercises that are feasible to accomplish in a classroom situation. t Comme mon pr??ent livre Thinking in C++, celui-ci a ? structur pour enseigner le langage. En particulier, ma motivation est de faire en sorte qu'il puisse me servir pour enseigner le langage dans mes propres s?inaires. Lorsque je pense un chapitre du livre, je me demande s'il pourrait faire l'objet d'une bonne le?n lors d'un s?inaire. Mon but est d'avoir des chapitres courts pouvant ?re expos? en un temps raisonnable, suivis par des exercices r?lisables dans une situation de salle de classe.
t t t
My goals in this book are to: t Dans ce livre je me suis donn comme buts :
t t t
  1. Present the material one simple step at a time so that you can easily digest each concept before moving on.
  2. Use examples that are as simple and short as possible. This sometimes prevents me from tackling “real world” problems, but I’ve found that beginners are usually happier when they can understand every detail of an example rather than being impressed by the scope of the problem it solves. Also, there’s a severe limit to the amount of code that can be absorbed in a classroom situation. For this I will no doubt receive criticism for using “toy examples,” but I’m willing to accept that in favor of producing something pedagogically useful.
  3. Carefully sequence the presentation of features so that you aren’t seeing something that you haven’t been exposed to. Of course, this isn’t always possible; in those situations, a brief introductory description is given.
  4. Give you what I think is important for you to understand about the language, rather than everything I know. I believe there is an information importance hierarchy, and that there are some facts that 95 percent of programmers will never need to know and that just confuse people and adds to their perception of the complexity of the language. To take an example from C, if you memorize the operator precedence table (I never did), you can write clever code. But if you need to think about it, it will also confuse the reader/maintainer of that code. So forget about precedence, and use parentheses when things aren’t clear.
  5. Keep each section focused enough so that the lecture time—and the time between exercise periods—is small. Not only does this keep the audience’s minds more active and involved during a hands-on seminar, but it gives the reader a greater sense of accomplishment.
  6. Provide you with a solid foundation so that you can understand the issues well enough to move on to more difficult coursework and books.
t
  1. pr?enter le cours pas pas afin que le lecteur assimile chaque concept avant d'aller plus avant ;
  2. utiliser des exemples qui soient aussi simples et courts que possible. De temps en temps, cela me d?ournera des probl?es ? du monde r?l ?, mais j'ai remarqu que les d?utants sont g??alement plus satisfaits de comprendre chaque d?ail d'un exemple qu'ils ne sont impressionn? par la port? du probl?e qu'ils cherchent r?oudre. Il y a ?alement une limite la taille du code qui peut ?re assimil dans une situation de cours magistral, limite qu'il faut imp?ativement ne pas d?asser. A ce sujet je devrais recevoir quelques critiques pour avoir utilis des ? exemples jouets ?, et je les accepte volontiers, avec le pr?exte que ce que je pr?ente est utile, p?agogiquement parlant ;
  3. encha?er soigneusement la pr?entation des fonctionnalit? afin que l'on ne rencontre jamais quoi que ce soit qui n'ait jamais ? expos? Bien entendu, ce n'est pas toujours possible, et, dans de telles situations, je donne une br?e description en introduction ;
  4. montrer ce que je pense ?re important concernant la compr?ension du langage, plut? qu'exposer tout mon savoir. Je crois que l'information est fortement hi?archis?, qu'il est av? que 95 % des programmeurs n'ont pas besoin de tout conna?re, et que cela d?oute tout le monde et ajoute leur impression de complexit du langage. Pour prendre un exemple en C, connaissant par coeur le tableau de priorit des op?ateurs (ce qui n'est pas mon cas), il est possible d'?rire un code astucieux. Mais en y r?l?hissant un instant, ceci risque de d?outer le lecteur et/ou le mainteneur de ce code. Il est donc pr??able d'oublier la priorit des op?ateurs, et d'utiliser des parenth?es lorsque les choses ne sont pas claires ;
  5. maintenir chaque section assez concentr? de telle mani?e que le temps de lecture - et le temps entre les exercices - soit court. Non seulement cela maintient l'attention et l'implication des auditeurs lors d'un s?inaire, mais cela donne au lecteur une plus grande impression de travail bien fait ;
  6. vous munir de bases solides afin que votre connaissance soit suffisante avant de suivre un cours ou lire un livre plus difficiles.
t t t

Online documentation

t

Documentation en ligne

t t t
The Java language and libraries from Sun Microsystems (a free download) come with documentation in electronic form, readable using a Web browser, and virtually every third party implementation of Java has this or an equivalent documentation system. Almost all the books published on Java have duplicated this documentation. So you either already have it or you can download it, and unless necessary, this book will not repeat that documentation because it’s usually much faster if you find the class descriptions with your Web browser than if you look them up in a book (and the on-line documentation is probably more up-to-date). This book will provide extra descriptions of the classes only when it’s necessary to supplement the documentation so you can understand a particular example. t Le langage Java et les biblioth?ues de Sun Microsystems (en t??hargement libre) sont accompagn? d'une documentation sous forme ?ectronique, que l'on peut lire avec un navigateur Web, et en pratique chaque impl?entation tierce de Java poss?e un syst?e de documentation ?uivalent. La plupart des livres publi? propos de Java dupliquent cette documentation. Soit vous l'avez d?? soit vous pouvez la t??harger, et donc ce livre ne la reprendra pas, except lorsque c'est n?essaire, parce qu'il sera g??alement plus rapide de trouver la description d'une classe au moyen d'un navigateur plut? que dans le livre (de plus, la documentation en ligne sera probablement davantage jour). Ce livre fournira certaines descriptions de classes suppl?entaires lorsqu'il sera n?essaire de compl?er la documentation afin de comprendre un exemple particulier.
t t t

Chapters

t

Les chapitres

t t t
This book was designed with one thing in mind: the way people learn the Java language. Seminar audience feedback helped me understand the difficult parts that needed illumination. In the areas where I got ambitious and included too many features all at once, I came to know—through the process of presenting the material—that if you include a lot of new features, you need to explain them all, and this easily compounds the student’s confusion. As a result, I’ve taken a great deal of trouble to introduce the features as few at a time as possible. t Ce livre a ? con? en gardant une seule chose l'esprit : la mani?e dont les gens apprennent le langage Java. Le retour d'information des auditeurs de s?inaires m'a aid d?ouvrir les parties difficiles qui justifient un autre ?lairage. Dans les domaines o je fus ambitieux, o j'ai ajout trop de fonctionnalit? dans un m?e temps, j'ai fini par comprendre - au travers du processus d'enseignement - que si l'on ajoute de nouvelles fonctionnalit?, on doit les expliquer compl?ement, et que cela peut d?outer les ?udiants. Je me suis donc donn beaucoup de mal pour introduire aussi peu que possible de nouveaux concepts en un m?e temps.
t t t
The goal, then, is for each chapter to teach a single feature, or a small group of associated features, without relying on additional features. That way you can digest each piece in the context of your current knowledge before moving on. t Le but est donc d'enseigner une seule fonctionnalit par chapitre, ou la rigueur un petit ensemble de fonctionnalit? associ?s, en ?itant les liaisons avec des fonctionnalit? suppl?entaires. De cette mani?e, il est possible d'assimiler chaque chose dans le contexte de la connaissance actuelle avant d'aller plus loin.
t t t
Here is a brief description of the chapters contained in the book, which correspond to lectures and exercise periods in my hands-on seminars. t Voici une br?e description des chapitres contenus dans le livre, qui correspondent aux le?ns et exercices de mes s?inaires.
t t t
Chapter 1: Introduction to Objects t Chapitre 1 : Introduction sur les Objets
t t t
This chapter is an overview of what object-oriented programming is all about, including the answer to the basic question “What’s an object?”, interface vs. implementation, abstraction and encapsulation, messages and functions, inheritance and composition, and the all-important polymorphism. You’ll also get an overview of issues of object creation such as constructors, where the objects live, where to put them once they’re created, and the magical garbage collector that cleans up the objects that are no longer needed. Other issues will be introduced, including error handling with exceptions, multithreading for responsive user interfaces, and networking and the Internet. You’ll learn what makes Java special, why it’s been so successful, and about object-oriented analysis and design. t Ce chapitre est une vue d'ensemble de ce qu'est la programmation orient? objet, y compris la r?onse la question de base ? Qu'est-ce qu'un objet  ?, ce que sont une interface et une impl?entation, l'abstraction et l'encapsulation, les messages et les fonctions, l'h?itage et la composition, ainsi que le polymorphisme qui est d'une tr? haute importance. On y trouve ?alement une vue d'ensemble de la mani?e dont les objets sont cr?s avec les constructeurs, o se trouvent les objets, o les ranger une fois cr?s, ainsi que le magique ramasse-miettes (garbage collector) qui d?ruit tous les objets devenus inutiles. D'autres questions seront abord?s, comme le traitement des erreurs par les exceptions, le multithreading pour des interfaces utilisateur r?ctives, la programmation r?eau et l'Internet. On y apprendra ce qui rend Java sp?ial, pourquoi il a tant de succ?, ainsi que l'analyse et la conception orient?s objet.
t t t
Chapter 2: Everything is an Object t Chapitre 2 : Tout est Objet
t t t
This chapter moves you to the point where you can write your first Java program, so it must give an overview of the essentials, including the concept of a reference to an object; how to create an object; an introduction to primitive types and arrays; scoping and the way objects are destroyed by the garbage collector; how everything in Java is a new data type (class) and how to create your own classes; functions, arguments, and return values; name visibility and using components from other libraries; the static keyword; and comments and embedded documentation. t Avec ce chapitre on arrive au point o l'on peut ?rire un premier programme Java. Il doit donc donner une vision d'ensemble des choses essentielles, entre autres : le concept de r??ence un objet ; comment cr?r un objet ; une introduction aux types primitifs et aux tableaux ; comment ils sont d?ruits par le ramasse-miettes ; comment toute chose est en Java un nouveau type de donn?s (class) et comment cr?r vos propres classes ; les fonctions, leurs arguments et leur valeur de retour ; la visibilit des noms et l'utilisation de composants provenant d'autres biblioth?ues ; le mot clef static ; les commentaires et la documentation int?r?.
t t t
Chapter 3: Controlling Program Flow t Chapitre 3 : Contr?er le D?oulement du Programme
t t t
This chapter begins with all of the operators that come to Java from C and C++. In addition, you’ll discover common operator pitfalls, casting, promotion, and precedence. This is followed by the basic control-flow and selection operations that you get with virtually any programming language: choice with if-else; looping with for and while; quitting a loop with break and continue as well as Java’s labeled break and labeled continue (which account for the “missing goto” in Java); and selection using switch. Although much of this material has common threads with C and C++ code, there are some differences. In addition, all the examples will be full Java examples so you’ll get more comfortable with what Java looks like. t Ce chapitre commence avec tous les op?ateurs provenant de C et C++. On y d?ouvre les pi?es classiques des op?ateurs, le changement de type, la promotion et la priorit? Suivent le classique contr?e de flux de programme, les instructions de rupture de s?uence d? connues pour avoir ? rencontr?s dans d'autres langages de programmation : le choix avec if-else, la boucle avec for et while ; comment sortir d'une boucle avec break et continue aussi bien qu'avec les break ?iquet? et les continue ?iquet?  (qui repr?entent le ? goto manquant ? en java) ; la s?ection avec switch. Bien que la majorit de ces fonctionnalit? ressemblent au code C et C++, il existe certaines diff?ences. De plus, tous les exemples sont ?rits en pur Java, afin de mieux montrer quoi ressemble le langage.
t t t
Chapter 4: Initialization & Cleanup t Chapitre 4 : Initialisation et Nettoyage M?oire
t t t
This chapter begins by introducing the constructor, which guarantees proper initialization. The definition of the constructor leads into the concept of function overloading (since you might want several constructors). This is followed by a discussion of the process of cleanup, which is not always as simple as it seems. Normally, you just drop an object when you’re done with it and the garbage collector eventually comes along and releases the memory. This portion explores the garbage collector and some of its idiosyncrasies. The chapter concludes with a closer look at how things are initialized: automatic member initialization, specifying member initialization, the order of initialization, static initialization and array initialization. t Ce chapitre commence par d?rire le constructeur, lequel garantit une initialisation correcte. La d?inition du constructeur d?ouche sur le concept de surcharge de fonction (dans la mesure o plusieurs constructeurs peuvent coexister). La suite est une discussion sur le processus de nettoyage m?oire, qui n'est pas toujours aussi simple qu'il semblerait. Normalement, il suffit simplement d'abandonner un objet lorsqu'on n'en a plus besoin, et le ramasse-miettes finira par lib?er la m?oire. Cette partie explore le ramasse-miettes ainsi que quelques-unes de ses particularit?. Le chapitre se termine par une vision plus centr? sur l'initialisation : initialisation automatique des membres, sp?ification de l'initialisation des membres, ordre d'initialisation, initialisation static et initialisation des tableaux.
t t t
Chapter 5: Hiding the Implementation t Chapitre 5 : Cacher l'Impl?entation
t t t
This chapter covers the way that code is packaged together, and why some parts of a library are exposed while other parts are hidden. It begins by looking at the package and import keywords, which perform file-level packaging and allow you to build libraries of classes. It then examines subject of directory paths and file names. The remainder of the chapter looks at the public, private, and protected keywords, the concept of “friendly” access, and what the different levels of access control mean when used in various contexts. t Ce chapitre traite de la mani?e dont le code est mis en paquetages, et pourquoi certaines parties d'une biblioth?ue sont visibles alors que d'autres sont cach?s. Il s'int?esse tout d'abord aux mots clefs package et import, qui sont en relation avec la gestion des paquetages au niveau fichier et permettent de construire des biblioth?ues de classes. Il examine ensuite le probl?e sous l'angle des chemins de dossier et des noms de fichiers. Le reste du chapitre traite des mots clefs public, private et protected, du concept de l'acc? ? amical ? (acc? par d?aut, NdT), et de ce que signifient les diff?ents niveaux de contr?e d'acc? utilis? dans divers contextes.
t t t
Chapter 6: Reusing Classes t Chapitre 6 : R?tilisation des Classes
t t t
The concept of inheritance is standard in virtually all OOP languages. It’s a way to take an existing class and add to its functionality (as well as change it, the subject of Chapter 7). Inheritance is often a way to reuse code by leaving the “base class” the same, and just patching things here and there to produce what you want. However, inheritance isn’t the only way to make new classes from existing ones. You can also embed an object inside your new class with composition. In this chapter you’ll learn about these two ways to reuse code in Java, and how to apply them. t Le concept d'h?itage se retrouve dans pratiquement tous les langages de POO. Il s'agit de prendre une classe existante et d'?endre ses fonctionnalit? (ou tout aussi bien les modifier, c'est le sujet du chapitre 7). L'h?itage consiste toujours r?tiliser du code en gardant la m?e ? classe de base ?, et en modifiant simplement certaines choses ? et l afin d'obtenir ce que l'on veut. Toutefois, l'h?itage n'est pas la seule mani?e de cr?r de nouvelles classes partir de classes existantes. Il est ?alement possible d'encapsuler un objet dans une nouvelle classe au moyen de la composition. Ce chapitre explique ces deux m?hodes de r?tilisation du code en Java, et comment les utiliser.
t t t
Chapter 7: Polymorphism t Chapitre 7 : Le Polymorphisme
t t t
On your own, you might take nine months to discover and understand polymorphism, a cornerstone of OOP. Through small, simple examples you’ll see how to create a family of types with inheritance and manipulate objects in that family through their common base class. Java’s polymorphism allows you to treat all objects in this family generically, which means the bulk of your code doesn’t rely on specific type information. This makes your programs extensible, so building programs and code maintenance is easier and cheaper. t Si vous appreniez par vous-m?e, il vous faudrait neuf mois pour d?ouvrir et comprendre le polymorphisme, l'une des pierres angulaires de la POO. Des exemples simples et courts montreront comment cr?r une famille de types au moyen de l'h?itage et comment manipuler les objets dans cette famille par l'interm?iaire de leur classe de base. Le polymorphisme de Java permet de traiter de mani?e g??ique tout objet d'une famille, ce qui signifie que la plus grande partie du code n'est pas li? une information sp?ifique sur le type. Ceci rend les programmes extensibles, et donc leur d?eloppement et leur maintenance plus simples et moins on?eux.
t t t
Chapter 8: Interfaces & Inner Classes t Chapitre 8 : Interfaces & Classes Internes
t t t
Java provides a third way to set up a reuse relationship, through the interface, which is a pure abstraction of the interface of an object. The interface is more than just an abstract class taken to the extreme, since it allows you to perform a variation on C++’s “multiple inheritance,” by creating a class that can be upcast to more than one base type. t Java fournit une troisi?e voie pour la r?tilisation du code, avec l'interface, qui est une pure abstraction de l'interface d'un objet. L'interface est bien plus qu'une simple classe abstraite dont on aurait pouss l'abstraction l'extr?e, puisqu'il vous permet de d?elopper une variation sur l'? h?itage multiple ? du C++, en cr?nt une classe qui peut ?re transtyp? vers plus d'un type de base.
t t t
At first, inner classes look like a simple code hiding mechanism: you place classes inside other classes. You’ll learn, however, that the inner class does more than that—it knows about and can communicate with the surrounding class—and that the kind of code you can write with inner classes is more elegant and clear, although it is a new concept to most and takes some time to become comfortable with design using inner classes. t Au premier abord, les classes internes ressemblent un simple m?anisme permettant de cacher le code : on place des classes l'int?ieur d'autres classes. Vous apprendrez toutefois que la classe interne fait plus que cela - elle conna? la classe enveloppante et peut communiquer avec elle - et il est certain que le style de code que l'on ?rit au moyen des classes internes est plus ??ant et plus clair, bien que cela repr?ente pour la plupart d'entre vous une nouvelle fonctionnalit n?essitant un certain temps d'apprentissage avant d'?re ma?ris?.
t t t
Chapter 9: Holding your Objects t Chapitre 9 : Stockage des Objets
t t t
It’s a fairly simple program that has only a fixed quantity of objects with known lifetimes. In general, your programs will always be creating new objects at a variety of times that will be known only while the program is running. In addition, you won’t know until run-time the quantity or even the exact type of the objects you need. To solve the general programming problem, you need to create any number of objects, anytime, anywhere. This chapter explores in depth the container library that Java 2 supplies to hold objects while you’re working with them: the simple arrays and more sophisticated containers (data structures) such as ArrayList and HashMap. t Un programme qui manipule un nombre fixe d'objets dont la dur? de vie est connue ne peut ?re que clair et tr? simple. Mais g??alement, les programmes cr?nt de nouveaux objets diff?ents moments, qui ne seront connus que lors de l'ex?ution. De plus, avant l'ex?ution, on ne conna? ni le nombre ni parfois le type exact des objets qui seront n?essaires. Afin de r?oudre ce probl?e g??al de la programmation, nous devons pouvoir cr?r n'importe quel nombre d'objets, n'importe quel moment, n'importe o? Ce chapitre explore en profondeur la biblioth?ue fournie par Java 2 pour ranger les objets durant leur existence : les tableaux simples et les conteneurs plus sophistiqu? (structures de donn?s) comme ArrayList et HashMap.
t t t
Chapter 10: Error Handling with Exceptions t Chapitre 10 : Traitement des Erreurs au Moyen des Exceptions
t t t
The basic philosophy of Java is that badly-formed code will not be run. As much as possible, the compiler catches problems, but sometimes the problems—either programmer error or a natural error condition that occurs as part of the normal execution of the program—can be detected and dealt with only at run-time. Java has exception handling to deal with any problems that arise while the program is running. This chapter examines how the keywords try, catch, throw, throws, and finally work in Java; when you should throw exceptions and what to do when you catch them. In addition, you’ll see Java’s standard exceptions, how to create your own, what happens with exceptions in constructors, and how exception handlers are located. t Java a pour philosophie de base qu'un code mal ?rit ne sera jamais ex?ut? Autant que possible, le compilateur rep?e les probl?es, mais parfois les probl?es - aussi bien une erreur de programmation qu'une condition d'erreur naturelle survenant lors de l'ex?ution normale du programme - ne peuvent ?re d?ect? et trait? qu'au moment de l'ex?ution. Java poss?e un traitement des erreurs par les exceptions pour s'occuper de tout probl?e survenant pendant l'ex?ution. Ce chapitre examine comment fonctionnent en Java les mots clefs try, catch, throw, throws, et finally ; quand lancer des exceptions ; et ce que l'on doit faire si on les intercepte. Il expose aussi les exceptions standard de Java, comment cr?r vos propres exceptions, ce qu'il advient des exceptions dans les constructeurs, et comment sont localis? les codes de traitement d'exception.
t t t
Chapter 11: The Java I/O System t Chapitre 11 : le Syst?e d'E/S de Java
t t t
Theoretically, you can divide any program into three parts: input, process, and output. This implies that I/O (input/output) is an important part of the equation. In this chapter you’ll learn about the different classes that Java provides for reading and writing files, blocks of memory, and the console. The distinction between “old” I/O and “new” Java I/O will be shown. In addition, this chapter examines the process of taking an object, “streaming” it (so that it can be placed on disk or sent across a network) and reconstructing it, which is handled for you with Java’s object serialization. Also, Java’s compression libraries, which are used in the Java ARchive file format (JAR), are examined. t En th?rie, on peut diviser n'importe quel programme en trois parties : entr?, traitement, et sortie des donn?s. Ceci sugg?e que les E/S (entr?s/sorties) repr?entent une part importante de n'importe quel probl?e. Ce chapitre ?udie les diff?entes classes fournies par Java pour lire et ?rire des fichiers, des blocs m?oire, ainsi que la console. Il montre la distinction entre E/S ? vieux style ? et E/S ? nouveau style ? Java. Il examine ?alement le processus consistant prendre un objet, le transformer en flux (de mani?e pouvoir le ranger sur disque ou l'envoyer travers un r?eau) puis le reconstruire, ce qui est pris en charge par la s?ialisation des objets de Java. Il pr?ente ?alement les biblioth?ues de compression de Java, utilis?s dans le format de fichier Java ARchive (JAR).
t t t
Chapter 12: Run-Time Type Identification t Chapitre 12 : Identification Dynamique de Type 
t t t
Java run-time type identification (RTTI) lets you find the exact type of an object when you have a reference to only the base type. Normally, you’ll want to intentionally ignore the exact type of an object and let Java’s dynamic binding mechanism (polymorphism) implement the correct behavior for that type. But occasionally it is very helpful to know the exact type of an object for which you have only a base reference. Often this information allows you to perform a special-case operation more efficiently. This chapter explains what RTTI is for, how to use it, and how to get rid of it when it doesn’t belong there. In addition, this chapter introduces the Java reflection mechanism. t L'identification dynamique de type de Java (Run-Time Type Identification, RTTI) permet de conna?re le type exact d'un objet partir d'une r??ence sur le type de base. Habituellement, on pr??e ignorer intentionnellement le type exact d'un objet et laisser au m?anisme de liaison dynamique de Java (polymorphisme) le soin d'impl?enter la signification correcte pour ce type. Mais de temps en temps il est tr? utile de conna?re le type r?l d'un objet pour lequel on n'a qu'une r??ence sur le type de base. Souvent cette information permet d'impl?enter plus efficacement un traitement sp?ial. Ce chapitre explique quoi sert la RTTI, comment l'utiliser, et comment s'en d?arrasser lorsqu'on n'en a plus besoin. Enfin, il introduit le m?anisme de r?lexion de Java.
t t t
Chapter 13: Creating Windows and Applets t Chapitre 13 : Cr?r des Fen?res et des Applets
t t t
Java comes with the “Swing” GUI library, which is a set of classes that handle windowing in a portable fashion. These windowed programs can either be applets or stand-alone applications. This chapter is an introduction to Swing and the creation of World Wide Web applets. The important “JavaBeans” technology is introduced. This is fundamental for the creation of Rapid-Application Development (RAD) program-building tools. t Java est livr avec la biblioth?ue GUI ? Swing ?, qui est un ensemble de classes traitant du fen?rage d'une mani?e portable (NdT : sur diff?entes plates-formes). Ces programmes fen?r? peuvent ?re soit des applets soit des applications autonomes. Ce chapitre est une introduction Swing et la cr?tion d'applets pour le World Wide Web. Il introduit aussi l'importante technologie des ? JavaBeans  ?, fondamentale pour la cr?tion d'outils de d?eloppement de programmes destin? au D?eloppement Rapide d'Applications (RAD, Rapid-Application Development).
t t t
Chapter 14: Multiple Threads t Chapitre 14 : Les Threads Multiples
t t t
Java provides a built-in facility to support multiple concurrent subtasks, called threads, running within a single program. (Unless you have multiple processors on your machine, this is only the appearance of multiple subtasks.) Although these can be used anywhere, threads are most apparent when trying to create a responsive user interface so, for example, a user isn’t prevented from pressing a button or entering data while some processing is going on. This chapter looks at the syntax and semantics of multithreading in Java. t Java fournit un moyen de cr?r de multiples sous-t?hes concurrentes, appel?s threads, s'ex?utant dans le contexte d'un m?e programme (mis part le cas o la machine poss?e plus d'un processeur, ceci n'a que l'apparence de sous-t?hes multiples). Bien qu'on puisse les utiliser n'importe o? l'utilisation des threads est plus ?idente lorsqu'il s'agit de cr?r une interface utilisateur r?ctive comme, par exemple, lorsqu'un certain processus gourmand en ressources syst?e en cours d'ex?ution emp?he un utilisateur d'utiliser un bouton ou d'entrer des donn?s. Ce chapitre examine la syntaxe et la s?antique du multithreading en Java.
t t t
Chapter 15: Distributed Computing t Chapitre 15 : Informatique Distribu?
t t t
All the Java features and libraries seem to really come together when you start writing programs to work across networks. This chapter explores communication across networks and the Internet, and the classes that Java provides to make this easier. It introduces the very important concepts of Servlets and JSPs (for server-side programming), along with Java DataBase Connectivity (JDBC), and Remote Method Invocation (RMI). Finally, there’s an introduction to the new technologies of JINI, JavaSpaces, and Enterprise JavaBeans (EJBs). t Toutes les fonctionnalit? et biblioth?ues de Java semblent vraiment faites les unes pour les autres lorsqu'on commence ?rire des programmes qui travaillent en r?eau. Ce chapitre explore la communication au travers des r?eaux et sur l'Internet, ainsi que les classes fournies par Java pour faciliter cela. Il introduit les concepts tr? importants de Servlets et des JSPs (pour la programmation ? c? serveur ?), ainsi que la connectivit aux bases de donn?s, Java DataBase Connectivity (JDBC), et l'invocation de m?hodes distantes, Remote Method Invocation (RMI). Et, pour finir, une introduction aux nouvelles technologies JINI, JavaSpaces, et Enterprise JavaBeans (EJB).
t t t
Appendix A: Passing & Returning Objects t Annexe A : Passage & Retour d'Objets
t t t
Since the only way you talk to objects in Java is through references, the concepts of passing an object into a function and returning an object from a function have some interesting consequences. This appendix explains what you need to know to manage objects when you’re moving in and out of functions, and also shows the String class, which uses a different approach to the problem. t Etant donn qu'en Java seules les r??ences permettent d'appr?ender les objets, le concept de ? passer un objet une fonction ? et celui de ? retourner un objet depuis une fonction ? ont quelques cons?uences int?essantes. Cette annexe explique ce qu'il faut savoir afin de g?er les objets l'entr? et la sortie d'une fonction, et montre ?alement la classe String, qui utilise une approche diff?ente du probl?e.
t t t
Appendix B: The Java Native Interface (JNI) t Annexe B : L'interface Java Natif (JNI)
t t t
A totally portable Java program has serious drawbacks: speed and the inability to access platform-specific services. When you know the platform that you’re running on, it’s possible to dramatically speed up certain operations by making them native methods, which are functions that are written in another programming language (currently, only C/C++ is supported). This appendix gives you enough of an introduction to this feature that you should be able to create simple examples that interface with non-Java code. t Un programme Java enti?ement portable a de s?ieux inconv?ients : la vitesse, et l'incapacit d'acc?er des services sp?ifiques de la plate-forme. Connaissant la plate-forme sur laquelle sera ex?ut le programme, il est possible d'acc??er spectaculairement certaines op?ations en les transformant en m?hodes natives, qui sont des fonctions ?rites dans un autre langage de programmation (actuellement, seuls C/C++ sont support?). Cette annexe procure une courte introduction cette fonctionnalit? suffisante pour qu'on puisse cr?r des exemples simples utilisant cette interface avec un code autre que Java.
t t t
t t t
t t
    
///
t t t
t
     
Sommaire Le site de Bruce Eckel