Découvrez l’héritage et les classes abstraites

Effectué

L’héritage et les classes abstraites sont deux constructions de programmation importantes que l’on trouve dans les langages de programmation orientés objet. Ces concepts sont utilisés pour créer des relations parent-enfant entre les classes. L’héritage permet à une sous-classe d’étendre une super classe. La sous-classe hérite de tous les attributs et méthodes de la super classe. Les sous-classes peuvent également remplacer le comportement ou ajouter plus de fonctionnalités aux méthodes héritées de la super classe.

Héritage

Pour mieux comprendre le concept d’héritage dans la programmation orientée objet, passons en revue un exemple réel. Dans cet exemple, Véhicule est la classe parent. Il existe de nombreux types de véhicules, par exemple : les voitures, les bus et les camions. Dans ce scénario, Véhicule est la classe parent. Voitures, Bus et Camions sont des classes dérivées qui héritent de Véhicule. La classe Véhicule a des caractéristiques qui sont partagées entre tous les types de véhicules (vitesse, couleur et engrenages par exemple). Les caractéristiques de chacun des types de véhicules peuvent être différentes. Par exemple, un camion peut avoir une traction intégrale, mais pas une voiture.

Schéma de l’héritage de la classe parent Véhicule vers les classes dérivées voiture, bus et camion.

Exemple

L’exemple suivant montre comment une classe utilise l’héritage. La classe Voiture étend la classe Véhicule pour obtenir la hauteur et la largeur, mais ajoute également la variable de nombre de passagers.

class Vehicle
   {
	// Instance fields.
 		real height;
  		real width;
	// Constructor to initialize fields height and width.
	new(real _height, real _width)
   	{
    height = _height;
		  width = _width;
  	}
   }
class Car extends Vehicle
	{
	  // Additional instance field numberOfPassengers. Fields height and width are inherited.
 	  int numberOfPassengers;

	 // Constructor is overridden to initialize numberOfPassengers.
	 new(real _height, real _width, int _numberOfPassengers)
 	 {
	   // Initialize the fields.
	   super(_height, _width);
 	   numberOfPassengers = _numberOfPassengers;
 	 }
	}

Abstraite

Les classes abstraites sont identifiées par le mot clé abstrait. Elles ne peuvent pas être instanciées mais nécessitent une sous-classe héritée de la classe abstraite. Les classes abstraites sont utilisées pour implémenter un concept que la sous-classe termine ensuite. Les méthodes abstraites peuvent aussi être déclarées dans des classes abstraites. Les méthodes abstraites n’autorisent pas le code ou les déclarations dans la méthode. Une sous-classe doit étendre la classe abstraite pour utiliser la méthode abstraite.

Exemple

Voici un exemple de classe abstraite. La classe Voiture étend la classe abstraite Véhicule. Cela permet à la classe Voiture de remplacer la méthode printInfo() et cela vous permet d’ajouter des fonctionnalités à la méthode operate() non incluse dans la classe abstraite.

abstract class Vehicle
{
      str owner;
      int age;

	void printInfo()
      {
    	Info(strfmt("%1, %2",owner, age));
      }
    abstract void operate()
    {
    }
 }
class Car extends Vehicle
{
     str model;
     void printInfo()
     {
            // overriding default functionality
            Info(strfmt("%1, %2, %3",owner, age, model));
     }
   void operate()
   {
        Info('running');
   }
}