Bonjour,

jusqu'à présent, je m'étais cantonné à des réalisations très simples en objet (pas forcément simples dans le corps même de la classe mais simples en ce sens qui s'agissait de projets comportant généralement une ou deux classes n'ayant pas besoin de communiquer entre elles, tout le reste étant codé en procédural avec accès direct aux attributs et fonctions sans setters et getters par exemple).

Afin de m'imprégner un peu mieux de la logique objet, je souhaite développer à titre didactique une petite appli faisant par exemple office de correcteur grammatical et j'aimerai recueillir l'avis de gens ayant une certaine experience de la programmation objet sur mon ébauche de code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
class Arrangeur {
 
  private $texte; // type chaine
  private $mots;  // type tableau d'instances
 
  function __construct($texte) {
    $this->setContents($texte);
    $this->parseTexte();
    $this->getArrangement();
  }
 
  private function setContents($texte) {
    $this->texte = $texte;
  }
 
  private function parseTexte(){
    $tabMots = explode(' ', $this->texte);
    $nb = count($tabMots);
    for ($i=0; $i<$nb; $i++) {
      $this->mots[$i] = new Mot($tabMots[$i], $i);
    }
  }
 
  private function getArrangement() {
    $nb = $this->mots[0]->getNbCollection();
    for ($i=0; $i<$nb; $i++) {
      echo $this->mots[$i]->getSource();
      // fonctions de traitement à définir
    }
  }
 
}
 
class Mot {
 
  private $ordre;  // type int
  private $source;  // type chaine
  static $motsPhrase = 0;
 
  function __construct($texte, $ordre) {
    $this->setSource($texte);
    $this->setOrdre($ordre);
    self::$motsPhrase++;
  }
 
  private function setSource($texte){
    $this->source = $texte;
  }
 
  public function getSource(){
    return $this->source;
  }
 
  private function setOrdre($i){
    $this->ordre = $i;
  }
 
  public function getNbCollection() {
    return self::$motsPhrase;
  }
 
}
 
 
 
$texte = "il était une fois";
$traitement = new Arrangeur($texte);
Bon pour le moment, à part enlever tous les espaces du texte "il était une fois" et réafficher tous les mots collés les uns aux autres, ce code ne fait rien d'autre on est d'accord

Mais est ce que le probleme de conception semble correctement posé ?
Sachant que la méthode parseTexte de la classe Arrangeur sera ensuite enrichie
et que la méthode getArrangement de cette même classe ne se contentera pas d'afficher le texte mais le traitera au travers d'appels à un certains nombres d'autres méthodes (checkPluriel, checkConjugaison, etc...) qui restent à définir.

Par exemple, le $nb = $this->mots[0]->getNbCollection(); de ma méthode getArrangement me semble laid pour avoir accès à l'attribut statique de ma classe Mot mais je me voyais mal faire hériter la classe Arrangeur de la classe Mot pour y avoir acces à travers parent::

Merci de vos retours et de vos remarques.