5. L’INFORMATIQUE PREND SON ESSOR
FIN DES ANNÉES 50
• ALGOL, Fortan, LISP
• Procédures, structures de données
• Aucune inter-opérabilité entre machines
• L’informatique quitte le laboratoire pour l’entreprise
• Nouveaux problèmes: Simulations, intelligence artificielle, etc
6. SIMULA : NYGAARD ET DAHL 1962 À 1967
L’IDÉE DE GÉNIES
• Modélisation du réel
• Chaque unité de code est un processus indépendant
• Donnée + comportement (règle d’opération)
7. SIMILITUDES ET LA VARIATIONS DE STRUCTURES DE DONNÉES
LES CLASSE D’ENREGISTREMENT DE HOARE
• Sir Tony Hoare en 1965 décrit un système de
classement de structures de données basé sur
des classes et des sous-classes
• Invention de la notion d’héritage
• Ne considère pas les comportements,
uniquement les données
8. SIMULA + CLASSES DE HOARE
SIMULA 67
• Classe
• Héritage
• Surcharge
9. LE « PÈRE » DU LANGAGE OBJET MODERNE
ALAN KAY
• Fait la synthèse d’idées dans le monde de
l’informatique des années 60 : ARPANet,
LOGO, SketchPad, Simula…
• Il sera le premier à donner une définition
du langage « objet »
• Il est à l’origine du langage SMALLTALK en
1971
10. SIMULA +++
LANGAGE OBJET SELON ALAN KAY
• Tout est objet, classe, processus, etc..
• Encapsulation
• Les objets interagissent via des messages
• Chaque message reçu par un objet correspondant à une
« méthode » de son code
12. LA CONTRIBUTION DU GOF 1994
DESIGN PATTERNS
• Des motifs se répètent dans le code « objet » pour répondre à
des problèmes eux-même récurrents
• C’est un recueil de motifs rédigé par Erich Gamma,Richard Helm,
Ralph Johnson et John Vlissides
• Ces design patterns permettent de trouver rapidement une
architecture adaptée à un problème courant
13. ROBERT C MARTIN - 1995
PRINCIPES DE CONCEPTION OBJET
• Oncle Bob apport deux idées fondamentales :
• Les « Rotten design » qui liste les principaux défauts des
applications programmées en objet
• Les principes « SOLID » qui sont une liste de bonnes pratiques
à respecter pour limiter l’occurence des « Rotten design »
14. TOUT ÇÀ POUR ÇÀ…
La diapo suivante peu choquer les plus fragiles…
15. FRAMEWORKS, ETC.
• On s’en fou, on fait du Symfony….
• Je te fais en cinq minutes avec Expressive…
• J’ai déjà tout dans Laravel…
• Hop un petit composer update et roule ma poule…
18. PRINCIPE DE BASE
TELL DON’T ASK
• Encapsulation : on ne doit pas connaitre l’état d’un autre objet
• L’objet qui agit est celui qui possède les données
• Les objets se commandent entre-eux.
« Demander au balai de faire le
ménage »
20. INTÉRÊTS / PROMESSES DE LA POE
• L’état des objets reste masqué un maximum
• On n’a pas à traiter les retours. Moins de boulot.
• Moins d’erreur due au typage des retours de méthodes
• Beaucoup plus facile à tester car les « mocks » ne retournent rien.
• Moins de couplages.
• Celui qui réalise l’action est celui qui possède les données.
21. RÉSERVER UNE CHAMBRE DANS UN HÔTEL
EXEMPLE EN PHP
provideRoomTo(sophie,’M’,3)
orderRoomTo(hotel)
101 / S / 1302 / M / 3 267 / L / 2
setRoomNumber(302)
bookIfSuitable(‘M’,3)
bookIfSuitable(‘M’,3)
bookIfSuitable(‘M’,3)
bookRoom(302)
22. L’IDÉE DE BASE
UN PEU DE CODE
$sophie = new Customer(Room::SIZE_M,3);
$ibis = new Hotel();
$sophie->orderRoomTo($ibis);
23. CUSTOMER
UN PEU DE CODE
class Customer
{
protected $roomSize;
protected $minFloor;
protected $hotel;
protected $roomNumber;
public function orderRoomTo(Hotel $hotel)
{
$this->hotel = $hotel;
$hotel->provideRoomTo($this,$this->roomSize,$this->minFloor);
return $this;
}
public function setRoomNumber(int $number)
{
$this->roomNumber = $number;
return $this;
}
}
24. HOTEL
UN PEU DE CODE
class Hotel
{
protected $rooms = [];
protected $currentCustomer;
public function provideRoomTo(Customer $customer, string $roomSize, int $minFloor)
{
$this->currentCustomer = $customer;
foreach ($this->rooms as $room)
{
$room->bookIfSuitable($roomSize,$minFloor);
}
return $this;
}
public function bookRoom(int $number)
{
$room = $this->rooms[$number];
$room->book();
$this->currentCustomer->setRoomNumber($number);
return $this;
}
}
25. ROOM
UN PEU DE CODE
class Room
{
const SIZE_S = 's'; const SIZE_M = ‘m'; const SIZE_L = ‘l';
protected $number; protected $size; protected $floor;
protected $available = true; protected $hotel;
public function bookIfSuitable(string $roomSize, int $minFloor)
{
if ( ! $this->available) return $this;
if ($this->floor < $minFloor) return $this;
if ($this->size != $roomSize) return $this;
$this->hotel->bookRoom($this->number);
return $this;
}
public function book()
{
$this->available = false; return $this;
}
}
26. POUR UNE VIE DE DÉVELOPPEUR MEILLEURE
CONCLUSIONS
• Revenez à l’essence de l’objet
• KISS
• Méditez sur les textes des fondateurs
• Faites du sport
• Mangez sain
• Souriez !
• Restez positifs !