La programmation objet, c'est à dire celle qu'on est sensé
mettre en oeuvre lorsqu'on écrit des programmes avec un langage à
objet (ou langage orienté objet) tel que Java, fait
intervenir différents concepts tels que celui de classe,
d'objet, de responsabilité, d'encapsulation,
etc.
Le premier concept auquel on est confronté lorsqu'on écrit un
programme est celui de classe: le mot-clé class MaClasse {
... } permet de définir (entre les accolades) les membres
de la classe MaClasse.
Brouette b = new Brouette(); Personne bob = new Personne("Robert"); jean.discuterAvec(b); // Erreur de compilation jean.discuterAvec(bob); // CorrectDans la dernière instruction, la méthode discuterAvec est appelée sur l'objet jean (qu'on appelle la cible de la méthode) avec comme argument l'objet bob.
Avant de s'intéresser aux spécificités de la programmation orientée objet, nous allons nous familiariser avec la programmation "tout court", c'est à dire aux instructions simples, à leurs enchaînements, aux structures de contrôle, etc. Pour mettre en oeuvre ces concepts simples, nous n'avons pas besoin d'objets (instances) ayant des états et des fonctionnalités. Dans ce cas, il nous faut des méthodes pouvant être exécutées indépendament de l'existence d'une instance. De telles méthodes sont dites statiques ou encore méthodes de classe.
Une méthode statique a pour propriété de pouvoir être exécutée avec
pour cible la classe elle-même (tandis qu'une méthode non
statique doit impérativement être appelée sur une instance de
la classe. La définition d'une méthode statique se fait avec le mot
clé static. Exemple:
static void maMethode(Type1 param1, Type2 param2) {...}
En dehors des modificateurs de visibilité (public, protected, private), qui peuvent s'appliquer selon le cas aux classes, aux méthodes ou aux variables d'instance et sur lesquels nous reviendrons plus tard, la définition d'une méthode est de la forme suivante:
typeRetour nomMethode(Type1 param1, ..., TypeN paramN) { ... }Dans le cas des méthodes statiques, nous ferons simplement précéder le type de retour (le type de la valeur renvoyée par l'exécution de la méthode) par le mot-clé static.
Toutes les variables que l'on peut manipuler en Java sont typées et on distingue deux grandes catégories de types:
Personne p; // N'alloue pas l'espace mémoire requis // pour stocker un objet de la classe Personne p = new Personne("Toto"); // L'opérateur new alloue l'espace mémoire requis par le // constructeur de la classe Personne et renvoie (assigne // dans la variable p) la référence à cet espace mémoire.On distingue quelques fois les références à des objets (comme ci-dessus) et les références à des tableaux. Ces deux types de référence sont bien de même nature, même si les constructeurs de tableaux sont un peu particuliers.
Les tableaux, en Java, sont des instances de classes invisibles
(elles n'apparaissent pas dans les API). Ils permettent de stocker un
nombre établi d'éléments, tous du même type. Une variable de type
tableau se déclare avec la syntaxe suivante:
TypeElement[] nomVariable;
Un objet tableau de ce type, de taille N, s'alloue comme
ceci:
nomVariable = new TypeElement[N];
Il existe d'autres syntaxes, mais celle ci est la plus répandue.
Lorsqu'un tableau est alloué, tous ses éléments sont initialisés à la valeur par défaut du type des éléments. Cette valeur est 0 pour tous les types numériques, false pour le type boolean et null pour tous les types référence. Ce null correspond à "la référence vers rien" et c'est une erreur que d'essayer d'y accéder. Ces initialisations par défaut sont également effectuées pour les variables d'instance (champs) d'un objet lors de sa création.
% java TriEntiers 34 65 12 7 27 12 7 12 12 27 34 65