====== 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