====== La Programmation Orientée Objet ====== ===== Objets ===== * [[Définition 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). ===== Collections ===== * [[Listes]] * [[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)** 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 [[poo:interfaces|interfaces]] pour répondre au mieux à l'architecture. ===== Classes ===== * [[Classes Passerelles]] * [[Classes abstraites]] * [[Interfaces]] ===== 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