Apparu en 1960 avec LISP. Très répandu aujourd'hui. En Java, presque tout est objet.
Le programme est découpé en fonctions ou procédures – fonctions qui ne retournent rien – réalisant chacune un morceau de l'ensemble.
Les fonctions sont alors séparées des données traitées, elles sont toutes au même niveau, et les données subissent passivement.
Les données sont structurées en objets qui définissent des méthodes – fonction d'un objet – pouvant leur être appliquées, et des attributs.
Les objets sont responsables de l'exécution des fonctions, ils ne sont plus passifs. Les fonctions sont organisées selon les objets auxquelles elles appartiennent.
Dans l'exercice on rencontre les problèmes :
Les classes vont permettre de simplifier ces problèmes :
Triangle permettra de définir exactement les données contenues dans un objet de ce type.Triangle, on est certain qu'il respecte les contraintes qu'on a fixé dans la classe.Triangle possède sa méthode aire qui ne pourra être confondu avec la méthode aire de Parallelogramme.Un objet est défini par une classe. La classe est la notice qui détaille comme on fabrique l'objet et comment on l'utilise.
Une classe est identifiée par un nom. L'usage est d'utiliser la casse du chameau, UpperCamelCase.
Par exemple : Triangle, TriangleIsocele, Losange, PolygoneRegulier
Qu'est ce qui définit un objet ?
Un triangle sera défini par ses 3 sommets. Ses attributs seront donc ces sommets. Mais sous quelle forme ?
Point que l'on devrait aussi définir ?On a le choix.
Comment agit on sur un objet depuis l'extérieur ?
On doit bien sûr pouvoir le créer. Un objet aura toujours un constructeur qui est une méthode spéciale permettant de le créer – notamment de réserver l'espace nécessaire en mémoire – puis de l'initialiser.
Et puis par exemple, pour un Triangle, on voudra calculer son aire, son périmètre… Ce sont autant de méthodes que la classe devra posséder.
En général, les classes permettent de régler finement les éléments d'un objet qui sont accessibles depuis l'extérieur et ceux qui ne le sont pas. Mais ce n'est pas le cas en Python : En Python, tout est visible. Nous parlerons donc de visibilité au cours des exercices mais sans trop insister.
Un élément accessible est dit public, s'il est inaccessible, il est dit privé.
Pour aider au développement et au travail de groupe, les informaticiens ont recours à différents types de diagrammes dont le but est de communiquer rapidement les choix effectués. Le UML – Unified Modeling Language – en fait partie.
C'est un vaste domaine, nous allons rester simples.
Les + signifient “public”. Pour “privé”, on aurait mis un -
| Triangle |
|---|
| Attributs |
| + réel : x1 |
| + réel : y1 |
| + réel : x2 |
| + réel : y2 |
| + rée l: x3 |
| + réel : y3 |
| + texte : nom |
| Méthodes |
| + construire(réels: x1, y1, x2, y2, x3, y3, texte:nom) |
| + réel : aire() |
| + réel : périmètre() |
diagramme UML
Dans un programme complexe, le diagramme UML permettra d'indiquer les dépendances entre les différentes classes.
Supposons que l'on crée une classe Point pour gérer les points et qu'alors Triangle utilise cette classe. On peut faire apparaître clairement la dépendance sur le diagramme UML.