 |
 |
1) Introduction sur les « objets » |
|
 |
|
Texte original |
 |
Traducteur : Jérome QUELIN |
|
 |
|
 |
 |
 |
 |
 |
 |
|
 |
|
 |
 |
 |
Java vs. C++?
|
 |
Java vs. C++ ?
|
 |
 |
 |
Java looks a lot like C++, and so
naturally it would seem that C++ will be replaced by Java. But I’m
starting to question this logic. For one thing, C++ still has some features that
Java doesn’t, and although there have been a lot of promises about Java
someday being as fast or faster than C++, we’ve seen steady improvements
but no dramatic breakthroughs. Also, there seems to be a continuing interest in
C++, so I don’t think that language is going away any time soon.
(Languages seem to hang around. Speaking at one of my
“Intermediate/Advanced Java Seminars,” Allen Holub asserted that the
two most commonly used languages are Rexx and COBOL, in that
order.)
|
 |
Java ressemble beaucoup au C++, et il semblerait naturel que le C++ soit
remplacé par Java. Mais je commence à m'interroger sur cette logique. D'une part, C++
dispose toujours de fonctionnalités que Java n'a pas, et bien que de nombreuses promesses
aient été faites sur le fait que Java soit un jour aussi rapide, voire même
plus, que le C++, on a vu de grosses améliorations mais pas de révolutions
spectaculaires. De plus, il semblerait que le C++ intéresse une large communauté
passionnée, et je ne pense donc pas que ce langage puisse disparaître prochainement
(les langages semblent résister au cours du temps. Allen Hollub a affirmé durant l'un
de mes « Séminaires Java Intermédiaire/Avancé » que les deux
langages les plus utilisés étaient Rexx et COBOL, dans cet ordre).
|
 |
 |
 |
I’m beginning to think that the
strength of Java lies in a slightly different arena than that of C++. C++ is a
language that doesn’t try to fit a mold. Certainly it has been adapted in
a number of ways to solve particular problems. Some C++ tools combine libraries,
component models, and code-generation tools to solve the problem of developing
windowed end-user applications (for Microsoft Windows). And yet, what do the
vast majority of Windows developers use? Microsoft’s Visual Basic (VB).
This despite the fact that VB produces the kind of code that becomes
unmanageable when the program is only a few pages long (and syntax that can be
positively mystifying). As successful and popular as VB is, it’s not a
very good example of language design. It would be nice to have the ease and
power of VB without the resulting unmanageable code. And that’s where I
think Java will shine: as the “next VB.” You may or may not shudder
to hear this, but think about it: so much of Java is intended to make it easy
for the programmer to solve application-level problems like networking and
cross-platform UI, and yet it has a language design that allows the creation of
very large and flexible bodies of code. Add to this the fact that Java has the
most robust type checking and error handling systems I’ve ever seen in a
language and you have the makings of a significant leap forward in programming
productivity.
|
 |
Je commence à croire que la force de Java réside dans une
optique différente de celle du C++. C++ est un langage qui n'essaie pas de se fondre dans un
moule. Il a déjà été adapté un certain nombre de fois pour
résoudre des problèmes particuliers. Certains des outils du C++ combinent des
bibliothèques, des modèles de composants et des outils de génération de
code pour résoudre les problèmes concernant le développement d'applications
fenêtrées (pour Microsoft Windows). Et pourtant, la vaste majorité des
développeurs Windows utilisent Microsoft Visual Basic (VB). Et ceci malgré le fait
que VB produise le genre de code qui devient ingérable quand le programme fait plus de
quelques pages de long (sans compter que la syntaxe peut être profondément
mystérieuse). Aussi populaire que soit VB, ce n'est pas un très bon exemple de
conception de langage. Il serait agréable de pouvoir disposer des facilités et de la
puissance fournies par VB sans se retrouver avec ce code ingérable. Et c'est là
où je pense que Java va pouvoir briller : comme le « VB du
futur ». On peut frissonner en entendant ceci, mais Java est conçu pour aider le
développeur à résoudre des problèmes comme les applications
réseaux ou interfaces utilisateurs multiplateformes, et la conception du langage permet la
création de portions de code très importantes mais néanmoins flexibles.
Ajoutons à ceci le fait que Java dispose des systèmes de vérifications de
types et de gestion des erreurs les plus robustes que j'ai jamais rencontré dans un langage
et on se retrouve avec les éléments constitutifs d'un bond significatif dans
l'amélioration de la productivité dans la programmation.
|
 |
 |
 |
