Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
poo:start [2017/08/07 21:24]
admin [Objets]
poo:start [2017/08/08 07:54] (Version actuelle)
admin [MVC (Modèle - Vue - Contrôleur)]
Ligne 15: Ligne 15:
  
 ===== Héritage ===== ===== Héritage =====
-  * Polymorphisme +  * [[Substitution]] (Redéfinition) 
-  * Rédéfinition +  * [[Surcharge]] (Polymorphisme ad-hoc)
-  * Surcharge+
   * [[Classes abstraites]]   * [[Classes abstraites]]
 +
 +**Exemple d'​héritage avec une ville (classe mère) et une capitale (classe fille)**
 +
 +<​code>​
 +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];​
 +  }
 +}
 +</​code>​
 +
 +<​code>​
 +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;
 +  }   
 +}
 +</​code>​
 +<WRAP center round important 60%>
 +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 [[poo:​interfaces|interfaces]] pour répondre au mieux à l'​architecture.
 +</​WRAP>​
 +
  
  
Ligne 26: Ligne 188:
   * [[Interfaces]]   * [[Interfaces]]
  
-===== MVC (Modèle - Vue - Contrôleur) ===== 
  
 +
 +===== Tests unitaires =====
 +FIXME https://​openclassrooms.com/​courses/​programmez-en-oriente-objet-avec-c/​les-tests-unitaires-5
 +
 +
 +
 +===== MVVC (Modèle - Vue - Vue/​Contrôleur) =====
 +FIXME