# Objet (informatique)

En informatique, un objet est un conteneur symbolique et autonome qui contient des informations et des mécanismes concernant un sujet, manipulés dans un programme. Le sujet est souvent quelque chose de tangible appartenant au monde réel$^,$. C'est le concept central de la programmation orientée objet (POO).
En programmation orientée objet, un objet est créé à partir d'un modèle appelé classe ou prototype, dont il hérite les comportements et les caractéristiques. Les comportements et les caractéristiques sont typiquement basés sur celles propres aux choses qui ont inspiré l'objet : une personne (avec son état civil), un dossier, un produit.

## Histoire

La notion d'objet a été introduite avec le langage de programmation Simula, créé à Oslo entre 1962 et 1967 dans le but de faciliter la programmation de logiciels de simulation. Avec ce langage de programmation, les caractéristiques et les comportements des objets à simuler sont décrits dans le code source.
Le langage de programmation orienté objet Smalltalk a été créé par le centre de recherche Xerox en 1972.
La programmation orientée objet est devenue populaire en 1983 avec la sortie du langage de programmation C++, un langage orienté objet, dont l'utilisation ressemble volontairement au populaire langage C.
Les premières bases de données orientées objet ont été commercialisées en 1993, et leur technologie n'est pas arrivée à maturité avant la fin du XXe siècle.
Le langage de programmation orienté objet Java a été créé par Sun Microsystems en 1995, et était avant tout destiné à la programmation des applications web, dont la technologie était en pleine évolution durant les années 1990.

## Terminologie

* Une classe est une description des caractéristiques d'un ou de plusieurs objets. Chaque objet créé à partir de cette classe est une instance de la classe en question.
* Un prototype est une description d'un objet, qui sera utilisé pour créer d'autres objets par clonage. voir programmation orientée prototype.
* Une méthode est une suite d'instructions qui manipule les caractéristiques et l'état d'un objet.
* Une propriété, aussi nommée champ (field) ou attribut, est une caractéristique propre à un objet donné.
* L’état d'un objet est sa forme à un instant donné, telle que décrite par les valeurs de l'ensemble de ses propriétés.
* Une classe hérite les caractéristiques d'une autre si sa définition est fondée sur celle-ci, auquel cas ses instances partagent les traits des 2 classes. On parle alors de sous-classe et super-classe.
* Il y a polymorphisme (par sous-typage) lorsqu'il existe plusieurs sous-classes d'une même super-classe, qui possèdent chacune leur propre variante d'une même méthode.
Dans certains langages Orientés Objets (OO), les méthodes, les propriétés et l'état d'un objet sont manipulables à partir d'autres objets uniquement si ceux-ci sont explicitement déclarés comme publics. C'est le mécanisme d´encapsulation.

## Utilisation

Parmi les diverses technologies qui gravitent autour des objets, il y a les langages de programmation orientés objet et les bases de données orientées objet. La notion d'objet est également utilisée dans la programmation de composants logiciels ainsi que la conception de logiciel.
Une base de données orientée objet permet le stockage permanent d'objets, à l'aide d'un système de gestion de base de données et un langage de programmation adaptés.
Le Object Management Group est un consortium international de normalisation et de soutien des technologies basées sur les objets.
Créée par le Object Management Group, CORBA est une norme relative à l'architecture de logiciels qui s'échangent des objets.
Créée par le consortium W3C, le Document Object Model est une norme relative à la manipulation des éléments d'une page web par un langage de programmation orienté objet comme JavaScript.

### La programmation orientée objet

La programmation orientée objet est un style d'écriture du code source, propre à certains langages de programmation. Dans ce style, le code source est une suite de descriptions de classes ou de prototypes, avec la description de leurs caractéristiques (propriétés) et de leurs comportements (méthodes). Smalltalk, Python, Ruby, C#, Java et C++ sont des langages de programmation orientés objet.