Une classe est dite immuable s'il n'est pas possible de modifier un objet de cette classe après sa création. Par exemple, la classe Point, décrite ci-dessus dans différents langages, est immuable car elle n'expose aucune méthode permettant de modifier la valeur de ses variables membres. La méthode translate
retourne un nouvel objet au lieu de modifier l'objet lui-même. La classe java.lang.String
de l'environnement Java est un autre exemple de classe immuable, tout comme la classe System.String
du Framework Microsoft .NET.
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.
Le mixin est un cas particulier de classe abstraite. Il permet d'ajouter un service aux sous-classes.
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).
La classe d'une classe est une métaclasse. Les métaclasses permettent de réaliser de la réflexion structurelle.
Lorsqu'on est amené à manipuler des données de même type (c'est par exemple le cas de points dans un repère), on peut vouloir appliquer à ces objets (au sens de la POO) des opérations. Ainsi, la fusion de deux zones (polygones) donne bien une nouvelle zone, tout comme l'addition de deux points donne un nouveau point.
... p=Point(6,2) q=Point(6,3) m=Point(0,0) m=p.translate(q) // p+q ...
Continuons sur notre classe Point. L'exemple Python suivant est très parlant :
class Point: (...) def __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.