Should you use Java instead of C++ for
your project? Other than Web applets, there are two issues to consider. First,
if you want to use a lot of existing C++ libraries (and you’ll certainly
get a lot of productivity gains there), or if you have an existing C or C++ code
base, Java might slow your development down rather than speeding it up.
|
 |
Faut-il utiliser Java en lieu et place du C++ dans les projets ? En
dehors des applets Web, il y a deux points à considérer. Premièrement, si on
veut réutiliser un certain nombre de bibliothèques C++ (et on y gagnera certainement
en productivité), ou si on dispose d'une base existante en C ou C++, Java peut ralentir le
développement plutôt que l'accélérer.
|
 |
 |
 |
If you’re developing all your code
primarily from scratch, then the simplicity of Java over C++ will significantly
shorten your development time—the anecdotal evidence (stories from C++
teams that I’ve talked to who have switched to Java) suggests a doubling
of development speed over C++. If Java performance doesn’t matter or you
can somehow compensate for it, sheer time-to-market issues make it difficult to
choose C++ over Java.
|
 |
Si on développe tout le code en partant de zéro, alors la
simplicité de Java comparée au C++ réduira significativement le temps de
développement - des anecdotes (selon des équipes C++ à qui j'ai parlé
après qu'ils eurent changé pour Java) suggèrent un doublement de la vitesse de
développement comparé au C++. Si les performances moindres de Java ne rentrent pas en
ligne de compte ou qu'on peut les compenser, les contraintes de temps font qu'il est difficile de
choisir le C++ aux détriments de Java.
|
 |
 |
 |
The biggest issue is performance.
Interpreted Java has been slow, even 20 to 50 times slower than C in the
original Java interpreters. This has improved greatly over time, but it will
still remain an important number. Computers are about speed; if it wasn’t
significantly faster to do something on a computer then you’d do it by
hand. (I’ve even heard it suggested that you start with Java, to gain the
short development time, then use a tool and support libraries to translate your
code to C++, if you need faster execution speed.)
|
 |
Le point le plus important est la performance. Java
interprété est lent, environ 20 à 50 fois plus lent que le C dans les
interpréteurs Java originels. Ceci a été grandement amélioré
avec le temps, mais il restera toujours un important facteur de différence. Les ordinateurs
existent de par leur rapidité ; si ce n'était pas considérablement plus
rapide de réaliser une tâche sur ordinateur, on la ferait à la main. J'ai
même entendu suggérer de démarrer avec Java, pour gagner sur le temps de
développement plus court, et ensuite utiliser un outil et des bibliothèques de
support pour traduire le code en C++ si on a un besoin de vitesse d'exécution plus
rapide.
|
 |
 |
 |
The key to making Java feasible for most
development projects is the appearance of speed improvements like so-called
“just-in time” (JIT) compilers, Sun’s
own “hotspot” technology, and even native code compilers. Of course,
native code compilers will eliminate the touted cross-platform execution of the
compiled programs, but they will also bring the speed of the executable closer
to that of C and C++. And cross-compiling a program in Java should be a lot
easier than doing so in C or C++. (In theory, you just recompile, but that
promise has been made before for other languages.)
|
 |
La clef pour rendre Java viable dans la plupart des projets consiste en des
améliorations de vitesse d'exécution, grâce à des compilateurs
« juste à temps » (« just in time », JIT), la
technologie « hotspot » de Sun, et même des compilateurs de code natif.
Bien sûr, les compilateurs de code natif éliminent les possibilités
d'exécution interplateformes du programme compilé, mais la vitesse des
exécutables produits se rapprochera de celle du C et du C++. Et réaliser un programme
multiplateformes en Java devrait être beaucoup plus facile qu'en C ou C++ (en théorie,
il suffit de recompiler, mais cette promesse a déjà été faite pour les
autres langages).
|
 |
 |
 |
