L'analyse orientée objet s'articule autour de trois principes d'intelligibilité du réel :
La modélisation à partir d'entités qui sont des instances d'une classe d'objets
L'encapsulation à l'intérieur de ces objets des données : les attributs et des procédures de traitement de ces données : les services
La classification de ces objets les uns par rapport aux autres à partir de trois types de relations : inclusion, connexion et héritage
La coopération des objets les uns avec les autres par de biais de messages.
Nous reviendrons ensuite sur les conséquences de l'utilisation de tels paradigmes sur le cycle de développement du logiciel.
Dans l'analyse objet, la réification est l'opération qui consiste à sélectionner les éléments du problème pour leur donner le statut d'objets. À partir d'un formulation d'un problème ou d'une situation on se livre à une opération d'abstraction. Celle-ci peut être définie comme l'action de l'esprit qui consiste à extraire d'un donné une signification utile. Elle correspond par exemple à des opérations comme la simplification et la sélection.
Dans l'approche objet, le processus d'abstraction aboutit d'abord à des classes dite classes conceptuelles, comme les classes "voiture" et "feu rouge" de notre exemple précédent.
Ces classes restent toutefois conceptuelles dans la mesure ou 'le feu rouge au croisement des rues 1 et 6' est d'un type différent de la classe conceptuelle dont il est issu. La traduction des ces classes dans l'action se réalise par instanciation c'est-à-dire la production d'objets "vivants" à partir d'une classe. La distinction entre instance et classe dans l'orienté objet est analogue à la notion de passage d'un type logique a un autre proposée par G. BATESON.
Pour modéliser la 205 de Mr Durant, on créera tout d'abord une classe "Peugeot 205", puis on instanciera cette classe sous le nom "205 de Mr Durant". De la sorte, on pourra facilement créer d'autres objets semblables comme la "205 de Mr Dupond".
Le cycle de modélisation peut se représenter comme suit:
Dans un premier temps, l'analyste pourra disséquer le discours de l'utilisateur : les noms employés sont les premiers candidats à la réification. Les verbes et les adjectifs qui les accompagnent peuvent respectivement devenir les services et attributs des classes d'objet proposées.
Les objets ainsi considérés ont deux types de propriétés
- informatives lorsqu'elles fournissent des renseignements sur l'objet sans le modifier. On parle alors des attributs de l'objet.
- actives lorsque les objets ont des comportements ou exécutent des actions. On parle alors de services, voire même de comportement de l'objet.
Les propriétés d'un objet sont décrites dans sa classe et toutes les instances de cette classe sont munies de ces services et attributs.
Le concept d'objet rassemble donc tout à la fois la notion de traitement et celle de donnée, qui sont séparées par les paradigmes classiques. Par ailleurs les données contenues dans un objet ne sont accessibles que par les services de l'objet lui-même. Un objet n'est entièrement représentable ni un modèle de données, ni un algorithme, mais une fusion de ceux-ci dans une entité autonome.
L'encapsulation est donc tout à la fois l'action de masquer à tout accès extérieur les propriétés de l'objet et celle d'inclure dans l'objet les traitements et les données qu'il utilise. De ce fait, il n'est plus nécessaire, pour manipuler un objet, de connaître son fonctionnement interne. L'objet peut alors éventuellement être réutilisé dans d'autres applications sans que ne se posent de problèmes d'interférence. L'encapsulation permet donc tout à la fois l'autonomie des objets et la construction de bibliothèques de classes réutilisables.
La classification se préoccupe de situer les objets les uns par rapport aux autres. Il existe trois types de relations entre objets: inclusion, connexion et héritage.
L'inclusion est la relation entre un composé et ses composants (i.e. une feuille fait partie d'un arbre).
La connexion traduit le fait que l'existence d'un objet implique celle d'un autre (l'existence de la feuille d'une certaine branche de l'arbre implique celle de l'arbre).
L'héritage exprime la relation entre une classe abstraite et des classes plus précises (La classe "feuille de chêne" hérite des propriétés de la classe "feuille").
L'héritage est le concept le plus remarquable de l'analyse objet. La détermination des liens d'héritage procède par un double mouvement de spécialisation et de généralisation. Lorsque plusieurs classes ont des propriétés communes, on créée une super-classe possédant ces propriétés.
Dans notre exemple, la classe "205" possède ses attributs et services propres, mais hérite également de celles de ses ancêtres. Comme la voiture individuelle et le camion ont des attribut et des services en commun, on invente une classe, dite classe abstraite qui permet de ne définir qu'une fois les attributs et services qui leurs sont communs.
On peut construire les classes par généralisation ou spécialisation. Inversement, lorsque l'on distingue des particularités, on peut exprimer cette spécialisation en créant une nouvelle sous-classe.
L'héritage multiple est possible lorsqu'une classe dérive de deux super-classes.
L'héritage est un paradigme particulièrement puissant puisqu'il permet d'éviter toute redondance sémantique sans engendrer d'interrelation entre les instances des objets : les instances de l'objet "télévision" sont complètement indépendantes des celles de l'objet " radio".
Les principes d'abstraction et de classification sont essentiellement statiques. Pourtant, c'est par des échanges et des interactions entre objets que se manifeste le fonctionnement d'un modèle. La coopération des objets et leur travail commun pour réaliser un objectif se fait grâce à l'échange de messages.
L'encapsulation masque à l'environnement de l'objet les détails de son fonctionnement interne de l'objet. Pour manipuler des données internes à un objet il est nécessaire de lui envoyer un message. De ce fait objet est perçu comme une boite noire par les autres objets et les modifications qui sont effectuées dans son fonctionnement interne n'ont pas d'impact sur eux.
Voici un exemple de coopération entre objets : l'objet "trésorerie" pose envoie un message a l'objet "Somme_dette" qui va chercher lui-même les information dont il a besoin en émettant des messages à l'attention d'autres objets. Les objets sont indépendants les un des autres dans la mesure ou leur fonctionnement interne n'a pas besoin d'être connu de l'extérieur.
La particularité de l'approche objet est de ne pas "manipuler les objet au loin" mais de décrire leur comportement "en se mettant à leur place". Par exemple, l'objet serrure doit être capable de modifier tout seul son état en présence d'une clef et d'un ordre d'ouverture. On ne stratifie pas un problème en niveaux de réflexion, mais on pense d'abord "local".