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:11]
admin [Listes]
poo:start [2017/08/08 07:54] (Version actuelle)
admin [MVC (Modèle - Vue - Contrôleur)]
Ligne 4: Ligne 4:
   * [[Définition des objets]]   * [[Définition des objets]]
   * [[Utilisation des objets]]   * [[Utilisation des objets]]
 +  * 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).
  
  
Ligne 9: Ligne 12:
   * [[Listes]]   * [[Listes]]
   * [[Dictionnaires]]   * [[Dictionnaires]]
 +
 +
 +===== Héritage =====
 +  * [[Substitution]] (Redéfinition)
 +  * [[Surcharge]] (Polymorphisme ad-hoc)
 +  * [[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 16: 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