Classes et Objets

Programmation orientée objet

Les classes constituent l’outil principale de la Programmation orientée objet (la POO).

Je ne reviendrai pas sur l'histoire de la POO, la chose à retenir c'est que la POO est une façon de programmer, mais surtout une façon de penser et de concevoir une application. En soit elle aborde un problème de façon plus naturel en identifiant les informations qui vont circuler dans le programme, une fois les informations identifiées et organisées, on les définit en tant qu'objet. 1)

Si par exemple vous devez concevoir un système de gestion de contact, vous créerez un objet Contact qui disposera des informations utiles (Nom, prénom, etc…). Ces objets auront également des comportements (Enregistrer, effacer, etc…).

Une application en POO contient généralement un grand nombre d'objet. Chaque un de ces objets rempli des fonctions très spécifiques. Les objets peuvent également interagir entre eux de façon explicite 2) : Dans notre exemple de contact, nous pourrions utiliser un objet pour représenter les coordonnées d'un contact.

Cette façon de concevoir une application présente plusieurs avantages :

  • Elle force à bien pensée l'application
  • Elle simplifie la maintenance car l'application est décomposée en plein de petites classes (parfois autonomes).
  • Certaines classes peuvent être réutilisée dans d'autres projets
  • La répartition des tâches est simplifiée pour le travail en équipe
  • Ça fait quand même plus classe de dire qu'on code en objet

Bon comme on ne vit pas à Disney land, il convient de souligner les inconvénients :

  • Une erreur de conception est très difficilement récupérable, voir fatal
  • Une modélisation branlante donnera toujours un programme branlant… Mais en POO encore plus.
  • Une application POO bricolée est un cauchemars de maintenance
  • Un débutant en POO sera toujours tenté de modéliser l'univers entier pour faire un programme qui dit "bonjour"

Notion de classe et d'objet

En POO vous entendez souvent parler de 2 choses : classe et objet. C'est 2 notions sont très liées mais il ne faut pas les confondre, à savoir :

  • La classe : Est est déclarée dans un fichier. On peut la comparer à un gabarit. Une classe va décrire un modèle de donnée en lui spécifiant des attributs (les propriétés) ainsi que des comportements (les méthodes).
  • L'objet : Un objet est une donnée de programmation issue d'une classe. Comme expliqué plus haut, la classe est un modèle, les objets sont donc créés à partir de cette classe (appelé instance). Il disposeront des propriétés et méthodes définit par la classe (et un peu plus quand nous aborderons l'héritage).

Définition de classe java

Le langage java est très fortement orienté objet. En effet, tout (enfin presque) est une classe. Si vous avez déjà saisi quelques scripts, vous avez sans le savoir déjà écrit des classes.

Définition d'une classe java :

public class NomClasse
  {
  // Corps de la classe
  }

Le nom d'une classe ne se fait pas à la légère, il doit être explicite sur la fonction de cette classe.

Si votre classe s'appelle NomClasse, elle doit être déclarée dans un fichier NomClasse.java. A la compilation, vous obtiendrez un fichier NomClass.class

Les membres

Les différentes composantes d'une classe sont appelés membres, on trouve :

  • Les propriétés : Elles définissent les caractéristiques des objets que nous créerons avec cette classe, les propriétés sont comparables aux variables sauf qu'elles seront disponibles de n'importe où dans l'objet 3).
  • Les méthodes : Elle représentent les fonctionnalités ou comportements des futurs objets.

Propriétés

Les propriétés vont vous permettre de décrire les données disponibles dans un objet.

public class Auteur 
{
    /* =============== PROPRIETES === */
    public String nom;
    public String prenom;
    public int anneeNaissance;




    /** Méthode main, elle est placée ici pour
     * pour des raisons purement pratique.
     */
    public static void main( String args[] )
    {
	// Création d'une instance de la classe Auteur
	Auteur a1 = new Auteur();

	// Modification des propriétés
	a1.nom = "Kerouac";
	a1.prenom = "Jack";
	
	// Affiche les propriétés 'nom' et 'prénom'
	// séparées par un espace.
	System.out.println(a1.nom +" " +a1.prenom);
    }
}

L'accès aux membres d'une instance de classe se fait avec l'opérateur ., dans cet exemple il est utilisé pour affecter des valeurs :

a1.nom = "Kerouac";
a1.prenom = "Jack";
Puis dans l'instruction pour l'affichage, il permet d'accéder à la la propriété :
System.out.println(a1.nom +" " +a1.prenom);

Mais quelle différente entre une variable et une propriété ?

Très bonne question de moi-même, et bien la propriété a une durée de vie étendue, elle sera disponible pendant toute la durée de vie de l'instance.

De ce fait, vous noterez que les propriétés de classes doivent être déclarées dans le corps de la classe.

public class Auteur 
{
    /* =============== PROPRIETES === */
    public String nom;
    public String prenom;
    public int anneeNaissance;
    
    // (...)
}

Comme pour les variables, on peut déclarer et affecter simultanément :

public class Auteur 
{
    /* =============== PROPRIETES === */
    public String nom = "Deleuze";
    public String prenom = "Gilles";
    public int anneeNaissance = 1925;
    
    // (...)
}

Il est préférable de fixer les valeurs par défaut dans le constructeur.

On trouve aussi dans la déclaration de nos propriétés la présence d'une indication de visibilité (ici c'est le mot-clef public). Nous verrons par la suite que les propriétés peuvent être :

  • public : Disponible de n'importe où
  • protected : Disponible de l'intérieur de la classe et des ces enfants 4)
  • private : La propriété est disponible uniquement depuis les instances de la classe.
  • package : La propriété est disponible uniquement depuis les classes du même package 5).

Les méthodes

Les méthodes sont utilisées pour définir des comportements à une classe : Traitement des données, affichage, etc…

Les méthodes vont généralement interagir avec l'instance via les membres de l'instance courante (propriétés et méthodes).

public class Auteur
{
    /* =============== PROPRIETES === */
    public String nom;
    public String prenom;
    public int anneeNaissance;
    
    
    /* =============== METHODES === */
    public void afficherAuteur(){
      System.out.println(nom +" " +prenom);
    }
}

Le constructeur

1) La phase de conception qui consiste à identifier le modèle de données et à le structurer en objets s'appelle la modélisation, cette tâche, invisible, est trop souvent négligée.
2) On parle de couplage fort
3) Alors que les variables n'existent que le temps de l’exécution d'un bloc d'instructions
4) Cette notion est en relation avec l'héritage
5) Que l'on abordera avec la notion de package
java/classes-et-objets.txt · Dernière modification: 2011/10/21 11:48 par jacksay
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante : CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki

Ce site contient des traces de XHTML et de CSS.