10-10-2007, 07:19 PM
Pour revenir sur la POO, c'est surtout pratique pour la lisibilité, l'adaptation et la modularité du code.
Exemple concret : si des objets ont des méthodes et/ou des attributs en commun (par exemple un joueur et un PNJ ont tous les deux un nom, des points de vie, des caracs, du code pour aller chercher tout ça dans la bdd, etc.), tu les fait hériter d'une même classe qui contiendra ces points communs. Avantage : si tu modifie les élements communs (imaginons que tu ajoutes une nouvelle caractéristique ou une méthode pour mettre à jour automatiquement le mana après un lancer de sort), tu n'as à le faire qu'une fois, dans la classe mère, et toutes les classes filles sont modifiées automatiquement.
Autre exemple concret, pour la lisibilité. Compare sans POO :
//Récupération des infos sur le joueur 1
$requete_joueur1='SELECT ... FROM joueurs where pseudo=\''.$pseudo1.'\''
$sql=mysql_query($requeteJoueur1);
$carac_joueur1=mysql_fetcharray(...);
$PDV_joueur1=$resultat['PDV'];
$mana_joueur1=...
...
//Récupération des infos sur le joueur 2
$requete_joueur2=...
...
//Récupération du cout en mana de $sort
$requete_cout_sort_joueur1='SELECTcout FROM... WHERE nom=\''.$sort.'\''
$sql=...
...
//envoi du sort si possible
if ($cout_sort>$mana_joueur1){
//tout un code pour extraire les données sur le sort et appliquer ses effets au joueur 2
}
...
Avec POO:
//Initialisation
$joueur1=new Joueur($pseudo1);
$joueur2=new Joueur($pseudo2);
//envoi du sort si possible
if($joueur1->peutLancer($sort)){
$joueur1->Lancer($sort,$joueur2)
}
...
Certes le premier code n'utilise pas de fonctions, mais les appels de fonction en POO sont quand même plus élégants : beaucoup moins de paramètres à fournir (la plupart sont des attributs de la classe), choix des noms plus simples (pas de confusion entre $joueur->Lancer($sort) et $dé->Lancer() par exemple). Et puis supposons que l'efficacité du sort dépende tout à coup de la résistance du joueur 2 : le code de ta page reste strictement le même en POO, tandis qu'avec une fonction classique il aurait fallu lui rajouter ce paramètre ou rajouter tout un code dans la fonction pour aller le chercher dans la bdd.
En bref, la POO rend les gros projets (notamment en équipe) beaucoup plus lisibles et faciles à faire évoluer. Par contre, comme c'est un niveau d'abstraction supplémentaire, elle peut sembler inutile voire trop lourde pour les codes simples, courts, ou qui évoluent peu.
Exemple concret : si des objets ont des méthodes et/ou des attributs en commun (par exemple un joueur et un PNJ ont tous les deux un nom, des points de vie, des caracs, du code pour aller chercher tout ça dans la bdd, etc.), tu les fait hériter d'une même classe qui contiendra ces points communs. Avantage : si tu modifie les élements communs (imaginons que tu ajoutes une nouvelle caractéristique ou une méthode pour mettre à jour automatiquement le mana après un lancer de sort), tu n'as à le faire qu'une fois, dans la classe mère, et toutes les classes filles sont modifiées automatiquement.
Autre exemple concret, pour la lisibilité. Compare sans POO :
//Récupération des infos sur le joueur 1
$requete_joueur1='SELECT ... FROM joueurs where pseudo=\''.$pseudo1.'\''
$sql=mysql_query($requeteJoueur1);
$carac_joueur1=mysql_fetcharray(...);
$PDV_joueur1=$resultat['PDV'];
$mana_joueur1=...
...
//Récupération des infos sur le joueur 2
$requete_joueur2=...
...
//Récupération du cout en mana de $sort
$requete_cout_sort_joueur1='SELECTcout FROM... WHERE nom=\''.$sort.'\''
$sql=...
...
//envoi du sort si possible
if ($cout_sort>$mana_joueur1){
//tout un code pour extraire les données sur le sort et appliquer ses effets au joueur 2
}
...
Avec POO:
//Initialisation
$joueur1=new Joueur($pseudo1);
$joueur2=new Joueur($pseudo2);
//envoi du sort si possible
if($joueur1->peutLancer($sort)){
$joueur1->Lancer($sort,$joueur2)
}
...
Certes le premier code n'utilise pas de fonctions, mais les appels de fonction en POO sont quand même plus élégants : beaucoup moins de paramètres à fournir (la plupart sont des attributs de la classe), choix des noms plus simples (pas de confusion entre $joueur->Lancer($sort) et $dé->Lancer() par exemple). Et puis supposons que l'efficacité du sort dépende tout à coup de la résistance du joueur 2 : le code de ta page reste strictement le même en POO, tandis qu'avec une fonction classique il aurait fallu lui rajouter ce paramètre ou rajouter tout un code dans la fonction pour aller le chercher dans la bdd.
En bref, la POO rend les gros projets (notamment en équipe) beaucoup plus lisibles et faciles à faire évoluer. Par contre, comme c'est un niveau d'abstraction supplémentaire, elle peut sembler inutile voire trop lourde pour les codes simples, courts, ou qui évoluent peu.