Poo programmation orientee objet masamune

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

Wiki encapsulation

  • 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

El wiki

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 😀

Abstraction pure (interface)

https://fr.wikibooks.org/wiki/Programmation/Programmation_orient%C3%A9e_objet/Classes_abstraites_et_interfaces

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 🙂

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

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) :

  1. Faire refaire les diagrammes de base
  2. Expliquer les points faibles
  3. Faire ensemble le diagramme correct, qui respecte la règle
  4. 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 patterns, 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. Edit 2023 : 🥰 Toujours une über référence

Recommandations, a regarder dans l’ordre :

  • Observer
  • Decorator
  • Singleton
  • Factory

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *