Accueil ¦ Approche objet ¦ POO avec PHP ¦ Exemples ¦ Exercices

Introduction à l'approche objet

L'approche objet ¦ POO - PA(structurée)¦ La notion d'objet ¦ La notion de classe ¦ La notion d'héritage ¦ Bibliographie

L'approche objeten haut

spacer
Aujourd'hui, en programmation, il existe deux principaux modèle de représentation du monde :
le modèle fonctionnel (que vous connaissez déjà)
le modèle objet (que nous allons étudier).
spacer

Dans une approche fonctionnelle, vos programmes sont composés d'une série de fonctions, qui assurent ensemble certains services. Il s'agit d'une approche logique, cohérente et intuitive de la programmation.

Cette approche a un avantage certain appelé la factorisation des comportements (c'est à dire que pour créer une fonction d'une application, rien ne vous empêche d'utiliser un autre ensemble de fonctions (qui sont donc déjà écrites)).

Mais , l'approche fonctionnelle a aussi ses défauts, comme par exemple une maintenance complexe en cas d'évolution de votre application (une simple mise à jour de l'application à un point donné peut impacter en cascade sur d'autres fonctions de notre application).

L'application sera alors retouchée dans sa globalité.

L'approche fonctionnelle n'est pas adaptée au développement d'applications qui évoluent sans cesse et dont la complexité croit continuellement (plusieurs dizaines de milliers de lignes de code).

spacer

spacer
Les concept de base de l'approche objet: Objet, Classe, L'héritage
spacer
L'objet

Un objet est une abstraction d’un élément du monde réel. Il possède des informations, par exemple nom, prénom, adresse, etc., et se comporte suivant un ensemble d’opérations qui lui sont applicables.

De plus, un ensemble d'attributs caractérisent l'état d'un objet, et l'on dispose d'un ensemble d'opérations (les méthodes) qui permettent d'agir sur le comportement de notre objet.

Un objet est l'instance d'une classe, et une classe, est un type de données abstrait, caractérisé par des propriétés (ses attributs et ses méthodes) communes à des objets, qui permet de créer des objets possédant ces propriétés.

spacer
spacer
Les avantages de l’approche objet
spacer
spacer
- la modélisation des objets de l’application (consiste à modéliser informatiquement un ensemble d’éléments d’une partie du monde réel en un ensemble d’entités informatiques. Ces entités informatiques sont appelées objet)
spacer
- la modularité (la programmation modulaire permet la réutilisation du code, via l'écriture de librairies)
spacer
- la réutilisabilité
spacer
- l’extensibilité
spacer
(pour une meilleure productivité des développeurs et une plus grande qualité des applications).
spacer
La maîtrise de la complexité d’un système repose sur trois principes :
spacer
spacer
- l’abstraction (voir le comportement des objets indépendamment de leur représentation interne).
spacer
- la décomposition (des objets complexes en objets plus simple)
spacer
- la connexion (des objets suivant leurs interactions)
spacer
spacer
L'approche objet a été inventée pour faciliter l'évolution d'applications complexes.
spacer

Programmation OO - programmation structuréeen haut

La programmation orienté objets par comparaison à la programmation classique (structurée ou algorithmique)

spacer
Programmation structurée

a été conçue pour organiser les programmes complexes en associant les traitement aux structures de données formelles ou réels qu’ils manipulent.

La structure:
spacer
spacer
- structures des données (définitions des types et des variables)
spacer
- opérations (définition des procédures)
spacer
- le programme principale qui appelle les procédures (une procédure peut être elle-même un programme avec ses propres types et procédures)
spacer
Les limites :
Quand les structures de données ou les procédures doivent être partagé par différents programmes à l’aide d’ordres d’import/export. Quand les données évoluent, car une modification d’une structure de données est répercutée sur tous les programmes qui les manipulent, y compris les programmes importateurs.
Exemple: les langages Pascal, C, Algol, etc.
spacer
spacer
Programmation orientée objet

Répond à ces limites de la programmation structurée par le concept d’encapsulation (qui applique le principe d’abstraction) des données et des opérations qui les manipulent dans les objets, c’est-à-dire qu’un objet n’est pas accessible que par ces opérations visibles (son interface externe) et son implémentation (les structures de données associées) est caché.

Elle apporte l’indépendance entre les programmes, les données et les procédures parce que les programmes peuvent partager les mêmes objets sans avoir à se connaître comme avec le mécanisme d’import/export.

L’approche objet :
a introduit indépendamment de tout langage de programmation à l’objet trois concepts de base : objet, classe et héritage entre classes. Les concepts objet et classe sont interdépendants, c’est-à-dire qu’un objet est une instance d’une classe et la classe décrit la structure et le comportement communs d’objets (ses instances).
Exemple: les langages C++, Smalltalk, Java, etc.
spacer

La notion d'objeten haut

spacer

L’approche objet est une idée qui a désormais fait ses preuves. Simula a été le premier langage de programmation à implémenter le concept de classes en 1967 ! En 1976, Smalltalk implémente les concepts d’encapsulation, d’agrégation, et d’héritage (les principaux concepts de l’approche objet). D’autre part, de nombreux langages orientés objets ont été mis au point (Object Pascal, C++, Java, etc.).

spacer
Objet = identité + état (attributs) + comportement (méthodes)
spacer
• L’identité :
L’objet possède une identité, qui permet de le distinguer des autres objets, indépendamment de son état. On construit généralement cette identité grâce à un identifiant découlant naturellement du problème (par exemple un produit pourra être repéré par un code, une voiture par un numéro de série, ...)
• Les attributs :
Il s’agit des données caractérisant l’objet. Ce sont des variables stockant des informations d’état de l’objet
• Les méthodes (appelées parfois fonctions membres):
Les méthodes d’un objet caractérisent son comportement, c’est-à-dire l’ensemble des actions (appelées opérations) que l’objet est à même de réaliser. Ces opérations permettent de faire réagir l’objet aux sollicitations extérieures (ou d’agir sur les autres objets). De plus, les opérations sont étroitement liées aux attributs, car leurs actions peuvent dépendre des valeurs des attributs, ou bien les modifier

La notion de classeen haut

spacer

On appelle classe la structure d’un objet, c’est-à-dire la déclaration de l’ensemble des entités qui composeront un objet. Les objets de même nature ont en général la même structure et le même comportement. La classe factorise les caractéristiques communes de ces objets et permet de les classifier. Un objet est donc, une instanciation d’une classe, c’est la raison pour laquelle on pourra parler indifféremment d’objet ou d’instance (éventuellement d’occurrence). Toutes les instances d'une classe constituent l'extension de la classe.

Classe
spacer
est un type abstrait de données caractérisée par des propriétés (atributs et opérations) communes à ses objets, et un mécanisme permettant de créer des objets ayant ces propriétés.
spacer
classe = instanciation + attributs (variables d'instances)+ opérations
spacer
• L’instanciation :
L’objet possède une identité, qui permet de le distinguer des autres objets, indépendamment de son état. L'instanciation représente la relation entre un objet et sa classe d'appartenance qui a permis de le créer.
• Les attributs (appelés aussi variables d'instances):
Ils ont un nom et soit un type de base (simple ou construit) soit une classe (l'attribut référence un objet de la même ou une autre classe).
• Les opérations (appelées parfois méthodes):
Elles sont les opérations applicables à un objet de la classe. Elles peuvent modifier tout ou en partie l'état d'un objet et retourner des valeurs calculées à partir de cet état.
spacer
Les méthodes objet

La modélisation objet consiste à créer une représentation informatique des éléments du monde réel, sans se préoccuper de l’implémentation, ce qui signifie indépendamment d’un langage de programmation. Il s’agit donc de déterminer les objets présents et d’isoler leurs données et les fonctions qui les utilisent. Pour cela des méthodes de conception et de développement orientées objet ont été mises au point. Entre 1970 et 1990, de nombreux analystes ont mis au point des approches orientées objets, si bien qu’en 1994 il existait plus de 50 méthodes objet.

Toutefois seules 3 méthodes ont véritablement émergées : :
• La méthode OMT de Rumbaugh
• La méthode BOOCH’93 de Booch
• La méthode OOSE de Jacobson
spacer
A partir de 1994, Rumbaugh et Booch (rejoints en 1995 par Jacobson) ont unis leurs efforts pour mettre au point la méthode UML (Unified Modeling Language), qui permet de définir une notation standard en incorporant les avantages de chacunes des méthodes précédentes (ainsi que celles d’autres analystes).
spacer
spacer
L’encapsulation

Le concept d’encapsulation est un mécanisme consistant à rassembler les données et les méthodes au sein d’une structure en cachant l’implémentation de l’objet, c’est-à-dire en empêchant l’accès aux données par un autre moyen que les services proposés. L’encapsulation permet donc de garantir l’intègrité des données contenues dans l’objet.

L’encapsulation permet de définir des niveaux de visibilité des éléments de la classe. ces niveaux de visibilité définissent les droits d’accès aux données selon que l’on y accède par une méthode de la classe elle-même, d’une classe héritière, ou bien d’une classe quelconque.

Il existe trois niveaux de visibilité :
• publique : Les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes d’une classe définie avec le niveau de visibilité public. Il s’agit du plus bas niveau de protection des données.
• protégée : l’accès aux données est réservé aux fonctions des classes héritières, c’est-à-dire par les fonctions membres de la classe ainsi que des classes dérivées.
• privée : l’accès aux données est limité aux méthodes de la classe elle-même. Il s’agit du niveau de protection des données le plus élevé.
spacer

La notion d'héritageen haut

spacer

L’héritage (en anglais inheritance) est un principe propre à la programmation orientée objet, permettant de créer une nouvelle classe à partir d’une classe existante. Le nom d’"héritage" (ou parfois dérivation de classe) provient du fait que la classe dérivée (la classe nouvellement créée) contient les attributs et les méthodes de sa superclasse (la classe dont elle dérive).

L’intérêt majeur de l’héritage est de pouvoir définir de nouveaux attributs et de nouvelles méthodes pour la classe dérivée, qui viennent s’ajouter à ceux et celles héritées. Par ce moyen on crée une hiérarchie de classes de plus en plus spécialisées.

Héritage
spacer
mécanisme de transmission des propriétés d'une classe vers une sous-classe.
spacer
Hiérarchie des classes
L'hiérachie des classes ou l'association (relationship) est un concept essentiel pour la modélisation des données.On peut représenter sous forme de hiérarchie de classes, parfois appelée arborescence de classes, la relation de parenté qui existe entre les différentes classes. L’hiérarchie commence par une classe générale appelée superclasse (classe de base, classe parent, classe ancêtre, classe mère ou classe père). Puis les classes dérivées (classe fille ou sous-classe) deviennent de plus en plus spécialisées.
spacer
spacer
Héritage multiple

Certains langages orientés objet, tels que le C++, permettent de faire de l’héritage multiple, ce qui signifie qu’ils offrent la possibilité de faire hériter une classe de deux superclasse. Ainsi, cette technique permet de regrouper au sein d’une seule et même classe les attributs et les méthodes de plusieurs classes.

L'héritage multiple représente le mécanisme par lequel une sous-classe hérite des proprietés de plus d'une super-classe.

spacer
spacer
Polymorphisme

Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes. Cette caractéristique essentielle de la programmation orientée objet caractérise la possibilité de définir plusieurs fonctions de même nom mais possédant des paramètres différents (en nombre et/ou en type), si bien que la bonne fonction sera choisie en fonction de ses paramètres lors de l’appel.

Le polymorphisme représente la faculté d'une opération de s'appliquer à des objets de classes différentes.

Le polymorphisme rend possible le choix automatique de la bonne méthode à adopter en fonction du type de donnée passée en paramètre (par exemple l'utilisation de la méthode addition():)
- int addition(int, int) pourra retourner la somme de deux entiers
- float addition(float, float) pourra retourner la somme de deux flottants
- char addition(char, char) pourra définit au gré de l’auteur la somme de deux caractères
spacer

Bibiographieen haut

spacer
[Objet2000] Bouzeghoub M., Gardarin G., Valduriez P., Les objets, Eyrolles, 2000
[CPOO2000] Meyer Bertrand, Conception et programmation orientées objet, Eyrolles, 2000

© 2012 Dorel Gorga