coincoins

PHP oo rapido

Prog OO

Prérequis : La lecture dans une base de données et la modélisation des données sont incontournables.

Un objet

Définition

Un objet est quelque chose que peut gérer un programme

  • une variable
  • un concept
  • un ensemble de données regroupées sous un nom

 

Il était une fois ... mon nom est Personne

Au début était la variable. Euh c'est toujours le cas.

Ensuite, on a imaginer des données regroupées dans des tableaux :

Pour une association, une personne adhérente est composée de :

  • un nom,
  • un prénom,
  • une date de naissance,
  • un cotisation payée,
  • une date de paiement de cotisation,
  • etc...

Problème :

Comment stocker ensemble toutes les données appartenant à une même personné ?

Solutions tableau

1, le tableau simple

Au début, il n'y avait qu'un tableau pour stocker tout ça :

<?php
	// définition d'une personne
	$unePersonne = array("leNom", "lePrenom", "2000/11/12", "payé", "2023/11/12");
	// ajout d'une personne dans la liste
	$lesPersonnes[] = $unePersonne;
 
	// renseigner la date de paiement de la cotisation de la personne n°3
	$lesPersonnes[3][4]= "2023/12/11";
 
	// afficher le nom et prénom de la personne n°3
	echo "personne n°3= ".$lesPersonnes[3][0]." ".$lesPersonnes[3][1];
?>

C'est un peu sec, non ?

2, le tableau associatif

Ensuite, on pouvait utiliser des indices alphabétiques au lieu de numérique :

<?php
	// définition d'une personne
	$unePersonne = array(
	   'nom'      =>"leNom", 
	   'prenom'   => "lePrenom", 
	   'datNaiss' => "2000/11/12", 
	   'cotis'    => "payé", 
	   'datCotis' => "2023/11/12"
	 );
	// ajout d'une personne dans la liste
	$lesPersonnes[] = $unePersonne;
 
	// renseigner la date de paiement de la cotisation de la personne n°3
	$lesPersonnes[3]['datCotis']= "2023/12/11";
 
	// afficher le nom et prénom de la personne n°3
	echo "personne n°3= ".$lesPersonnes[3]['nom']." ".$lesPersonnes[3]['prenom'];
?>

C'est un peu un peu mieux, mais on reste sur sa faim en termes de facilité de lecture ...

Solution 2 : les structures de données

1, la structure de données du C

Et puis le C a inventé la structure de donnée ou type structuré (code aproximatif, le type date n'existe pas en tant que tel) :

 
	// définition d'une personne
	struct Personne
	{
	   char nom[50];
	   char pnom[50];
	   Date dateNaiss;
	   bool cotisPayee;
	   Date cotisDate;
	};
 
	unePersonne = struct Personne;
	   unePersonne.nom        = "leNom";
	   unePersonne.prenom     = "lePrenom";
	   unePersonne.datNaiss   = "2000/11/12";
	   unePersonne.cotisPayee = "payé";
	   unePersonne.cotisDate  = "2023/11/12";
	 );
	// ajout d'une personne dans la liste
	lesPersonnes Personne[];
	lesPersonnes[sizeof(lesPersonnes)+1] = unePersonne;
 
	// renseigner la date de paiement de la cotisation de la personne n°3
	lesPersonnes[3].cotisDate = "2023/12/11";
 
	// afficher le nom et prénom de la personne n°3
	printf("personne n°3= %s %s", lesPersonnes[3].nom, lesPersonnes[3].prenom);
?>

Les types structurés c'est pas mal. On est assez proche de la prog objet.

Cependant, faire des calculs automatisés, c'est difficilement faisable sans être explicite. il manque un truc

Et si on mettait des fonctions dans le type structuré ?

2, la naissance de l'objet

Et voilà, on y arrive enfin. on groupe toutes les propriétés et les opérations de l'objet dans un conteneur nommé classe et le tour est joué.

Le seul défaut est que pour faire propre, on place la définition de la classe dans un fichier et son utilisation dans un autre.

Classe Personne
<?php
	class Personne
	{
	// attributes
	   private $nom;
	   private $pnom;
	   private $dateNaiss;
	   private $cotisPayee;
	   private $cotisDate;
 
	// setters : comment remplir les attributs
	   public setNom($nom) {$this->nom=$nom;}
	   public setPnom($pnom) {$this->pnom=$pnom;}
	   public setDNaiss($date) {$this->dateNaiss=$date;}
 
	// getters : obtenir le contenu des attributs
	   public getNom($nom) {$this->nom=$nom;}
	   public getPnom($pnom) {$this->pnom=$pnom;}
	   public getDNaiss($date) {$this->dateNaiss=$date;}
 
	// methods : Opérations faisables avec l'objet
	   public validerCotisation() {
	      $this->cotisPayee= true;
	      $this->cotisDate = date("Y/m/d");
	   }
 
	   public getNomPnom() {
	      return 	$this.nom." ".$this.prenom;
	   }
 
	   public __constructor($nom, $pnom, $dNaiss){
	      $this->nom=$nom;
	      $this->pnom=$pnom;
	      $this->dateNaiss=$date;
	   }   
	}
?>

créer et afficher une personne
<?php
	// créer une personne
	unePersonne = new Personne("leNom", "lePrenom", "2023/11/12");
 
	// ajout d'une personne dans la liste des personnes
	lesPersonnes Personne[];
	lesPersonnes[sizeof(lesPersonnes)+1] = unePersonne;
 
	// renseigner la date de paiement de la cotisation de la personne n°3
	lesPersonnes[3]->validerCotisation();
 
	// afficher le nom et prénom de la personne n°3
	echo "personne n°3= " + lesPersonnes[3].getNomPnom();
?>

Prog objet

Et la suite?

La suite ? Désolé, ce n'est pas l'objet de ce site. Aller la voir sur internet, il y a plein de site sur :

  • La modélisation UML en général
  • Le diagramme de classes en particulier
  • La programmation objet
  • Etc.
    • Teasing, teasing, quand tu nous tiens .... mouaah ha ha ha ha ha

      Ce qu'on peut quand-même dire

      Ce qui est certain, c'est qu'il existe une relation assez étroite entre les tables de la base de données et les objets gérés par une application.

      Par exemple, dans l'application du fabLab Atelier (voir les autres cours), vous avez les tables suivantes :

      TableRôle
      Adhérent Les personnes qui adhèrent à l'association
      Cotisation Les validations des cotisations
      Materiel Le matériel présent dans le FabLab
      Réserver Les réservations/location de matériels, effectuées par les adhérents

Quelques classes objet

Classe d'objet géré

Classe Matériel
Classe Personne

Classes des gestionnaires asosciés

Gestionnaire de Matériel
Gestionnaire de Personne