Table des matières

Classes - Programmation orientée objet (POO)

Lisp

Java

Fiche à imprimer

Apparu en 1960 avec LISP. Très répandu aujourd'hui. En Java, presque tout est objet.

Paradigme de programmation

Programmation procédurale

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.

Programmation orientée objet

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 :

Notion de classe

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.

Cela rappelle la définition abstraite des structures de données – Listes, Piles et Files – consistant à préciser toutes les propriétés désirées. Une classe est une implémentation qui énonce naturellement les propriétés désirées.

Définir une classe

Donner un nom

Une classe est identifiée par un nom. L'usage est d'utiliser la casse du chameau, UpperCamelCase.

Par exemple : Triangle, TriangleIsocele, Losange, PolygoneRegulier

Identifier les attributs

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 ?

On a le choix.

Définir l'interface

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.

Choisir la visibilité

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é.

Diagramme UML

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.

Dépendance

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.