Services webmasters
Partenaires
Jeux concours gratuits
 
Index des fonctions
<<<
Introduction Exemples
>>>

7.71 Aggregation d'objets/Composition de fonctions
7 Index des fonctions
 Manuel PHP

->Introduction
Exemples
aggregate_info
aggregate_methods_by_list
aggregate_methods_by_regexp
aggregate_methods
aggregate_properties_by_list
aggregate_properties_by_regexp
aggregate_properties
aggregate
aggregation_info
deaggregate

7.71.1 Introduction

En programmation objet, il est courant de rencontrer la combinaison de classes simples (et de leurs instances) en une classe plus complexe. C'est une strategie habile pour mettre en place des objets complexes, et des hierarchies d'objets. Ce système peut fonctionne comme une alternative dynamique à l'héritage multiple. Il y a deux solutions pour combiner deux classes, suivant la relation de leurs éléments constitutifs : L' Association et l' Aggregation .

Une Association est une combinaison d'éléments construits indépendamment et visibles à l'extérieur. Lorsque nous associons des classes ou objets, chacun garde une référence à l'autre partie de l'association. Lorsque nous associons des classes statiquement, une classe contient une référence à une instance de l'autre classe. Par exemple :
Association de classes

<?php
class DateTime {
   
   function
DateTime() {
       
// constructeur vide
   
}

   function
now() {
       return
date("Y-m-d H:i:s");
   }
}

class
Report {
   var
$_dt = new DateTime();
   
// autres propriétés ...

   
function Report() {
       
// initialisation du code ...
   
}

   function
generateReport() {
       
$dateTime = $_dt->now();
       
// autre code
   
}

   
// autres méthodes ...
}

$rep = new Report();
?>
Nous pouvons aussi associer des instances dynamiquement, en passant une référence au constructeur (ou par une autre méthode), ce qui permet de gérer dynamiquement l'association entre les objets. Nous allons modifier l'exemple ci-dessus pour illustrer ce point :
Association d'objets

<?php
class DateTime {
   
// identique au précédent exemple
}

class
DateTimePlus {
   var
$_format;
   
   function
DateTimePlus($format="Y-m-d H:i:s") {
       
$this->_format = $format;
   }

   function
now() {
       return
date($this->_format);
   }
}

class
Report {
   var
$_dt;    // Nous allons garder la référence à DateTime ici
   // autre propriétés
  
   
function Report() {
       
// initialisation
   
}

   function
setDateTime(&$dt) {
       
$this->_dt =& $dt;
   }

   function
generateReport() {
       
$dateTime = $this->_dt->now();
       
// autre code ...
   
}

   
// autres méthodes ...
}

$rep = new Report();
$dt = new DateTime();
$dtp = new DateTimePlus("l, F j, Y (h:i:s a, T)");

// Génératino du rapport avec une simple date
$rep->setDateTime(&$dt);
();
// sauvegarde pour affichage dans la base
// ... etc ...
?>

L' Aggregation , d'un autre coté, implique l'encapsulation et le masquage des parties de la combinaison. Nous pouvons aggréger des classes en utilisant une méthode statique, grâce aux sous-classes (mais PHP ne supporte pas bien les sous classes), et dans ce cas, la définition de la classe aggrégée n'est pas accessible, sauf via les méthodes de la classe contenant. L'aggregation d'instances (aggrégation d'objets) implique la création dynamique de sous-objets à l'intérieur d'un autre objet, et dans le même temps, l'extension des capacités de l'objet principal (en terme de méthodes accessibles).

L'aggrégation d'object est une méthode naturelle pour représenter des relation de type tout-partie (par exemple, une molécule est une aggrégation d'atomes), ou bien peut être utilisée pour obtenir un effet équivalent à l'héritage multiple, sans avoir à lier plusieurs classes et leurs interfaces. En fait, les aggrégations d'objets sont plus souples, car nous pouvons alors sélectionner les méthodes et les propriétés qui sont transmises à l'objet aggrégé.

<< Introduction >>
Index des fonctions Aggregation d'objets/Composition de fonctions Exemples
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -