Classe (informatique)

Infos
En programmation orientée objet, une classe déclare des propriétés communes à un ensemble d'objets. La classe déclare des attributs représentant l'état des objets et des méthodes représentant leur comportement. Une classe représente donc une catégorie d'objets. Il apparaît aussi comme un moule ou une usine à partir de laquelle il est possible de créer des objets. On parle alors d'un objet en tant qu'instance d'une classe (création d'un objet ayant
Classe (informatique)

En programmation orientée objet, une classe déclare des propriétés communes à un ensemble d'objets. La classe déclare des attributs représentant l'état des objets et des méthodes représentant leur comportement. Une classe représente donc une catégorie d'objets. Il apparaît aussi comme un moule ou une usine à partir de laquelle il est possible de créer des objets. On parle alors d'un objet en tant qu'instance d'une classe (création d'un objet ayant les propriétés de la classe). Il est possible de restreindre l'ensemble d'objets représenté par une classe A grâce à un mécanisme d'héritage. Dans ce cas, on crée une nouvelle classe B liée à la classe A et qui ajoute de nouvelles propriétés. Dans ce cas, différents termes sont utilisés :
- A est une généralisation de B et B est une spécialisation de A,
- A est une super-classe de B et B est une sous-classe de A,
- A est la classe mère de B et B est une classe fille de A.

Exemples de classe

Dans les exemples ci-dessous est définie dans différents langages une classe Point avec deux attributs x et y. Cette classe contient un constructeur, deux méthodes retournant la valeur des attributs (getX et getY), une méthode déterminant si le point représente l'origine (isOrigin) et une méthode effectuant une translation.
- En C++ class Point ;
- En Java public class Point
- En Pascal type TPoint = class //définition du type class protected X, Y: integer; public constructor Point(X, Y: integer); function GetX: integer; function GetY: integer; function IsOrigin: Boolean; function Translate(Pt: TPoint): TPoint; end; constructor TPoint.Point(X, Y: integer); begin Self.X := X; //ambiguité possible donc ajout de "Self." Self.Y := Y; end; function TPoint.GetX: integer; begin Result := X; end; function TPoint.GetY: integer; begin Result := Y; end; function TPoint.IsOrigin: Boolean; begin Result := (X = 0) and (Y = 0); end; function TPoint.Translate(Pt: TPoint): TPoint; begin Result := TPoint.Point(X + Pt.X, Y + Pt.Y); end;
- En Python class Point: def (self, x, y): self.x = x self.y = y def getX(self): return self.x def getY(self): return self.y def isOrigin(self): return (self.x

0) and (self.y

0) def translate(self, point): return Point(self.x + point.x, self.y + point.y)
- En VB.Net Public class Point protected x, y As Integer Public Sub New(ByVal x As Integer, ByVal y As Integer) me.x = x me.y = y End Sub Public Function getX As Integer return x End Function Public Function getY As Integer return y End Function Public Function isOrigine As Boolean If( x = 0 And y = 0)then return True Else return False End If End Function Public Function translate(ByVal p As Point) As Point return New Point(x + p.x, y + p.y) End Function

Cas particuliers de classe

Classe abstraite

Dans certains langages, une classe peut être partiellement définie. En particulier, certaines méthodes de cette classe n'ont pas de corps ou d'implémentation. Ces méthodes sont dites abstraites (ou virtuelles en C++). Les classes possédant au moins une méthode abstraite sont aussi dites classes abstraites (ou virtuelles) et ne peuvent pas être instanciées directement -sauf en créant une sous-classe non abstraite. Exemple : On souhaite modéliser les relations objets d'un dessin vectoriel. On peut dire qu'un objet dessin est un ensemble de géométries (la classe abstraite) et chaque géométrie peut être un point, un polygone ou une ligne brisée (ces trois classes héritent de géométrie). La classe abstraite n'est donc pas indispensable en soi, mais elle est indispensableOn aurait très bien pu dire qu'un dessin vectoriel est un ensemble de polygones, de lignes et de points. Mais on s'aperçoit que, si on veut ajouter une géométrie plus complexe, il faut modifier la structure même de la classe mère, ce qui est ridicule. pour un modèle propre, générique et simplifié. Le mixin est un cas particulier de classe abstraite. Il permet d'ajouter un service aux sous-classes.

Interface

Une classe ne possédant que des méthodes abstraites est appelée interface ou classe purement virtuelle (en C++) ou protocole (en Objective C).

Métaclasse

La classe d'une classe est une métaclasse. Les métaclasses permettent de réaliser de la réflexion structurelle.

Manipulation des données membres

Accès aux membres d'une classe

Une classe, comme définie précédemment, est un ensemble de membres typés (méthodes et attributs) qu'on est forcément amené à manipuler. Si p est une instance de Point(a, b) où a et b sont de type int, on accède aux membres de p comme ceci :
- p.x = a et p.y = b (accès aux attributs)
- p.getX et p.getY (accès aux méthodes) La question qui vient tout de suite à l'esprit est la suivante : pourquoi définir une méthode getX, alors qu'on peut accéder directement aux champs x et y de la classe Point ? En fait, lorsqu'on est amené à manipuler de nombreuses classes ainsi que de nombreuses relations entre ces classes (cf. héritage), le schéma, les données et les opérations peuvent devenir très complexes (surtout pour un individu n'ayant pas conçu le code). On a donc recours à un mécanisme qu'on appelle encapsulation des données, lequel se charge de masquer à certaines parties du programme les champs de la classe dans un souci d'intégrité. L'utilisateur est donc amené à ne manipuler que des méthodes qui ont été approuvées et qui en théorie remplissent bien leur rôle. Selon le principe d'encapsulation, les méthodes ont un accès public - cela signifie que tout élément d'un programme peut utiliser une méthode. Quant aux attributs composant l'état, ils ont un accès privé (private) - seul l'objet lui-même (et donc les méthodes qu'il contient) a un accès direct à ses attributs. Dans ce cas, le seul moyen d'accéder à ces attributs est d'utiliser les méthodes de l'objet. Les attributs ne peuvent pas être utilisés directement par un autre élément du programme ni même un autre objet, même si cet objet est de la même classe. Autre point : tous les attributs d'un objet qui sont hérités sont directement accessibles par les autres membres de cet objet. En ce qui concerne les dernières remarques, il y a souvent confusion sur la sémantique de l'accès privé. Le principe d'encapsulation implique une protection des attributs que nous appellerons verticale (seuls l'objet lui-même et les objets d'une sous-classe y ont accès). Nous retrouvons cette sémantique dans des langages comme Smalltalk, Oz ou OCaml. Cependant certains langages, comme C++, Pascal ou Java, plaident pour une protection des attributs que nous appellerons horizontale (les objets d'une même classe y ont accès, mais pas les objets des sous-classes).

Contrôle de l'accès aux membres d'une classe et visibilité

Certains langages proposent de changer le type d'accès des membres d'un objet. Cette opération s'effectue au sein des classes de ces objets. Par exemple, le C++ et le Pascal proposent les visibilités suivantes :
- public : les membres peuvent être utilisés dans/et par n'importe quelle partie du programme (les méthodes définies de cette manière sont visibles et utilisables par l'utilisateur).
- privé (private) : les membres privés d'une classe ne sont accessibles que par les objets de cette classe exactement et non par ceux d'une classe fille ou d'une autre classe.
- protégé (protected) : comme les membres privés, mais ils peuvent être utilisés par les classes filles. La sémantique de ces visibilités et leur nombre varient selon le langage. Par exemple, Java propose une définition un peu différente pour les membres protégés (elle s'étend à l'ensemble des objets de la même classe, des classes filles et des classes du même paquetage). Python propose aussi la possibilité de modifier la visibilité des membres d'une classe en préfixant le nom du membre par le caractère souligné ('_'). Par exemple, getX est une méthode public, _getX est seulement utilisable par les éléments du même module et add__(self, point):
- Surcharge de '+' return Point(self.x + point.x, self.y + point.y) p=Point(0, 0) q=Point(2, 3) r=p+q Ainsi r.getX retournera 2.

