L'héritage ou comment utiliser la vie comme modèle dans la programmation
En quoi l'évolution peut aider la programmation ?
Eh bonjour les omnilogistes !
Aujourd'hui j'ai trouvé un nouveau sujet assez sympa à traiter et qui parle de biologie autant que d'informatique ! J'adoooooore mélanger ces deux matières. (1).
On se recentre ! L'Héritage, un bien grand mot. D'abord, qu'est-ce que l'héritage ? … Demandons à ma rousse préférée :
Bien(s) acquis ou transmis par voie de succession.
Ce qu'on tient de prédécesseurs, de générations antérieures, sur le plan du caractère, de l'idéologie, etc.
Ce qui est laissé par les prédécesseurs et qui est pénible à assumer.
Fiou ! Pas super super tout ça. Ça touche pas tous les domaines ! Bon, essayons de trouver mieux par nous même :
— C'est l'or que mon papa va me donner quand il partira en fumée.
… Mouais, un peu trop auvergnat pour être vraiment universellement vrai, mais dans l'idée c'est ça.
— Tout ce qui provient de nos ancêtres et qui appartient à notre matériel génétique(2).
On y touche, une définition qui me plaît. À vrai dire, l'héritage en biologie s'étudie en parlant d'ancêtre assez lointain. C'est une sous-matière de la biologie qui se charge d'étudier ceci : la phylogénie !
Bon… Larousse ! Succession des espèces animales ou végétales que l'on suppose descendre les unes des autres et qui constituent un phylum.
Je vais arrêter d'aller chercher des infos chez les roux moi(3)…
En bref, de par mes connaissances, je pourrais dire que la phylogénétique est l'art de regrouper les espèces non plus par ressemblance mais par « lien de parenté ».
Pour faire court, le principe sera de rechercher les ancêtres communs entre différentes espèces. Pour cela il faut d'abord chercher des caractéristiques communes (exemple : avoir 4 membres) ce qui signifie que tous les animaux ayant 4 membres ont un ancêtre commun THÉORIQUE qui aura été le premier à avoir 4 membres.
Après cela il faut corréler. On a déjà tout un tas de caractéristiques qui lient des animaux entre eux, il faut générer un arbre qui part du premier animal (l'ancêtre commun à tous les animaux) comme tronc puis qui se ramifie à chaque apparition d'un ancêtre commun. À chaque nouveau nœud apparaît une nouvelle caractéristique, et les nœuds représentent les ancêtres communs. Ainsi on place l'homme près du gorille parce qu'ils ont tous les deux des ongles, un placenta, un amnios, des doigts et des mâchoires parmi leurs caractéristiques. Alors, on est en droit de se poser la question suivante :
Pourquoi avoir choisi cet ordre ? Pourquoi est-il plus vrai que les autres ?
C'est une question de logique : il faut éviter qu'un caractère apparaisse plusieurs fois. En effet, le cas où un caractère apparaît dans plusieurs branches différentes est assez rare et dans ce cas là on va se baser sur le fait qu'il y a plus de chance que le nombre de « transformations » soit petit, c'est le principe de parcimonie.
Il faut faire attention à deux points bien précis :
- un arbre phylogénétique est créé en se basant sur un certain nombre d'animaux et un certain nombre de caractéristiques. En changeant de caractéristiques, ou d'animaux, on obtient parfois un ordre différent. L'arbre phylogénétique le plus juste regroupe toutes les caractéristiques et tous les animaux, si on s'arrête au règne animal.
- toutes les branches sont dressées sur le même niveau pour ne pas oublier que, au niveau de l'évolution, les animaux représentés sont tous au même niveau (oui, la lamproie et l'homme sont aussi évolués l'un que l'autre).
Mais je divague(4) grassement. Le sujet c'est l'héritage ! Donc ! On hérite de nos ancêtres des caractéristiques communes qui dans un sens nous définissent en tant qu'humain. Eh bah en programmation, on a fait la même chose !
Une forme de programmation très répandue actuellement est la POO (Programmation Orientée Objet). C'est une forme de programmation où on privilégie l'utilisation « d'objets » qui ont des caractéristiques (tiens ?) et des méthodes. Par exemple l'objet voiture(5), eh bien on a des caractéristiques comme la couleur, la vitesse maximale, la forme, et des méthodes comme « accélérer », « ralentir », « klaxonner ».
Mais « voiture », c'est un objet vaste, qui peut être divisé en plein de catégories comme « voiture de course » : elle peut toujours accélérer, ralentir, klaxonner, mais la vitesse maximale est différente. On remarque l'apparition d'un spoiler arrière, la place pour le conducteur a changé. Ou encore « voiture sans permis » : là encore on peut faire ce que fait une voiture, mais la vitesse est bridée à 50km/h et la voiture sera moins large. De plus le conducteur n'aura plus besoin d'un permis pour pouvoir l'utiliser.
C'est ça l'héritage en programmation : pouvoir créer des objets qui héritent d'objets plus globaux pour ne pas avoir à les redéfinir entièrement et pour mettre de l'ordre dans la logique souvent complexe d'un programme(6).
Un avantage certain de l'héritage se remarque quand on travaille par exemple sur l'apparence d'un programme : si on veut créer une zone de texte particulière, qui possède des caractéristiques plus précises qu'une zone de texte telle qu'elle nous est donnée dans le langage utilisé, on peut créer un objet « TextBoxMaisEnMieux » qui héritera de l'objet « TextBox » (zone de texte) mais avec des trucs en plus !
- (1) ↑ D'ailleurs, tout bon alchimiste saurait que mélanger deux matières telles que celles-ci ne peut donner que de l'or !
- (2) ↑ Comprenez dans l'ADN, en quelque sorte.
- (3) ↑ Par acquit de conscience j'ai vraiment laissé les définitions Larousse pour ce texte, mais il est vrai que je m'attendais à mieux.
- (4) ↑ Vague !
- (5) ↑ Me demandez pas à quoi ça sert de programmer l'objet voiture, il suffit de jouer à Need for Speed pour le comprendre.
- (6) ↑ Il sera plus facile d'appréhender un objet si son nom est clair et qu'il hérite d'un autre objet possédant un nom clair.