Ressources pour les bases de la POO / Programmation Orientée Objet
Cet article sera plus une liste de liens permettant de servir de support aux cours qu’un véritable article :3 De plus, il nécessite quelques connaissances de base en programmation (variables, fonctions, paninis, etc.). La POO s’organise autour de pas mal de concepts / bonnes pratiques, et en voici une liste non-exhaustive organisée permettant de rentrer dedans tranquilou. Je limiterai ma discussion personnelle au minimum, parce que le sujet a déjà été abordé 100k fois e bien meilleure manière (par exemple openclassroom en texte ou grafikart en vidéo). Une liste de liens vers des vidéos est dispo en fin d’articles si vous n’aimez pas lire.
Grands principes de la POO
La Programmation Orientée Objet est une méthode de programmation visant à structurer et compartimenter son code afin de le rendre plus fiable, réutilisable, améliorable et également plus facile à comprendre. Grosso merdo, les morceaux de code sont regroupés par entités, en fonction de leur thème et/ou utilité. Bref, go dans le gras et les vrais termes.
Vocabulaire, classes & instanciation
La base de la POO est l’utilisation de classes et d’instances : Une classe sera un modèle d’objet (Théorie pure, non utilisable en pratique, qui définit un ensemble de règles et de contraintes). Une instance sera la concrétisation de cette classe (Objet utilisable dans le code, interactif). On peut créer plusieurs instances à partir d’une même classe.
Par exemple, une classe Voiture va définir qu’une voiture possède 4 roues. Une instance de Voiture peut-être une Ferrari rouge ou une Peugeot bleue (en fonction des budgets). On ne peut pas monter dans le concept de Voiture, mais on peut aller faire un tour soit en Ferrari soit en Peugeot ; les deux sont deux instances différentes, mais sont toutes deux des voitures.. ..En (très) gros
Un peu plus de vocabulaire : Une propriété est une variable dédiée à une classe.
Une méthode est une fonction dédiée à une classe. L’instanciation est le fait de créer une nouvelle instance à partir d’une classe.
Le constructeur est une fonction appelée lors de la création de l’instance.
On peut l’utiliser par exemple pour initialiser les propriétés de l’instance (~lors de la création de la Ferrari, on lui dit que sa couleur est rouge).
this (~= celui-ci) est un mot clé spécifique qui fait référence à l’instance, à l’intérieur de la définition de la classe ; C’est le moyen concret de cibler l’instance concernée lorsque l’on code la classe.
Documenter
Bonne pratique : commenter utile avec la syntaxe de phpdoc (générateur de documentation à partir des commentaires, compatible avec composer) est recommandé.
Faites les systématiquement, prenez directement de bonnes habitudes. Il existe beaucoup d’exemples, mais je recommande la vidéo dédiée de grafikart.
—
Les principes suivants introduisent de nouveaux concepts & ainsi que des bonnes pratiques liées à la POO :
Encapsulation & Visibilité / private, protected, public
- Private : accessible uniquement depuis l’intérieur de la classe
- Protected : +1 y compris classes qui en hérite
- Public : Accessible depuis l’exterieur (instances, etc.)
Accesseurs
Méthodes publiques permettant d’accéder/de modifier la propriété privée d’une classe (getNom(), setNom()). Peut permettre du contrôle (setter) ou du formattage (getter)
Composition
https://www.synbioz.com/blog/tech/la-composition-a-la-rescousse-de-lheritage Création d’une autre classe, afin de passer une de ses instances en référence à une autre classe. Cela permet de rendre ces deux classes indépendantes (cf. injection de dépendances qui y ressemble)
Agrégation
http://www.lechatcode.com/architecture/agregation-et-composition-cest-quoi/
Héritage
https://fr.wikipedia.org/wiki/H%C3%A9ritage_(informatique) https://www.grafikart.fr/tutoriels/heritage-extends-560 Rappel encapsulation : protected.
Différence entre héritage et composition
Via héritage, les deux classes sont liées (extends). Via composition, elles sont indépendantes (l’une utilise une instance de l’autre, recommandé : en la passant en paramètre, cf. SOLID).
Abstraction
Classe héritée qui n’est pas vouée à être instanciée, elle sert uniquement à structurer ses classes enfant.
Surcharge
Remplacement dans un enfant d’une propriété ou méthode parente.
Polymorphisme
https://fr.wikibooks.org/wiki/Programmation/Programmation_orient%C3%A9e_objet/Polymorphisme :D
Abstraction pure (interface)
Différence interface/classe abstraite
https://www.pierre-giraud.com/php-mysql/cours-complet/php-poo-interfaces.php
Méthodes magiques
https://www.php.net/manual/fr/language.oop5.magic.php
https://www.pierre-giraud.com/php-mysql/cours-complet/php-poo-methodes-magiques.php
Liens vidéos
Pour les personnes qui apprécient moins la lecture, voici une liste de personnes/tutoriaux vidéos
- Grafikart / Tutoriaux POO, en php, en français / Introduction à la POO par un des meilleurs formateurs francophone, testé & approuvé.
- Xavier blanc / Playlist Introduction à la POO / Tout pareil ^
- Lior Chamla, introduction de la POO / Pub copinage du collègue 3WA qui m’a bien soutenu, et en plus c’vraiment bieng
- Martine Bellaïche / Playlist de concepts POO / Vidéos dédiées à certains concepts de la POO. J’en ai regardé une paire c’est pas déconnant.
Je vous recommande de les regarder en vitesse x1.5 ou x2 si vous arrivez à suivre, et ensuite de reproduire les exercices, et expérimenter. Grafikart propose des TP pré-préparés qui sont bien cool.
Poursuivre l’apprentissage
Découpage des fichiers
Donner a chaque classe son propre fichier ; Par exemple pour la classe Personnage, stocker la classe (et uniquement la classe) dans le fichier Personnage.php.
Eviter les préfixes / suffixes, afin de rester simple et d’être compatible avec composer (ci-dessous).
Vous pouvez également regrouper vos ensembles de classes similaires dans des dossiers.
Namespacing
https://openclassrooms.com/fr/courses/1217456-les-espaces-de-noms-en-php
Les espaces de noms, ou namespacing, permettent principalement d’éviter les conflits en cas de noms similaires (ce qui peut arriver assez vite lorsque nous utilisons des librairies tierces).
Afin de faciliter la transition avec l’autoload de composer, voici quelques recommandations :
- Le nom du fichier contenant la classe doit être identique au nom du fichier le contenant
- Le namespace utilisé doit être identique à l’arborescence de dossiers dans lequel est située la classe
Attention, ces règles ne sont pas absolues en ce qui concerne le fonctionnement classique du namespace PHP classique.
Mise en place de l’environnement de développement
Autoload & composer
https://www.grafikart.fr/tutoriels/composer-480
Installation de composer
Console
> Se déplacer dans le dossier du projet (ls & cd)
> curl -sS https://getcomposer.org/installer | php
> composer init
> (remplir les questions)
> php composer.phar install
Installation de l’autoload
Rajouter au fichier composer.json (de manière intélligente) « autoload »: { « psr-4″ : {« App\\ » : « App« } } Dans ce cas, cela correspond au dossier App/ à la racine du projet Puis mettre à jour le projet à partir de la nouvelle conf
> php composer.phar install
Utilisation de l’autoload Ne pas oublier de require le fichier autoload dans votre index.php
<?php
require "vendor/autoload.php";
Vous pouvez ensuite utiliser vos classes via le mot clé use en php :
use \App\Helper\Tayste;
Tayste::hey(); (Le fichier Tayste.php se situe dans App/Helper/Tayste.php
<?php namespace App\Helper;
class Tayste { static function hey(){ echo "hello wesh"; } } ?>
Archive complète : test composer pas besoin d’install Test de composer avance avec archi avancee et heritage et alias
Plugins Atom
Dans Atom >Préférences > Install packages Ctrl + Shift + P
https://atom.io/packages/php-ide-serenata
https://atom.io/packages/atom-beautify / https://github.com/pfefferle/atom-php-cs-fixer (Need installation php-cs-fixer globale, KO sur les postes 3wa :/ )
linter file-icons https://atom.io/packages/php-hyperclick
https://atom.io/packages/atom-autocomplete-php
project manager https://atom.io/packages/docblockr
Règles S.O.L.I.D
Lien de référence SOLID, en anglais, codé en C# mais pertinent et abordable. Pour les exercices, les énoncés sont sur Moodle (reprendre ceux fait par Lior) :
- Faire refaire les diagrammes de base
- Expliquer les points faibles
- Faire ensemble le diagramme correct, qui respecte la règle
- Faire le code
Design patterns
Les Design Patterns sont des méthodes d’organisation du code, qui permet de garder un code clair et concis, mais également d’éviter des problèmes courants lors de la création de code plus « classique ».
Je recommande la page dédiée d’openclassroom pour commencer, qui passe en revue les principaux design pattern, en français, avec des exemples concrets.
Ensuite, la référence reste Refactoring Guru, le meilleur site pour apprendre les Design Patterns, en anglais.
Recommandations, a regarder dans l’ordre :
- Observer
- Decorator
- Singleton
- Factory
Tags: liens, liste, objet, orientée, php, poo, programmation, références
Commentaires récents