La Programmation Orientée Objet

  • Les méthodes communes utiles :
    • Equals : Pour comparer l'objet à un autre objet de type potentiellement différent, contrairement à l'opérateur == qui compare seulement des types identiques.
    • ToString() : Renvoi le type de l'objet qui appelle cette méthode mais peut être redéfinie dans la classe pour renvoyer d'autres informations (propriétés par exemple).

Exemple d'héritage avec une ville (classe mère) et une capitale (classe fille)

public class Ville {

  //*************   VARIABLES D'INSTANCE *************
  //Stocke le nom de notre ville
  private String nomVille;
  //Stocke le nom du pays de notre ville
  private String nomPays;
  //Stocke le nombre d'habitants de notre ville
  private int nbreHabitants;
  
  
  
  //*************   CONSTRUCTEURS *************
  //Constructeur par défaut
  public Ville(){
  Console.WriteLine("Création d'une ville !");          
  nomVille = "Inconnu";
  nomPays = "Inconnu";
  nbreHabitants = 0;
  this.setCategorie();
  }
 
  //Constructeur avec paramètres
  public Ville(String pNom, int pNbre, String pPays)
  {
  Console.WriteLine("Création d'une ville avec des paramètres !");
  nomVille = pNom;
  nomPays = pPays;
  nbreHabitants = pNbre;
  this.setCategorie();
  }   
          
  
  
  //*************   ACCESSEURS *************
    
  //Retourne le nom de la ville
  public String getNom()  {  
    return nomVille;
  }

  //Retourne le nom du pays
  public String getNomPays()
  {
    return nomPays;
  }

  // Retourne le nombre d'habitants
  public int getNombreHabitants()
  {
    return nbreHabitants;
  } 
  
  //Retourne la catégorie de la ville
  public char getCategorie()
  {
    return categorie;
  }
  
  //Retourne la description de la ville
  public String decrisToi(){
    return this.nomVille+" est une ville de "+this.nomPays+ ", elle comporte : "+this.nbreHabitants+" habitant(s) => elle est donc de catégorie : "+this.categorie;
  }

  //Retourne une chaîne de caractères selon le résultat de la comparaison
  public String comparer(Ville v1){
    String str = new String();

    if (v1.getNombreHabitants() > this.nbreHabitants)
      str = v1.getNom()+" est une ville plus peuplée que "+this.nomVille;
     
    else
      str = this.nomVille+" est une ville plus peuplée que "+v1.getNom();
     
    return str;
 


  //*************   MUTATEURS   *************

  //Définit le nom de la ville
  public void setNom(String pNom)
  {
    nomVille = pNom;
  }

  //Définit le nom du pays
  public void setNomPays(String pPays)
  {
    nomPays = pPays;
  }

  //Définit le nombre d'habitants
  public void setNombreHabitants(int nbre)
  {
    nbreHabitants = nbre;
  } 
  
  //Définit la catégorie de la ville
  private void setCategorie() {
 
    int bornesSuperieures[] = {0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000};
    char categories[] = {'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};

    int i = 0;
    //Tant que l'on ne dépasse pas le tableau (éviter d'être hors index) et que le nombre d'habitants de la ville est supérieur à la borne actuelle.
    while (i < bornesSuperieures.length && this.nbreHabitants > bornesSuperieures[i])
      i++;

    this.categorie = categories[i];
  }
}
public class Capitale extends Ville {
     
  private String monument;
    
  //Constructeur par défaut
  public Capitale(){
    //Ce mot clé appelle le constructeur de la classe mère
    super();
    monument = "aucun";
  }    
      
  //Constructeur d'initialisation de capitale
  public Capitale(String nom, int hab, String pays, String monument){
    super(nom, hab, pays);
    this.monument = monument;
  }    
     
  /**
    * Description d'une capitale
    * @return String retourne la description de l'objet
  */
  public String decrisToi(){
    String str = super.decrisToi() + "\n \t ==>>" + this.monument + "en est un monument";

    return str;
    } 

  /**
    * @return le nom du monument
  */
  public String getMonument() {
    return monument;
  } 

  //Définit le nom du monument
  public void setMonument(String monument) {
    this.monument = monument;
  }   
}

Dans la plupart des langages de programmation récents, il n'est possible d'hériter que d'une seule classe mère. Il faut donc utiliser les interfaces pour répondre au mieux à l'architecture.

FIXME