# Méthode (informatique)

En programmation orientée objet (POO), une méthode est une routine membre d'une classe.
Une méthode peut être :
* une méthode d'instance, n'agissant que sur un seul objet (instance de la classe) à la fois ;
* une méthode statique ou méthode de classe, indépendante de toute instance de la classe (objet).
En programmation orientée objet, on utilise parfois le terme spécifique d'invocation de méthode pour désigner l'appel d'une telle fonction d'une classe.

## Portée des méthodes

Dans de nombreux langages de POO, l'encapsulation à l'intérieur d'une classe permet de gérer et donc restreindre les droits d'accès à un membre de cette classe, soit une méthode (fonction membre) ou une propriété (donnée membre). On parle alors de la portée du membre. On utilise assez souvent (comme en C++ ou en Java par exemple) les mots-clés public, private ou protected pour gérer ces droits d'accès:
| Portée de la méthode | Mot-clef (en C++) | Accessible par | Remarque |
| Privée | private | les membres de la classe seulement | Seul un objet de la classe peut les mettre en œuvre (« appeler ») ; ces méthodes recouvrent généralement le fonctionnement interne de la classe que l'on veut masquer de l'extérieur. |
| Protégée | protected | les membres de la classe et des classes dérivées | Seul un objet de la classe ou d'une classe dérivée peut les mettre en œuvre. |
| Publique | public | les membres de la classe et de ses dérivées ainsi que les clients de la classe | c'est-à-dire de tout objet ; ce sont ces dernières qui constituent l'interface de la classe. |
Certains langages introduisent également les méthodes dites amies, qui listent alors explicitement les classes amies qui peuvent les invoquer, permettant ainsi notamment d'accorder des droits spécifiques entre classes mères et filles.
En principe, l'utilisation des méthodes publiques d'un objet, c'est-à-dire de son interface, est le seul moyen pour accéder à l'état de l'objet.

## Classification des méthodes

Il existe différents types de méthodes :
* le(s) constructeur(s) appelé(s) à la création de l'objet, soit :
** le constructeur par défaut appelé par défaut lors de la création d'un objet, (offert par défaut lors de la compilation s'il n'y a pas de constructeur déclaré),
** le constructeur par recopie (ou constructeur de copie) appelé lors de la création de l'objet, du passage d'un objet par référence,
** le(s) constructeur(s) paramétrique appelé(s) si la signature correspond à celle du constructeur ;
* le destructeur appelé à la suppression de l'objet, explicitement ou bien implicitement dans le cadre d'un langage à ramasse-miettes ;
* les méthodes abstraites qui sont des méthodes sans code — leur existence dans une classe suffit à déclarer qu'une classe est abstraite et contraint à introduire des classes filles pour les implémenter et les exploiter ;
* les accesseurs (Get) et les mutateurs (Set) :
** les accesseurs permettent de récupérer la valeur de données membres privées sans y accéder directement de l'extérieur ; ils sécurisent donc l'attribut en restreignant sa modification,
** les mutateurs permettent de modifier l'état de données membres tout en vérifiant si la valeur que l'on veut donner à la donnée membre respecte les normes de celle-ci ou diverses règles de cohérence. Leur détournement pour modifier en cascade d'autres états du programme pouvant être source de bogues ou de perte de maintenabilité.