Programmation orientée objet - Mickaël Martin Nevot / Recueil des

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