Premier concept important : l'héritage.
Même très important je dois dire. J'ai déjà tenté de vous exposer cette notion dans la partie sur la fenêtre mais ce n'était pas très judicieux, vous ne connaissiez pas la POO.
On va donc tout recommencer ici.
Bon, j'espère que les principes de création de classe et de programmation orientée objet sont acquis. Je sais que c'est une rude partie mais allez chercher un café et reprenez tout ça calmement.
Vous connaissez tous les mots Français "Héritage" et "Hériter", on peut le résumer par :
Citation : Wikitionnaire
Devenir propriétaire d’une chose par droit de succession.
Eh bien ce concept est quasiment le même en programmation à une petite nuance près. Dans la vraie vie un héritage transmet simplement une chose, en programmation l'héritage d'une classe va dupliquer cette dernière et donner ses caractéristiques à la classe qui hérite.
Un petit schéma pour être plus clair
Admettons que je veuille créer 2 classes comme ceci. Une classe guitare et une classe piano. Vous remarquez qu'elles présentent des similitudes, elles possèdent toutes les deux un attribut "Notes" qui va contenir le panel de notes que cet instrument peut jouer et un
Sub "Joue" qui va lui permettre de produire un son. (Cas purement hypothétique, je ne vais pas vous demande de créer un orchestre en Visual Basic

).
En plus de ces deux éléments communs elles présentent des particularités spécifiques à leur type : la guitare aura en plus le nombre de cordes qu'elle possède et une fonction permettant d'utiliser le Vibrato. Le piano quand à lui, contiendra une variable comptant le nombre de touches qu'il possède et un
Sub pour appuyer sur une touche spécifique.
Vous remarquez tout de suite que ces "similitudes" vont devoir être écrites en double ... Beaucoup de travail et de lignes pour rien.
C'est pour cela que
dieu les programmeurs ont introduit le concept de l'héritage.
Regardez, si nous créons une troisième classe nommée "instrument" qui contiendra des membres communs à tous les instruments, comme l'attribut "Notes". Il serait si simple d'inclure cette classe dans les autres, de façon à bénéficier de ses caractéristiques.
C'est justement là toute la puissance de l'héritage. En une ligne de programmation nous allons pouvoir faire hériter nos classes Guitare et Piano de Instrument de façon à leur donner la possibilité d'utiliser ses membres.
Un héritage peut se faire sur plusieurs niveaux, il n'y a pas de limite. La classe instrument pouvait elle même hériter d'une classe de type "Chose" et ainsi de suite ...
Ici vous voyez l'héritage sur plusieurs niveaux : la voiture de police hérite de la classe "Voitures" qui hérite elle même de la classe "Véhicules".
Alors qu'est-ce que cette modification implique concrètement pour nos classes ?
Eh bien d'un point de vue extérieur à la classe, une fois instanciée par exemple, eh bien c'est transparent. C'est à dire qu'on ne saura pas si le membre de la classe auquel on va accéder appartient à la classe mère ou fille.
Par contre d'un point de vue interne à la classe, ça se complique. Nous allons devoir apprendre à jongler entre les membres appartenant a la classe fille où à la classe mère au travers de préfixes (du même type que Me).
Ce mot est
MyBase.
Dans ce schéma, on se place du point de vue de la classe fille. Si depuis cette classe fille on débute une ligne par
Me., les membres auxquels nous pourrons accéder seront ceux de de la classe fille et de toutes les classes dont elle hérite. En revanche, en utilisant
MyBase. nous accèderons uniquement aux membres de la classe mère.
Cette informations va nous être très précieuse, surtout lorsque nous allons faire appel à des classes héritées qui ont besoin d'être instanciées.
Vous avez deux choix possible dans notre exemple : créer un constructeur dans "instrument" ou non. Si vous décidez de ne pas en mettre cette classe va être considérée comme abstraite (le chapitre d'après).
En revanche si vous décidez de mettre un constructeur, il va falloir instancier la classe mère au même moment que la classe fille.
Bon, arrêtons la théorie attaquons tout de suite la pratique pour que vous puissiez voir concrètement à quoi ça ressemble.
Code : VB.NET 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | Public Class Instrument
Private _Notes() As Integer
Sub New(ByVal Notes() as Integer)
_Notes = Notes
End Sub
End Class
Public Class Guitare
Inherits Instrument 'Hérite d'instrument
Private _NbCordes As Integer
Sub New(ByVal Notes() As Integer, ByVal NbCordes As Integer)
MyBase.New(Notes) 'On instancie la mère
_NbCordes = NbCordes
End Sub
End Class
|
Dans ce petit bout de code j'ai crée deux classes : "Instrument" et "Guitare".
La classe Instrument est la classe mère, elle a un attribut
_Notes et un constructeur.
La classe Guitare est la classe fille, elle a également un attribut
_NbCordes et un constructeur.
La ligne
Inherits Instrument
indique que la classe hérite d'"Instrument". Et lors de l'instanciation de la classe fille, le constructeur de la classe mère est lui aussi appelé via
MyBase.New(Notes)
.