Différences
Ci-dessous, les différences entre deux révisions de la page.
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:17] admin |
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 12: | 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 23: | 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 |