“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 304 — #314
i
i
i
i
i
i
i
i
304
6
• La programmation orientée objet
pas comment elles sont implémentées. Elles peuvent être implémentées comme une
liste enchaînée, mais elles peuvent avoir une autre implémentation, par exemple un
dictionnaire ou une liste déclarative.
En donnant une classe qui définit une feuille de l’arbre, le motif Composite renvoie
une classe qui définit l’arbre. Dit de cette façon, cela ressemble à la programmation
d’ordre supérieur : nous voudrions définir une fonction qui accepte une classe et qui
renvoie une autre classe. La plupart des langages courants, comme C++ et Java, ne
permettent pas de définir cette fonction. Il y a deux raisons pour cela. D’abord, ces
langages ne considèrent pas les classes comme des valeurs. Ensuite, la fonction définit
une nouvelle superclasse de la classe d’entrée. Ces langages permettent la définition
de nouvelles sous-classes mais pas de nouvelles superclasses. Pourtant, malgré ces
limitations nous voudrions toujours utiliser le motif Composite dans nos programmes.
La solution habituelle à ce problème est de considérer les motifs de conception
essentiellement comme une façon d’organiser ses pensées, sans pour cela avoir un
soutien du langage de programmation. Un motif peut exister seulement dans l’esprit
du programmeur. Les motifs de conception peuvent alors être utilisés dans les langages
comme C++ ou Java, même s’ils ne peuvent pas être implémentés comme des abstractions dans ces langages. Cela peut être facilité avec un préprocesseur du code source.
Le programmeur peut ainsi programmer directement avec des motifs de conception et
le préprocesseur génère le code source pour le langage cible.
6.5 LE LANGAGE JAVA (PARTIE SÉQUENTIELLE)
Java est un langage concurrent orienté objet avec une syntaxe qui ressemble à C++.
Cette section donne une brève introduction à la partie séquentielle de Java. Nous
expliquons comment écrire un programme simple, comment définir des classes et
comment utiliser l’héritage. Nous ne parlons pas de la réflection, qui permet de faire
beaucoup de ce que notre système à objets sait faire (mais de manière plus verbeuse).
Java est presque un langage orienté objet pur : presque toutes les entités sont des
objets. Il n’y a qu’un petit ensemble de types primitifs, les entiers, flottants, booléens
et caractères, qui utilisent le style ADT et qui ne sont donc pas des objets. Java est
un langage relativement propre avec une sémantique relativement simple. Malgré
la ressemblance syntaxique, il y a une grande différence en philosophie entre Java
et C++ [7, 90]. C++ donne accès à la représentation machine des données et fait
une traduction directe aux instructions machine. Il a aussi une gestion de mémoire
manuelle. À cause de ces propriétés, C++ peut souvent être utilisé à la place du
langage d’assemblage. En revanche, Java cache la représentation des données et fait
une gestion automatique de mémoire. Il soutient la programmation répartie. Il a un
système à objets plus sophistiqué. Ces propriétés font que Java est plus commode pour
le développement d’applications générales.
i
i
i
i
i
i
i
i
304
6
• La programmation orientée objet
pas comment elles sont implémentées. Elles peuvent être implémentées comme une
liste enchaînée, mais elles peuvent avoir une autre implémentation, par exemple un
dictionnaire ou une liste déclarative.
En donnant une classe qui définit une feuille de l’arbre, le motif Composite renvoie
une classe qui définit l’arbre. Dit de cette façon, cela ressemble à la programmation
d’ordre supérieur : nous voudrions définir une fonction qui accepte une classe et qui
renvoie une autre classe. La plupart des langages courants, comme C++ et Java, ne
permettent pas de définir cette fonction. Il y a deux raisons pour cela. D’abord, ces
langages ne considèrent pas les classes comme des valeurs. Ensuite, la fonction définit
une nouvelle superclasse de la classe d’entrée. Ces langages permettent la définition
de nouvelles sous-classes mais pas de nouvelles superclasses. Pourtant, malgré ces
limitations nous voudrions toujours utiliser le motif Composite dans nos programmes.
La solution habituelle à ce problème est de considérer les motifs de conception
essentiellement comme une façon d’organiser ses pensées, sans pour cela avoir un
soutien du langage de programmation. Un motif peut exister seulement dans l’esprit
du programmeur. Les motifs de conception peuvent alors être utilisés dans les langages
comme C++ ou Java, même s’ils ne peuvent pas être implémentés comme des abstractions dans ces langages. Cela peut être facilité avec un préprocesseur du code source.
Le programmeur peut ainsi programmer directement avec des motifs de conception et
le préprocesseur génère le code source pour le langage cible.
6.5 LE LANGAGE JAVA (PARTIE SÉQUENTIELLE)
Java est un langage concurrent orienté objet avec une syntaxe qui ressemble à C++.
Cette section donne une brève introduction à la partie séquentielle de Java. Nous
expliquons comment écrire un programme simple, comment définir des classes et
comment utiliser l’héritage. Nous ne parlons pas de la réflection, qui permet de faire
beaucoup de ce que notre système à objets sait faire (mais de manière plus verbeuse).
Java est presque un langage orienté objet pur : presque toutes les entités sont des
objets. Il n’y a qu’un petit ensemble de types primitifs, les entiers, flottants, booléens
et caractères, qui utilisent le style ADT et qui ne sont donc pas des objets. Java est
un langage relativement propre avec une sémantique relativement simple. Malgré
la ressemblance syntaxique, il y a une grande différence en philosophie entre Java
et C++ [7, 90]. C++ donne accès à la représentation machine des données et fait
une traduction directe aux instructions machine. Il a aussi une gestion de mémoire
manuelle. À cause de ces propriétés, C++ peut souvent être utilisé à la place du
langage d’assemblage. En revanche, Java cache la représentation des données et fait
une gestion automatique de mémoire. Il soutient la programmation répartie. Il a un
système à objets plus sophistiqué. Ces propriétés font que Java est plus commode pour
le développement d’applications générales.
