SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
LANGAGE OBJET
PASSÉ, 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

Contenu connexe

Similaire à Language objet : passé, présent et futur

SEO et Intelligence Artificielle
SEO et Intelligence ArtificielleSEO et Intelligence Artificielle
SEO et Intelligence ArtificielleLVLUP
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?CGI Québec Formation
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAssociation Agile Nantes
 
La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015Sebastien Gioria
 
Api - mix it 2013
Api - mix it 2013Api - mix it 2013
Api - mix it 2013Eric D.
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgileAgile Tour 2009 Québec
 
I-et-Simulation jfjduzizuzgeyehebeuabzjzjzh.pdf
I-et-Simulation jfjduzizuzgeyehebeuabzjzjzh.pdfI-et-Simulation jfjduzizuzgeyehebeuabzjzjzh.pdf
I-et-Simulation jfjduzizuzgeyehebeuabzjzjzh.pdflauriandjikam
 
Fabien Bezagu : Présentation XP et DDD
Fabien Bezagu : Présentation XP et DDDFabien Bezagu : Présentation XP et DDD
Fabien Bezagu : Présentation XP et DDDagiletourbordeaux
 
Sortir de l’ère des héros - HumanTalks Paris Mars 2017
Sortir de l’ère des héros - HumanTalks Paris Mars 2017Sortir de l’ère des héros - HumanTalks Paris Mars 2017
Sortir de l’ère des héros - HumanTalks Paris Mars 2017Jean-Pierre Lambert
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 
Challenges du recrutement pour un editeur de logiciel libre
Challenges du recrutement pour un editeur de logiciel libreChallenges du recrutement pour un editeur de logiciel libre
Challenges du recrutement pour un editeur de logiciel libreStefane Fermigier
 
Comment les plateformes de Data Science métamorphosent le SEO ?
Comment les plateformes de Data Science métamorphosent le SEO ?Comment les plateformes de Data Science métamorphosent le SEO ?
Comment les plateformes de Data Science métamorphosent le SEO ?Vincent Terrasi
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Normandie Web Xperts
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015gaelmetais
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)French Scrum User Group
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)Damien Seguy
 
Intelligence Artificielle et Data Science | Alexandre Termier de l'Inria-Iris...
Intelligence Artificielle et Data Science | Alexandre Termier de l'Inria-Iris...Intelligence Artificielle et Data Science | Alexandre Termier de l'Inria-Iris...
Intelligence Artificielle et Data Science | Alexandre Termier de l'Inria-Iris...Rennes Atalante
 

Similaire à Language objet : passé, présent et futur (20)

SEO et Intelligence Artificielle
SEO et Intelligence ArtificielleSEO et Intelligence Artificielle
SEO et Intelligence Artificielle
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
 
La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015
 
Api - mix it 2013
Api - mix it 2013Api - mix it 2013
Api - mix it 2013
 
Pratiques de développement pour équipes Agile
Pratiques de développement pour équipes AgilePratiques de développement pour équipes Agile
Pratiques de développement pour équipes Agile
 
I-et-Simulation jfjduzizuzgeyehebeuabzjzjzh.pdf
I-et-Simulation jfjduzizuzgeyehebeuabzjzjzh.pdfI-et-Simulation jfjduzizuzgeyehebeuabzjzjzh.pdf
I-et-Simulation jfjduzizuzgeyehebeuabzjzjzh.pdf
 
Fabien Bezagu : Présentation XP et DDD
Fabien Bezagu : Présentation XP et DDDFabien Bezagu : Présentation XP et DDD
Fabien Bezagu : Présentation XP et DDD
 
Sortir de l’ère des héros - HumanTalks Paris Mars 2017
Sortir de l’ère des héros - HumanTalks Paris Mars 2017Sortir de l’ère des héros - HumanTalks Paris Mars 2017
Sortir de l’ère des héros - HumanTalks Paris Mars 2017
 
Aiguisez votre c#
Aiguisez votre c#Aiguisez votre c#
Aiguisez votre c#
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
Challenges du recrutement pour un editeur de logiciel libre
Challenges du recrutement pour un editeur de logiciel libreChallenges du recrutement pour un editeur de logiciel libre
Challenges du recrutement pour un editeur de logiciel libre
 
Comment les plateformes de Data Science métamorphosent le SEO ?
Comment les plateformes de Data Science métamorphosent le SEO ?Comment les plateformes de Data Science métamorphosent le SEO ?
Comment les plateformes de Data Science métamorphosent le SEO ?
 
Ns algo 3
Ns algo 3Ns algo 3
Ns algo 3
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)
 
2 tid conception-projet-cours1
2 tid conception-projet-cours12 tid conception-projet-cours1
2 tid conception-projet-cours1
 
Intelligence Artificielle et Data Science | Alexandre Termier de l'Inria-Iris...
Intelligence Artificielle et Data Science | Alexandre Termier de l'Inria-Iris...Intelligence Artificielle et Data Science | Alexandre Termier de l'Inria-Iris...
Intelligence Artificielle et Data Science | Alexandre Termier de l'Inria-Iris...
 

Language objet : passé, présent et futur

  • 2. SOPHIE BEAUPUIS A MON PROPOS • CTO chez « Ma résidence » • @so_php_ie • Je suis passé par:
  • 3. 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.
  • 4. LES PRÉCURSEURS LES RACINES DU LANGAGE OBJET
  • 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…
  • 16. PROGRAMMATION ORIENTÉE À L’EST UNE IDÉE POUR LE FUTUR : POE
  • 17. NON, ORIENTÉ « RETOUR » ON PROGRAMME À L’OUEST ? DEMO avec des humains, stylo et papier
  • 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 »
  • 19. TELL, DON’T ASK ON REPRENDS…. DEMO avec des humains, stylo et papier
  • 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 !
  • 27. MERCI ! ET TOUT DOIT FINIR PAR UN