You can find comparisons of Java and C++
and observations about Java realities in the appendices of the first edition of
this book (Available on this book’s accompanying CD ROM, as well as at
www.BruceEckel.com).
|
 |
Vous trouverez des comparaisons entre Java et C++ et des observations sur
Java dans les annexes de la première édition de ce livre (disponible sur le CD ROM
accompagnant ce livre, et à www.BruceEckel.com).
|
 |
 |
 |
Summary
|
 |
Résumé
|
 |
 |
 |
This chapter attempts to give you a feel
for the broad issues of object-oriented programming and Java, including why OOP
is different, and why Java in particular is different, concepts of OOP
methodologies, and finally the kinds of issues you will encounter when moving
your own company to OOP and Java.
|
 |
Ce chapitre tente de vous donner un aperçu des sujets couverts par
la programmation orientée objet et Java (les raisons qui font que la POO est
particulière, de même que Java), les concepts des méthodologies de la POO, et
finalement le genre de problèmes que vous rencontrerez quand vous migrerez dans votre
entreprise à la programmation orientée objet et Java.
|
 |
 |
 |
OOP and Java may not be for everyone.
It’s important to evaluate your own needs and decide whether Java will
optimally satisfy those needs, or if you might be better off with another
programming system (including the one you’re currently using). If you know
that your needs will be very specialized for the foreseeable future and if you
have specific constraints that may not be satisfied by Java, then you owe it to
yourself to investigate the
alternatives[19].
Even if you eventually choose Java as your language, you’ll at least
understand what the options were and have a clear vision of why you took that
direction.
|
 |
