language objet : passé, présent et futur

28
LANGAGE OBJET PASSÉ, PRÉSENT, FUTUR DU

Upload: sophie-beaupuis

Post on 29-Jan-2018

261 views

Category:

Internet


0 download

TRANSCRIPT

LANGAGE OBJETPASSÉ, PRÉSENT, FUTUR DU

SOPHIE BEAUPUIS

A MON PROPOS

• CTO chez « Ma résidence »

• @so_php_ie

• Je suis passé par:

VOUS ALLEZ BRILLER !

AVANT TOUT CHOSE

J’ai besoin de 4 volontaires pour une expérience hors du commun avec du papier et un stylo.

LES PRÉCURSEURS LES RACINES DU LANGAGE OBJET

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

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)

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

SIMULA + CLASSES DE HOARE

SIMULA 67

• Classe

• Héritage

• Surcharge

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

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

CONTRIBUTIONS CONTEMPORAINES LE PRÉSENT

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

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 »

TOUT ÇÀ POUR ÇÀ…

La diapo suivante peu choquer les plus fragiles…

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…

PROGRAMMATION ORIENTÉE À L’EST UNE IDÉE POUR LE FUTUR : POE

NON, ORIENTÉ « RETOUR »

ON PROGRAMME À L’OUEST ?

DEMO avec des humains, stylo et papier

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 »

TELL, DON’T ASK

ON REPRENDS….

DEMO avec des humains, stylo et papier

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.

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)

L’IDÉE DE BASE

UN PEU DE CODE

$sophie = new Customer(Room::SIZE_M,3);$ibis = new Hotel();$sophie->orderRoomTo($ibis);

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; }}

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; }

}

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; }}

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 !

MERCI !ET TOUT DOIT FINIR PAR UN

QUESTIONS ?AVEZ-VOUS DES