Notes et références

Voir aussi

- Héritage (Informatique)
- Classe abstraite
- Méthode (informatique)
- Métaclasse
- Unified Modeling Language
- Encapsulation des données
- Programmation orientée prototype : programmation objet sans classe.
- : plugin pour Eclipse, éditeur de bytecode Java. Catégorie:Programmation orientée objet af:Klasse be-x-old:Кляса (праграмаваньне) bs:Računarska klasa cs:Třída (programování) da:Klasse (datalogi) de:Klasse (objektorientierte Programmierung) en:Class (computer science) eo:Klaso (objektema programado) es:Clase (informática) fa:کلاس (برنامه‌نویسی) fi:Kapselointi he:מחלקה (תכנות) is:Klasi it:Classe (informatica) ja:クラス (コンピュータ) lt:Klasė (programavimas) nl:Klasse (informatica) pl:Klasa (programowanie obiektowe) pt:Classe (programação) ru:Класс (программирование) su:Class (élmu komputer) sv:Klass (programmering) ta:வகுப்பு (கணினியியல்) th:คลาส uk:Клас (програмування) vi:Lớp (khoa học máy tính) zh:类 (计算机科学)
Sujets connexes
Classe abstraite   Encapsulation (programmation)   Instance (programmation)   Interface   Java (langage)   Mixin   Métaclasse   Méthode (informatique)   Objective C   Oz   Pascal (langage)   Programmation orientée objet   Programmation orientée prototype   Python (langage)   Réflexion (informatique)   Smalltalk   Surcharge des opérateurs   Sémantique   Unified Modeling Language   Visual Basic .NET  
#
Accident de Beaune   Amélie Mauresmo   Anisocytose   C3H6O   CA Paris   Carole Richert   Catherinettes   Chaleur massique   Championnat de Tunisie de football D2   Classement mondial des entreprises leader par secteur   Col du Bonhomme (Vosges)   De viris illustribus (Lhomond)   Dolcett   EGP  
^