Java est un langage de programmation à objets (on dit aussi orienté objets).
Bien que des exemples et des remarques fassent fréquemment le lien avec Java au cours de ce chapitre, le but est bien ici d'introduire les principaux concepts des langages de programmation à objets, indépendamment d'un langage particulier.
Définition : Un objet est une entité, une chose concrète ou abstraite qui peut être reconnue distinctement.
Exemples d'objet : un crayon, une automobile, une couleur, une fenêtre sur un écran d'ordinateur…
Chaque objet possède une structure. Par exemple :
Chaque objet possède aussi un comportement. Par exemple :
Définition : Un type est un ensemble de caractéristiques communes à des objets.
En programmation, le type est une notion abstraite mais importante, concrétisée par différents moyens.
En informatique, nous manipulons souvent de nombreux objets qui possèdent la même structure et le même comportement.
Définition : Une classe est
Par exemple :
Automobile.Automobile décrit la structure et le comportement communs à toutes les automobiles (« automobiles » est donc à prendre au sens d'« objets automobiles »).Automobile peut créer des automobiles.Notez que :
Automobile exprime que chaque automobile est constituée, entre autres choses, d'un numéro d'immatriculation.Automobile, possède une valeur pour ce numéro d'immatriculation.Un exemple de classe Java :
class Personne {
|
Définition : Un classifieur est une définition et un ensemble d'objets ou de classifieurs.
Le concept de classe est un peu ambigu car ce terme est utilisé avec des acceptions variables dans presque tous les langages à objets. Le concept de classifieur a l'avantage d'être plus général et moins ambigu, je l'utiliserai donc autant que possible.
Définition : Un attribut (on dit aussi champ) est un élément de la structure des objets. C'est une variable définie dans le classifieur qui décrit ces objets.
Notre classe Java Personne avec trois attributs :
class Personne {
|
Définition : Une méthode est un élément du comportement des objets. C'est une procédure ou une fonction définie dans le classifieur qui décrit ces objets.
multiplier réalise la multiplication de deux nombres et rend comme résultat le produit trouvé. Une procédure est un ensemble d'instructions qui réalise un travail sans rendre de résultat. Par exemple, la procédure dessinerSurÉcran réalise le dessin et n'a rien à rendre.Notre classe Java Personne avec ses trois attributs et deux méthodes :
class Personne {
|
Définition : Un constructeur est une fonction particulière dont le rôle est de créer un nouvel objet.
Les constructeurs ont principalement trois tâches :
Remarque : Contrairement aux attributs et méthodes, les constructeurs diffèrent de manière très significative entre langages à objets. En Java, comme c'est le cas dans d'autres langages mais pas dans tous, les constructeurs portent exactement le nom de la classe qui les contient. Java dispose aussi d'initialiseurs qui ne sont pas des constructeurs.
Notre classe Java Personne avec ses trois attributs, ses deux méthodes et un constructeur (par convention, mais sans obligation, on déclare souvent en Java d'abord les attributs puis les constructeurs et enfin les méthodes) :
class Personne {
|
Définition : Un destructeur est une procédure particulière dont le rôle est de détruire un objet existant.
Les destructeurs ont principalement deux tâches :
Remarque : Comme les constructeurs, les destructeurs diffèrent de manière très significative entre langages à objets. En Java, comme dans beaucoup de langages à objets, il n'existe pas de destructeur car la libération de la mémoire est gérée automatiquement. Pour la libération des ressources, Java dispose de finaliseurs qui sont d'un usage assez rare.
Définition : Un ramasse-miettes (en anglais : garbage collector) est un dispositif qui libère automatiquement la mémoire des objets qui ne sont plus accessibles.
Remarque : Java dispose d'un ramasse-miettes intégré, d'où l'inutilité des destructeurs.
Définition : Un accesseur est une méthode qui permet d'accéder en lecture ou en écriture à la valeur d'un attribut.
get ou set suivi du nom de l'attribut concerné. Par exemple, l'accesseur en lecture de l'attribut prix se nomme généralement getPrix, celui en écriture setPrix.Définition : Un membre (on dit aussi primitive ou propriété) d'un classifieur est un élément constitutif de celui-ci : un attribut ou une méthode ou un constructeur…, c'est-à-dire une entité déclarée dans le classifieur.
Remarque : Pour Java, les membres d'une classe, par exemple, sont ses attributs, méthodes, constructeurs, initialiseurs, finaliseurs…
Définition : La surcharge est la capacité que possède un classifieur d'avoir plusieurs membres portant le même nom.
Tous les langages à objets n'autorisent pas la surcharge, considérée comme très pratique par certains et source de problèmes par d'autres.
Remarque : Java dispose de la surcharge notamment pour les méthodes et les constructeurs : lorsque deux méthodes ou deux constructeurs portent le même nom, c'est le nombre et le type de leurs paramètres qui permettent alors de les différencier. Rappelons que les constructeurs d'un classifieur portent tous forcément le même nom, puisqu'ils portent tous le nom du classifieur.
Définition : L'envoi de message est une technique qui consiste pour un objet à demander à un autre objet de réaliser une tâche.
Par exemple, un utilisateur peut demander à un objet fenêtre de se redimensionner ou de se fermer ou un objet bouton peut demander à un objet dessin de s'afficher.
Remarque : En Java, comme généralement dans les langages à objets, l'envoi de message se concrétise par un accès à un attribut ou un appel de méthode.
Définition : L'encapsulation est une technique essentielle des langages à objets. Elle consiste à réunir au sein d'un classifieur la structure (attributs) et le comportement (méthodes) d'un type de donnée.
Les avantages de l'encapsulation sont :
Définition : L'agrégation (on dit aussi composition) est la capacité d'un objet à être constitué de manière concrète ou abstraite par d'autres objets ou à faire référence à d'autres objets.
automobile est constitué d'un objet carrosserie, d'un objet moteur et d'un objet numéroImmatriculation.carrosserie doit être détruit en même temps que l'objet automobile.numéroImmatriculation doit continuer d'exister même quand ce n'est plus le cas de l'objet automobile.Définition : L'héritage est une technique essentielle des langages à objets. Il permet de définir un nouveau classifieur en fonction d'un classifieur existant.
Employé spécialise le classifieur Personne : un employé est une personne spécialisée, il dispose en plus d'un employeur et d'un salaire.Les avantages de l'héritage sont :
Définition : La redéfinition est une technique qui permet, dans un classifieur héritier, de donner une nouvelle définition d'un membre déjà présent dans un classifieur hérité.
Parallélogramme qui définit une méthode aire, alors le classifieur Carré, qui hérite de Parallélogramme, peut redéfinir aire pour lui donner un code plus adapté.Définition : Le polymorphisme est la capacité d'un objet à prendre plusieurs formes, c'est-à-dire à être manipulé en fonction de son classifieur, mais aussi en fonction d'autres classifieurs compatibles avec le sien.
Employé bien sûr, mais aussi comme instance (indirecte) de Personne ou encore comme un très général Objet.