CM1 : Programmation orientée objet Mickaël Martin Nevot V1.3.1 25/02/2014 13:31 Cette œuvre de Mickaël Martin Nevot est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage à l'Identique 3.0 non transposé. Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Présentation du cours II. Programmation orientée objet III. Java IV. Java « avancé » I. Programmation orientée objet et Java Mickaël Martin Nevot 1/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Programmation : historique IXe siècle : Al Khuwarizmi (algorithmique) 1842 : Ada Lovelace et Babbage (programmation) 1854 : Boole (logique) 1936 : Turing (machine de) 1951 : Grace Murray Hopper (compilateur/bogue) 1954 : Fortan et système d’exploitation 1955 - 1980 : cartes perforées 1970 : programmation structurée 1980 – 1990 : programmation orientée objet (POO) Programmation orientée objet et Java Mickaël Martin Nevot 2/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Qu’est-ce qu’un objet ? Code source traditionnel Code source orienté objet Programmation orientée objet et Java Mickaël Martin Nevot 3/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Qu’est-ce qu’un objet ? Code source traditionnel Code source orienté objet « Un objet est une capsule logicielle oblative avec un tropisme conatif dont l'hétéronomie est la marque de la durée, de l'éphémère et de la hoirie » — Serge Miranda Programmation orientée objet et Java Mickaël Martin Nevot 4/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Pourquoi la POO ? Diminuer le coût d’un logiciel Faciliter la conception et l’évolution du code Augmenter la durée de vie d’un logiciel Augmenter la réutilisabilité d’un logiciel Augmenter la facilité de maintenance d’un logiciel Conception d’un logiciel à la manière de la fabrication d’une voiture Programmation orientée objet et Java Mickaël Martin Nevot 5/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Principe de la POO Communication inter-objets par messages À la réception d’un message : Appel d’une méthode qui modifie son état Appel d’une méthode qui envoie un message à son tour Ma voiture démarre Programmation orientée objet et Java Mickaël Martin Nevot Le moteur 6/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Programmation objet Paradigme (≠ méthodologie) Concept : Objet : État (attributs) Comportement (méthodes) Identité Encapsulation Héritage Polymorphisme Langage de programmation : Java, C++, Ada, PHP, C#, Objective C, Python, etc. Programmation orientée objet et Java Mickaël Martin Nevot 7/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Objet et classe Objet : un concept, une idée/entité du monde physique Exemples : voiture, étudiant, chat, fenêtre, forme, etc. Classe : regroupe les objets de mêmes comportements Instancier : fabriquer un exemplaire d'un élément à partir d'un modèle qui lui sert en quelque sorte de moule Un objet est une instance de classe Réification : permet de transformer ou à transposer un concept en une entité informatique Une classe représente une responsabilité Programmation orientée objet et Java Mickaël Martin Nevot 8/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 État et comportement État : Défini par l’ensemble des attributs Attribut, variable d’instance, donnée membre : Variable spécifique à l’objet Comportement : Défini par l’ensemble de méthodes Méthode : fonctions spécifique à l’objet Méthodes : Constructeur : appelé à la création de l’objet Destructeur : appelé à la destruction d’un objet Méthode abstraite : méthode sans code Accesseurs et mutateurs : sert de mandataire d’accès à l’état de l’objet (depuis l’extérieur de celui-ci) Programmation orientée objet et Java Mickaël Martin Nevot 9/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 POO et magie Programmation orientée objet et Java Mickaël Martin Nevot 10/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 POO : deux aspects Programme en cours d’écriture : Ensemble de classes Chaque classe a des attributs et des méthodes Programme en cours d’exécution (processus) : Ensemble d’objets Chaque objet a son état courant et un comportement Programmation orientée objet et Java Mickaël Martin Nevot 11/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Encapsulation Association de variables et fonctions dans une même entité L'objet est vu de l'extérieur comme une boîte noire ayant certaines propriétés et ayant un comportement spécifié Variables Attribut Variables Attribut Variables Attribut Méthode Fonction Méthode Fonction Programmation orientée objet et Java Mickaël Martin Nevot 12/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 POO et magie Programmation orientée objet et Java Mickaël Martin Nevot 13/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Encapsulation : accessibilité Concerne : classe, constructeur, attribut et méthode Visibilité : Publique : accessible de partout et sans aucune restriction Protégée : accessible aux classes du module (ou paquetage) et à ses classes filles Privée : accessible uniquement au sein de sa classe Accesseurs (getters) / mutateurs (setters) : Permet de récupérer/modifier la valeur d’un attribut avec une visibilité restreinte grâce à une méthode Programmation orientée objet et Java Mickaël Martin Nevot 14/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Héritage Construction d’une classe à partir d’autres classes en partageant leurs attributs et méthodes Spécialisation (ou généralisation), enrichissement Réutilisation Vehicle Redéfinition Car Bike ER Vehicle Ambulance Programmation orientée objet et Java Mickaël Martin Nevot 15/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Classes et sous-classes B hérite de A A est la classe mère, B la classe fille A est la super-classe de B B est une sous-classe de A Un objet de type B est aussi un objet de type A Un objet de type A n’est pas un objet de type B A B Programmation orientée objet et Java Mickaël Martin Nevot 16/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Héritage Animal Mammal Whale Other Wolf Programmation orientée objet et Java Eagle Mickaël Martin Nevot Auk 17/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Abstraction Classe abstraite : Ne peut pas être instanciée (mais constructeur[s] possible[s]) Méthode abstraite : Aucun service offert par la méthode mais une sémantique d’utilisation offerte Si une seule méthode est abstraite, la classe l’est aussi Vehicle Car Programmation orientée objet et Java Bike Mickaël Martin Nevot 18/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Interface Modèle pour une classe Classe totalement abstraite sans attribut (non constant) Une classe implémentant une interface doit implanter (implémenter) toutes les méthodes déclarées par l’interface Telephone VideoGameConsole Calendar Smartphone Programmation orientée objet et Java Mickaël Martin Nevot 19/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Héritage Animal Mammal Whale Walker Other Wolf Eagle Swimmer Programmation orientée objet et Java Auk Flyer Mickaël Martin Nevot 20/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Type et polymorphisme Type : Défini les valeurs qu’une donnée peut prendre Défini les opérateurs qui peuvent lui être appliqués Défini la syntaxe : « comment l’appeler ? » Défini la sémantique : « qu’est ce qu’il fait ? » Une classe est un type (composé), une interface aussi… Polymorphisme : Capacité d’un objet à avoir plusieurs types Permet d’utiliser une classe héritière comme une classe héritée Programmation orientée objet et Java Mickaël Martin Nevot 21/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Catégories de polymorphisme Ad hoc Surcharge Polymorphisme Paramétrique Universel D’héritage Surcharge : Permet d'avoir des méthodes de même nom, avec des fonctionnalités similaires Paramétrique : Permet de définir plusieurs méthodes de même nom mais possédant des paramètres différents D’héritage : Permet de redéfinir une méthode dans des classes héritières (l’appel se fait sans se soucier de son type intrinsèque) Programmation orientée objet et Java Mickaël Martin Nevot 22/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » Généricité V1.3.1 Aussi appelé type abstrait de données Généricité (polymorphisme paramétrique de type) : Polymorphisme : objet pouvant prendre plusieurs types Paramétrique : le type est paramétré par un autre type Type : définition de la syntaxe et de la sémantique d’utilisation Comportement unique pour des types polymorphes Pair<T> Pair<Shoes> Pair<Ace> Programmation orientée objet et Java Pair<Animal> Mickaël Martin Nevot 23/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Module et paquetage Regroupement de codes sources en unités de travail logiques Encapsulation Réutilisabilité et partage du code facilités Facilitation de réalisation de bibliothèques Généricité possible Paquetage : organisation sémantique de classes en répertoires Algorithmique et UML (mise à niveau) Mickaël Martin Nevot 24/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Autres notions sur les objets Entité aux frontières précises : Insécable (complet) Agrégation : construction d’objets avec d’autres objets Composition (agrégation particulière) : Durée de vie : l’objet est créé et meurt avec l’agrégat Exclusivité : l’objet n’est utilisé que par une seule classe Fait partie (« physiquement ») de l’agrégat Dépendance : Relation dans un agrégat logiciel Programmation orientée objet et Java Mickaël Martin Nevot 25/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Couplage et cohésion Couplage : Interconnexion de deux classes (modules) Couplage fort : une modification d’une classe nécessite la modification de l’autre Couplage faible : communication de données uniquement grâce à des « interfaces » Cohésion : Relations des données au sein d’une même classe Centré sur un but : se concentre sur tâche unique et précise Programmation orientée objet et Java Mickaël Martin Nevot 26/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 S.O.L.I.D S Responsabilité unique (single responsibility principle - SRP) Une classe doit avoir une et une seule responsabilité O Ouvert/fermé (open/closed principle - Une classe doit être ouverte à l'extension, OCP) mais fermée à la modification Substitution de Liskov (Liskov L substitution principle - SLP) Une classe doit pouvoir être remplacée par une instance d'un des ses sous-types, sans modifier la cohérence du programme Ségrégation des interfaces (interface I segregation principle - ISP) Préférer plusieurs interfaces spécifiques pour chaque client plutôt qu'une seule interface générale D Inversion des dépendances Il faut dépendre des abstractions, pas des (dependency inversion principle - DIP) implémentations Programmation orientée objet et Java Mickaël Martin Nevot 27/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Loi de Démeter Loi de Déméter pour les fonctions et les méthodes : LoD-F Principe de connaissance minimale Ne parlez qu'à ses amis immédiats Toute méthode d'un objet peut simplement invoquer les méthodes des types suivants d'objets : Lui-même Ses paramètres Les objets qu'il crée/instancie Ses objets composants Programmation orientée objet et Java Mickaël Martin Nevot 28/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Loi de Démeter Avantages : Résultat plus maintenable et plus adaptable Faible dépendance entre les objets Réduit la probabilité d'erreurs logicielles Inconvénients : Multiplication des wrappers : Augmenter le temps de développement initial Accroître l'espace mémoire utilisé Diminuer les performances Méthode permettant la propagation d’appels de méthodes à leurs composant Programmation orientée objet et Java Mickaël Martin Nevot 29/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Modèle-Vue-Contrôleur Architecture et méthode de conception d’IHM Modèle : données et leur manipulation Vue : élément de l’interface graphique Contrôleur : orchestre les actions, synchronise MVC 2 : un seul contrôleur Programmation orientée objet et Java Mickaël Martin Nevot 30/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Aller plus loin Prototype et slot Mixin Trait Réflexion λ-calcul Programmation orientée aspect (POA) Programmation orientée acteur Programmation par contrat Espace de noms Métaclasse Programmation orientée objet et Java Mickaël Martin Nevot 31/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Liens Documents électroniques : http://hdd34.developpez.com/cours/artpoo/ http://fabrique-jeuvideo.blogspot.fr/2013/08/poo.html Document classique : Hugues Fauconnier. Programmation orientée objet en Java. Guillaume Revy. Introduction à la Programmation Orientée Objet... et son application au C++. Craig Larman. UML2 et les design patterns. Mathieu Nebra. La programmation orientée objet. Programmation orientée objet et Java Mickaël Martin Nevot 32/33 Présentation du cours > Programmation orientée objet > Java > Java « avancé » V1.3.1 Crédits Auteur Mickaël Martin Nevot [email protected] [email protected] Carte de visite électronique Relecteurs Cours en ligne sur : mickael.martin.nevot.free.fr Programmation orientée objet et Java Mickaël Martin Nevot 33/33
© Copyright 2024 ExpyDoc