La POO et Java ne sont pas forcément destinés à tout
le monde. Il est important d'évaluer ses besoins et décider si Java satisfera au
mieux ces besoins, ou si un autre système de programmation ne conviendrait pas mieux (celui
qu'on utilise actuellement y compris). Si on connaît ses besoins futurs et qu'ils impliquent
des contraintes spécifiques non satisfaites par Java, alors on se doit d'étudier les
alternatives existantes [19]. Et même si finalement
Java est retenu, on saura au moins quelles étaient les options et les raisons de ce
choix.
|
 |
 |
 |
You know what a procedural program looks
like: data definitions and function calls. To find the meaning of such a program
you have to work a little, looking through the function calls and low-level
concepts to create a model in your mind. This is the reason we need intermediate
representations when designing procedural programs—by themselves, these
programs tend to be confusing because the terms of expression are oriented more
toward the computer than to the problem you’re solving.
|
 |
On sait à quoi ressemble un programme procédural : des
définitions de données et des appels de fonctions. Pour trouver le sens d'un tel
programme il faut se plonger dans la chaîne des appels de fonctions et des concepts de bas
niveau pour se représenter le modèle du programme. C'est la raison pour laquelle on a
besoin de représentations intermédiaires quand on conçoit des programmes
procéduraux - par nature, ces programmes tendent à être confus car le code
utilise des termes plus orientés vers la machine que vers le problème qu'on tente de
résoudre.
|
 |
 |
 |
Because Java adds many new concepts on
top of what you find in a procedural language, your natural assumption may be
that the main( ) in a Java program will be far more complicated than
for the equivalent C program. Here, you’ll be pleasantly surprised: A
well-written Java program is generally far simpler and much easier to understand
than the equivalent C program. What you’ll see are the definitions of the
objects that represent concepts in your problem space (rather than the issues of
the computer representation) and messages sent to those objects to represent the
activities in that space. One of the delights of object-oriented programming is
that, with a well-designed program, it’s easy to understand the code by
reading it. Usually there’s a lot less code as well, because many of your
problems will be solved by reusing existing library code.
|
 |
Parce que Java introduit de nombreux nouveaux concepts par rapport à
ceux qu'on trouve dans un langage procédural, on pourrait se dire que la fonction
main() dans un programme Java sera bien plus compliquée que son
équivalent dans un programme C. On sera agréablement surpris de constater qu'un
programme Java bien écrit est généralement beaucoup plus simple et facile
à comprendre que son équivalent en C. On n'y voit que les définitions des
objets qui représentent les concepts de l'espace problème (plutôt que leur
représentation dans l'espace machine) et les messages envoyés à ces objets
pour représenter les activités dans cet espace. L'un des avantages de la POO est
qu'avec un programme bien conçu, il est facile de comprendre le code en le lisant. De plus,
il y a généralement moins de code, car beaucoup de problèmes sont
résolus en réutilisant du code existant dans des bibliothèques.
|
 |
 |
 |
[2]
See Multiparadigm Programming in Leda by Timothy Budd (Addison-Wesley
1995).
|
 |
[2]Voir Multiparadigm
Programming in Leda de Timothy Budd (Addison-Wesley 1995).
|
 |
 |
 |
[3]
Some people make a distinction, stating that type determines the interface while
class is a particular implementation of that interface.
|
 |
[3]Certaines personnes
établissent une distinction, en disant qu'un type détermine une interface tandis
qu'une classe est une implémentation particulière de cette interface.
|
 |
 |
 |
[4]
I’m indebted to my friend Scott Meyers for this term.
|
 |
[4]Je suis reconnaissant envers
mon ami Scott Meyers pour cette expression.
|
 |
 |
 |
[5]
This is usually enough detail for most diagrams, and you don’t need to get
specific about whether you’re using aggregation or
composition.
|
 |
[5]Cela suffit
généralement pour la plupart des diagrammes, et on n'a pas besoin de préciser
si on utilise un agrégat ou une composition.
|
 |
 |
 |
[6]
My term.
|
 |
[6]Invention
personnelle.
|
 |
 |
 |
[7]
Primitive types, which you’ll learn about later, are a special
case.
|
 |
[7]Les types primitifs, que vous
rencontrerez plus loin, sont un cas spécial.
|
 |
 |
 |
[8]
An excellent example of this is UML Distilled, 2nd edition, by
Martin Fowler (Addison-Wesley 2000), which reduces the sometimes-overwhelming
UML process to a manageable subset.
|
 |
[8]Un très bon exemple en
est UML Distilled, 2nd edition, de Martin Fowler (Addison-Wesley 2000), qui
réduit la méthode UML - parfois écrasante - à un sous-ensemble
facilement gérable.
|
 |
 |
 |
[9]
My rule of thumb for estimating such projects: If there’s more than one
wild card, don’t even try to plan how long it’s going to take or how
much it will cost until you’ve created a working prototype. There are too
many degrees of freedom.
|
 |
[9]Ma règle pour estimer de
tels projets : s'il y a plus d'un facteur joker, n'essayez même pas de planifier combien
de temps cela va prendre ou d'estimer le coût avant d'avoir créé un prototype
fonctionnel. Il y a trop de degrés de liberté.
|
 |
 |
 |
[10]
Thanks for help from James H Jarrett.
|
 |
[10]Merci à James H
Jarrett pour son aide.
|
 |
 |
 |
[11]
More information on use cases can be found in Applying Use Cases by
Schneider & Winters (Addison-Wesley 1998) and Use Case Driven Object
Modeling with UML by Rosenberg (Addison-Wesley 1999).
|
 |
[11]D'autres informations sur
les cas d'utilisation peuvent être trouvées dans Applying Use Cases de
Schneider & Winters (Addison-Wesley 1998) et Use Case Driven Object Modeling with UML
de Rosenberg (Addison-Wesley 1999).
|
 |
 |
 |
[12]
My personal take on this has changed lately. Doubling and adding 10 percent will
give you a reasonably accurate estimate (assuming there are not too many
wild-card factors), but you still have to work quite diligently to finish in
that time. If you want time to really make it elegant and to enjoy yourself in
the process, the correct multiplier is more like three or four times, I
believe.
|
 |
[12]Mon avis personnel sur tout
cela a changé récemment. Doubler et ajouter 10 pour cent donnera une estimation
raisonnablement précise (en assumant qu'il n'y ait pas trop de facteurs joker), mais il
faudra tout de même ne pas traîner en cours de route pour respecter ce délai. Si
on veut réellement du temps pour rendre le système élégant et ne pas
être continuellement sous pression, le multiplicateur correct serait plus trois ou quatre
fois le temps prévu, je pense..
|
 |
 |
 |
[13]
For starters, I recommend the aforementioned UML Distilled,
2nd edition.
|
 |
[13]Pour les débutants,
je recommande UML Distilled, 2nd edition, déjà mentionné
plus haut.
|
 |
 |
 |
[14]
Python (www.Python.org) is often used as “executable
pseudocode.”
|
 |
[14]Python (www.python.org) est
souvent utilisé en tant que « pseudocode exécutable ».
|
 |
 |
 |
[15]
At least one aspect of evolution is covered in Martin Fowler’s book
Refactoring: improving the design of existing code (Addison-Wesley 1999),
which uses Java examples exclusively.
|
 |
[15]Au moins un aspect de
l'évolution est couvert dans le livre de Martin Fowler Refactoring : improving the
design of existing code (Addison-Wesley 1999), qui utilise exclusivement des exemples
Java.
|
 |
 |
 |
[16]
This is something like “rapid prototyping,” where you were supposed
to build a quick-and-dirty version so that you could learn about the system, and
then throw away your prototype and build it right. The trouble with rapid
prototyping is that people didn’t throw away the prototype, but instead
built upon it. Combined with the lack of structure in procedural programming,
this often leads to messy systems that are expensive to
maintain.
|
 |
[16]Cela peut ressembler au
« prototypage rapide » où on est supposé fournir une version
rapide-et-sale afin de pouvoir appréhender correctement le problème, puis jeter ce
prototype et construire une version finale acceptable. L'inconvénient du prototypage rapide
est que les gens ne jettent pas le prototype, mais s'en servent de base pour le
développement. Combiné au manque de structure de la programmation procédurale,
cela mène à des systèmes compliqués et embrouillés, difficiles
et onéreux à maintenir.
|
 |
 |
 |
[17]
Although this may be a more American perspective, the stories of Hollywood reach
everywhere.
|
 |
[17]Bien que ceci soit plus une
perception américaine, les productions hollywoodiennes touchent tout le monde.
|
 |
 |
 |
[18]
Including (especially) the PA system. I once worked in a company that insisted
on broadcasting every phone call that arrived for every executive, and it
constantly interrupted our productivity (but the managers couldn’t begin
to conceive of stifling such an important service as the PA). Finally, when no
one was looking I started snipping speaker wires.
|
 |
[18]En particulier le
système d'annonces sonores. J'ai travaillé une fois dans une entreprise qui insistait
pour diffuser tous les appels téléphoniques à tous les responsables, et cela
interrompait constamment notre productivité (mais les responsables n'imaginaient même
pas qu'il soit concevable de vouloir couper un service aussi important que le système
d'annonces sonores). Finalement, j'ai coupé les fils des haut-parleurs quand personne ne
regardait.
|
 |
 |
 |
[19]
In particular, I recommend looking at Python
(http://www.Python.org).
[ Previous Chapter ]
[ Short TOC ]
[ Table of Contents ]
[ Index ]
[ Next Chapter ]
Last Update:04/24/2000
|
 |
[19]En particulier, je
recommande de regarder dans la direction de Python (www.Python.org).
|
 |
 |
 |
 |
 |
 |
 |
 |
|
 |
 |
 |