Introduction Objet (PDF)
Document Details
Uploaded by GlisteningEpilogue6125
S. Cherrier
Tags
Summary
This document provides a concise introduction to object-oriented programming concepts, including methods, attributes, classes, and objects, as well as encapsulation, delegation, constructors, and destructors. It also delves into object-oriented programming in PHP and Python.
Full Transcript
Introduction Objet Quizz ! Méthode, attributs, classe et objet Encapsulation, délégation Getter, setter, constructeur, destructeur Héritage, polymorphisme Surcharge, 1 Approche Objet Affectation plu...
Introduction Objet Quizz ! Méthode, attributs, classe et objet Encapsulation, délégation Getter, setter, constructeur, destructeur Héritage, polymorphisme Surcharge, 1 Approche Objet Affectation plus claire du rôle de chaque élément Intégration du code et des données (on parle d’encapsulation) Attribution de responsabilités mieux définies Permet une meilleure collaboration entre programmeurs Offre des facilités d’intégration des codes entre eux S. Cherrier 2 Programmation Objet Objet1 Programme principal (contient des données et les Utilise les Utilise traitements Objet3 services services offerts associés) par les objets services crée et supprime des objets Objet2 Ut e Utilis ilis services Les données sont encapsulées e dans l'objet. C'est plus cohérent. Les traitements peuvent évoluer, les contenus aussi, sans remettre l'équilibre de l'ensemble en cause. S. Cherrier 3 Classes et objets S. Cherrier 4 Élément constitutif d’un objet Un objet a des attributs (ce sont ses données) Un objet offre des méthodes (des bouts de codes, des services) Tout cela est défini dans la Classe La Classe décrit de façon générique attributs et méthodes Chaque Objet instancié aura sa vie propre S. Cherrier 5 Exemple En php interactif (php -a) php > include('Prof.php'); php > $prof1=new Prof('cherrier',3, 1); php > $prof2 = new Prof('biri',5,2); php > echo "Excusez la violence de ce qui va suivre"; Excusez la violence de ce qui va suivre php > $prof1->attaque($prof2); Prends ça, cherrier (point de vie : 3 ). Tu te manges 2 dans la face ! php > $prof1->attaque($prof2); Prends ça, cherrier (point de vie : 1 ). Tu te manges 2 dans la face ! Tu as disparu, Vermine ! php > S. Cherrier 6 Prof.php S. Cherrier 7 En Python S. Cherrier 8 Le code Python S. Cherrier 9 Bilan : un Objet ! Caractéristiques = Attributs Actions = méthodes Actions particulières : – Création (instanciation) → constructeur – Destruction → destructeur – Descripteur (toString() ) comparateur, identifieur, etc (selon language) S. Cherrier 10 Ce que ça change Une instance (un objet) ENCAPSULE ses propriétés (ses attributs) Accès par notation pointée (souvent, mais → en php) $objet->attribut $objet→méthode() TOUT EST DE LA RESPONSABILITÉ DE L’INSTANCE Comparer 2 choses – Objet chose1.compare(chose2) En php $chose1→compare($chose2) LA RESPONSABILITE DE L’ACTION EST A LA CHARGE de l’OBJET !! (encapsulation, on ne veut pas savoir comment ça marche, on veut le résultat) S. Cherrier 11 CE QUE CA CHANGE VRAIMENT !! Comparer 2 choses – Impératif : compare(chose1, chose2) (le code est extérieur) – (En objet générique) chose1.compare(chose2) – (En php) $chose1→compare($chose2) LA RESPONSABILITÉ DE L’ACTION EST A LA CHARGE de l’OBJET, fournie par lui-même !! (encapsulation, on ne veut pas savoir comment ça marche, on veut le résultat) S. Cherrier 12 Classe en PHP $cnx = new PDO('mysql:host=monge;dbname=test', $user, $pass); $cnx->exec("UPDATE users SET pass='toto'"); S. Cherrier 14 Exemple Objet en Javascript Dans cet exemple, beaucoup d’utilisations d’objets methodes.then().forEach().catch().log() S. Cherrier 15 Concevoir ses Classes Trouver des entités cohérentes (Facture, Joueur Arme, Point et Droite… Attributs de ces objets Fonctionnalités de ces objets Interactions entre objet (et qui fait quoi?) S. Cherrier 16 Les méthodes S. Cherrier 17 Les méthodes Une méthode renvoie (ou pas) un résultat Une méthode prend (ou pas) un ou plusieurs arguments Attention au raisonnement !!! – Intégration de la logique dans l’objet – Objet qui interagit avec autres Objets – Encapsulation de la logique et les données S. Cherrier 18 Les méthodes Bien penser à limiter chaque méthode à une seule fonctionnalité Bien penser en terme Objet Se rendre compte que le « Main » voit de moins en moins de choses : Il DÉLÈGUE. Il faut réduire les RESPONSABILITÉS ! La logique est distribuée dans les Classes ! Facilite l’intégration et le répartition du travail entre programmeurs S. Cherrier 19 Les visibilités S. Cherrier 20 Les visibilités 3 niveaux généralement – Public tout le monde peut accéder – Protected limité aux parents souvent (notion pas encore vue), ou en tous cas pas à tous – Private accès complètement interdit, limité à la Classe S. Cherrier 21 Visibilités Exemple en PHP (cahier des modules, contrôleur des cours) Visibilité des méthodes Les effacements sont protected Une méthode interne est private Les méthodes reçoivent des arguments et retournent des résultats (sauf une méthode ici) S. Cherrier 22 Visibilité : Usage La règle : Les attributs sont privés !!! Si besoin d’accès : Getter() et Setter() Réflexion : quel intérêt de passer par un getter/setter ? (2 réponses!) Adage : « pour vivre heureux, vivons caché » (moins on en montre, mieux c’est) S. Cherrier 23 Les attributs (ou propriétés) S. Cherrier 24 Les attributs Description, données de votre instance Toutes visibilités possible, mais on recommande TOUJOURS privés Toujours écrits en minuscules Sont les constituants des objets (attention, pas de $i par exemple : un compteur de boucle n’est pas spécifique à l’objet) Accessible en interne par $this→nomAttribut (écriture php) Accessible en externe par $nomInstance→nomAttribut (mais qu’est-ce que j’ai dit plus haut ????) S. Cherrier 25 Un objet, de sa naissance à sa disparition S. Cherrier 26 L‘instanciation C’est la création d’un objet à partir de la classe Chaque instance à sa vie propre, offre toutes les fonctionnalités définies dans la classe, mais les appliquera à ses propres attributs Cette instanciation est une méthode spéciale appelée constructeur , définie dans la classe Celui qui instancie le fera avec le mot clé new S. Cherrier 27 Exemple Exemple assez fictif… On a des objets très simple au début, constructeur sans argument Puis des objets de plus en plus complexes ici, le contenu de la classe Conducteur... S. Cherrier 28 Les constructeurs Renvoient une instance Prennent des paramètres Attention, PHP ne sait pas proposer de multiples constructeurs (c’est pourtant pratique) (exemple : si on a une classe Forme, on peut avoir un constructeur : - avec ses coordonnées Avec une autre forme Avec deux formes etc S. Cherrier 29 Le destructeur Pas très utilisé en php Permet principalement de faire du « nettoyage » en mémoire (C++) Peut permettre de lancer des actions (pour par exemple logguer des informations) S. Cherrier 30 Les getters et les setters Méthodes chargées de gérer l’encapsulation des données L’utilisateur (le programmeur) n’accède aux informations de l’objet qu’à travers des méthodes Cela permet de maintenir l’objet dans un état cohérent (pas de valeur impossible) Cache à l’utilisateur l’implémentation réelle (il n’a pas à savoir, et surtout il s’en moque) Spécifique PHP : getter et setter « magiques » S. Cherrier 31 En résumé Une classe sert à fabriquer des objets (des instances) Une classe décrit les attributs (les caractéristiques) de chaque objet, et ses méthodes (ses fonctionnalités) le Constructeur permet la création d’un objet (souvent invoqué par le mot clé new) Un destructeur peut éventuellement décrire les actions à faire à la mort de l’objet Les getters permettent d’accéder aux valeurs des attributs Les setters permettent de les modifier TOUT EST CACHÉ dans L’INSTANCE S. Cherrier 32 QUIZZ Différences entre classe et instance (ou objet) Pourquoi tout est encapsulé (caché) dans l’instance ? Ou est la logique de l’application ? Pourquoi max(objet1, objet2) est « bizarre » ? S. Cherrier 33 En résumé : L'encapsulation Méthodes : Permettent d'implémenter des procédures de vérification et de cacher la véritable implémentation. Limite donc le couplage Principe : ne pas directement travailler avec les attributs Sépare l'interface (publique, accessible...) de l'implémentation (le code, inaccessible et évolutif) 06/09/24 Sylvain Cherrier 34 Partie 2 – Concepts Objets L’héritage, et ses conséquences S. Cherrier 35 L'héritage Deuxième concept associé à la programmation objet : c'est la généralisation/spécialisation. L'héritage permet la construction d'une arborescence de Classes en allant vers une description de plus en plus fine (une spécialisation). Chaque Sous-Classe 'hérite' des caractéristiques de sa (ses) super- Classe(s) (méthodes et attributs), tout en l'étendant (parfois trés peu, parfois beaucoup). 06/09/24 Sylvain Cherrier 36 Transport Maritime Terrestre Aérien Pédalo Hors-bord Trottinette Train ULM Voilier 06/09/24 Sylvain Cherrier 37 L'héritage 2 Écriture élégante (une sous-Classe ne va décrire que ses différences par rapport à ses ancêtres : Code plus court, plus lisible, compact) Permettant un traitement générique (on pourra traiter toutes sortes de sous-Classes différentes pourvu qu'on s'intéresse à leur ancêtre commun et à un attribut/une méthode de l'ancêtre : comportement générique). On dit aussi Type et sous-Type, sous-typage. 06/09/24 Sylvain Cherrier 38 Héritage simple, héritage multiple Selon les langages, une classe peut dériver (hériter) d'une ou de plusieurs super-Classes. Dans le cadre de l'héritage simple, on obtient une arborescence de Classes, ce qui est facile à appréhender. D'autres langages permettent l'héritage multiple (C++) (une classe a plusieurs ancêtres, apportant certains avantages de transversalité, mais compliquant un peu les choses (conflits possibles de noms de méthodes et d'attributs, d'où des comportements plus difficiles à conceptualiser) 06/09/24 Sylvain Cherrier 39 D'autres solutions Certains langages implémentent des solutions Objets différentes Javascript utilise la programmation orientée prototype pour réaliser la conception de nouveaux types d'objets (il n'y a pas de classe). Cela permet d'être plus dynamique Création à la volée de nouveaux types d'objets, changement de la hiérarchie d'héritage en cours d'utilisation... 06/09/24 Sylvain Cherrier 40 Héritage : effets sur les attributs et méthodes 06/09/24 Sylvain Cherrier 41 Héritage simple : Obj. volants Une arborescence de Classes, permettant la gestion des objets Plane volants. _name: string _width: int _created_at : DateTime Généralisation _badge : string fly(): string setBadge(string) : void Spécialisation Propulsion() : string Jetplane Sailplane Propellerplane _nb_motors: int fly() : string _nb_motors: int fly() : string fly() : string propulsion() : string propulsion() : string 42 06/09/24 Sylvain Cherrier Un programme utilisateur de nos classes En PHP, un autre objet (Escadrille par exemple) pourra utiliser nos classes. Quelques exemples (ici, __toString() de l’ancêtre). $squadron = array(); $squadron[] = new Sailplane('My Glider',25); $squadron[] = new Propellerplane('My Old Spitfire',12); $squadron[] = new Jetplane('B-52',37); foreach($squadron as $plane) { echo $plane; //heritage (pourquoi ? Quelle méthode est appelée ?) } 06/09/24 Sylvain Cherrier 43 Comportement général et spécialisation : Le polymorphisme Un comportement (une méthode) d'une super-Classe peut être modifié (redéfini) dans une sous-Classe Cette redéfinition permet de spécialiser le comportement hérité d'un ancêtre. C’est le polymorphisme. Ici, ce comportement était abstrait (fly) ou concret (propulsion). On remarque des attributs spécifiques aux sous-classes (nb_motors) Sailplane Propellerplane Jetplane fly() : string _nb_motors: int _nb_motors: int fly() : string fly() : string propulsion() : string propulsion() : string 06/09/24 Sylvain Cherrier 44 Redéfinition A l'appel d'une méthode, le langage recherche la plus adaptée. On travaille au plus proche, et on remonte dans l'arborescence des Classes jusqu'à trouver une méthode qui s'applique. foreach($squadron as $plane) { echo $plane; echo 'FLY !! '. $plane->fly()."\n"; //polymorphism : chaque sous-classe redéfinit la méthode abstraite echo 'using: '. $plane->propulsion()."\n\n"; //polymorphism: ici, pour le planneur, on utilise la méthode du père, automatiquement } 06/09/24 Sylvain Cherrier 45 Surcharge ABSENT EN PHP !! Déclinaison de la méthode selon les arguments fournis. Cela permet d'appeler un méthode avec différents arguments (utile pour des constructeurs, ou pour multiplier les usages possible d’une méthode) Exemple : une classe Point… et une méthode near(…) on pourrait avoir near(int $x, int $y) et near(Point $p) 06/09/24 Sylvain Cherrier 46 Surcharge en Java public class Point { private int x,y; //des Attributs, un point à, ici, un x et un y... public Point(int _x, int _y) { //constructeur x=_x; y=_y; } public boolean near(int leX,int leY, int range) { return Math.abs(leX-x)