 |
 |
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).
|
 |
 |
 |
 |
 |
 |
 |
 |
|
 |
 |
 |