l y a beaucoup de façons de ne
pas réécrire le code, nous l'avons vu dans le premier article sur
ce thème. Cela va du " copier/coller " aux " include ".
Il en est une autre qui n'est pas possible avec tous les langages de programmation.
C'est l'utilisation d'objets.
On en parle beaucoup, et tout se dit. Je
vais bien me garder d'être théorique sur le sujet, je vais en faire
une approche pragmatique. PHP va être notre support car c'est un langage
orienté objet, libre et facile.
Il y a une correspondance parfaite avec
les objets du monde réel. Suivant le système d'information, les
objets pourront être des clients - des contrats - des factures - des cartes
bancaires pour un magasin en ligne, ou bien encore des classes-des profs - des
salles - des programmes pour un système d'emploi du temps, ou bien encore
des mails avec des adresses-un contenu.
L'intérêt évident de
cette approche est que le concepteur a le même langage que l'utilisateur,
celui-ci y retrouve ses petits et peut donc bien mieux dialoguer sur les concepts
que devant un superbe MCD (modèle conceptuel de données)...
Les classes et les objets
J'ai volontairement commis un abus de langage,
ce que j'ai appelé objet jusqu'à présent correspond à
des classes. Une classe est un ensemble, l'objet est un élément
de cet ensemble et comme M. Jourdain on fait des maths ensemblistes, comme quoi
ce n'est pas si compliqué..
Un objet est une entité informatique autonome. Il comprend deux parties,
l'une statique - son état et les liens avec les autres objets - ce sont
les propriétés et l'autre dynamique - ses comportements, ses réactions-
ce sont ses services. La classe est le regroupement d'objets qui partagent les
mêmes propriétés et les mêmes services ; on parle alors
des attributs et des méthodes de la classe.
Etudions de plus près un exemple que j'aime bien, plus abstrait mais ô
combien pratique, celui des accès aux données.
Exemple, les accès aux données
Il n'est pas rare que nous devions manipuler
plusieurs tables liées, d'une même base ou non d'ailleurs. Chaque
curseur est au moins défini par la base auquel il accède avec nom
du serveur, nom de la base, code utilisateur et mot de passe utilisateurs. Ensuite
ce qui différencie un curseur d'un autre c'est ce que l'on va lui faire
faire. C'est à dire les méthodes: exécuter une requête,
nous renvoyer les lignes etc..
On définit donc une classe BDD :
Je prends comme support un extrait de phpLib, qui contient tout le module d'accès
aux données.
Notation sommaire
|
En PHP pour MySQL
|
Classe BDD
- Données/Attributs
- Serveur ": string"
;
- Nom de la base ":
string" ;
- Utilisateur ": string"
;
- Mot de passe ":
string" ;
- Il y en a d'autres…
- Services/Méthodes
- Connecter";
- Exécuter requête"
;
- Donner ligne du résultat"
;
- Etc…
- Fin de la classe.
|
class
BDD {
/*
paramètres de connexion */
var $Host = "";
var $Database = "";
var $User = "";
var $Password = "";
/* fonction de connexion * /
function connect()
}
}
|
Un des
atouts de cette technologie est que l'on peut sous-classer. On crée une
classe qui dérive de celle que l'on vient de définir. La sous-classe
hérite, on appelle cette technique l'héritage d'ailleurs, de tous
les attributs et de toutes les méthodes de son aïeule. Mais on peut
les spécialiser, on peut aussi en ajouter. Dans notre cas nous pouvons
dans un contexte particulier valoriser les paramètres de connexion à
la base, la fonction de connexion est celle de la classe BDD :
.
|
.
|
Classe BDD1 sous-classe
de BDD
- Données/Attributs
- Serveur "= valeur"
;
- Nom de la base "=
valeur";
- Utilisateur "= valeur"
;
- Mot de passe "= valeur"
;
- Il y en a d'autres…
Fin de la classe.
|
class
BDD1 extends BDD {
var $Host = "hhhhhhhh";
var $Database = "dbdbdbdb";
var $User = "uuuuuuu";
var $Password = "pwpwpwpw";..
|
Instanciation
Pour exploiter
cette classe, cela dépend des langages mais c'est souvent " new "
qui est utilisé. En PHP ce sera " $curseur =
new BDD1; ". On crée un objet, on a initialisé une instance
de la classe, on a réalisé une instanciation de la classe. Les données
sont privatives d'une instance.
On accédera alors aux propriétés : "
$hostCourant = $curseur->Host; " ;
et aux méthodes par (ligne suivante de la requête) "
$qcurseur->next_record(); ".
Comme
on peut réaliser autant d'instances d'une classe que l'on veut, il devient
évident que dans notre exemple on peut manipuler autant de requêtes
SQL dont on a besoin et ce en parallèle sans se mélanger les pinceaux..
Avec des
méthodes aussi puissantes que cela, " programmer des boucles imbriquées
sur différentes requêtes en cascade " devient (presque) un jeu
d'enfants, mais ils préfèrent la console
<< 1ère
partie
Daniel
Lucazeau
Ajornet.com
Chef de projet Internet
Développeur informatique
Tous
droits réservés - Reproduction même partielle interdite sans
autorisation préalable
|