Meilleure réponse
Pensez à une automobile. Nous pouvons (et le faisons souvent) conduire une automobile sans comprendre comment cela fonctionne. La plupart des gens ne regardent jamais le moteur de la voiture, qui vit sous le capot (nous lappelons le capot en Amérique, mais par exemple, les Britanniques lappellent le capot ).
En plus du moteur, il y a une transmission , qui prend la puissance générée par le moteur et la transmet à la transmission , qui prend finalement cette puissance et fait tourner les roues. La plupart des gens ne comprennent aucun de ces détails, ni nen ont besoin pour conduire une automobile.
En tant que programmeur, il est souvent utile de savoir ce qui se passe sous le capot, car cela vous donne un aperçu dans des choses que vous ne pouvez pas voir.
Deux exemples Python qui peuvent savérer utiles:
Les variables en Python sont souvent expliquées aux programmeurs débutants comme étant des boîtes nommées dans lesquelles vous pouvez placer des données. Ainsi, lorsque vous écrivez
x = 1
, vous créez en fait une boîte en la nommant x
, et mettre un 1 dans la boîte. Lorsque vous inspecterez ultérieurement la boîte, vous constaterez quil y a un 1 dedans.
Cependant, ce nest pas vraiment ce qui se passe sous le capot . La variable x est une référence ou étiquette qui vous indique où le 1 est réellement stocké en mémoire. Pensez à un pense-bête avec un «x» dessus, qui est collé sur la boîte contenant le 1. Si vous décidez de mettre autre chose dans la boîte, peut-être un 2, Python créera une toute nouvelle boîte et déplacera le collant note de la première case à la seconde. Ceci est facile à démontrer en utilisant la fonction id()
de Python, qui me dit effectivement où vit un objet dans la mémoire de Python (ce nest pas strictement vrai, mais cela nécessite une digression qui nest plus utile pour répondre à la question).
>>> x = 1
>>> id(x)
4501308752
>>> x = 2
>>> id(x)
4501308784
Vous pouvez voir que x
était à un certain endroit et quand Jai changé son contenu, x
déplacé. Pourquoi cela se produit est une autre digression qui nest pas non plus importante ici. Le fait est que x sest déplacé dans le sens où les données auxquelles x fait référence se trouvent maintenant dans un endroit différent.
Les programmeurs Python débutants ne le savent pas et, plus important encore, ils nont pas besoin de le savoir . Cest parfaitement bien dutiliser lanalogie dune boîte nommée.
Le deuxième exemple est plus complexe et sera potentiellement difficile à comprendre pour les nouveaux venus.
Le modèle de données Python mappe un certain nombre de fonctions dites intégrées aux méthodes de classe sous le capot . Jaime lexpliquer en utilisant lémission de télévision Stranger Things comme point de référence. Dans cette émission, il y a un upside down , qui est comme un autre univers dans lequel les choses sont reconnaissables, mais gâchées. Considérez la fonction Python len()
. Ceci est répertorié dans le manuel sous la forme dune Fonction intégrée qui renvoie le nombre déléments dans quelque chose. Vous pouvez calculer la longueur dun string
(qui est un conteneur ), un list
(également un conteneur), etc.
Les programmeurs Python débutants apprennent généralement que len()
est simplement une fonction intégrée et fonctionne sur nimporte quel conteneur. En fait, ce qui se passe sous le capot , cest que Python traduit un appel à len()
en une méthode dans le à lenvers appelé \_\_len\_\_()
. Si lobjet que vous passez à len()
a une méthode \_\_len\_\_()
, cela fonctionnera. Sinon, ce ne sera pas le cas. Cest pourquoi, par exemple, on ne peut pas appeler len()
sur un entier:
>>> len(5)
Traceback (most recent call last):
File "
TypeError: object of type "int" has no len()
Le programmeur Python débutant comprend que cela signifie quun entier nest pas un conteneur, et donc que rien ne compte.Mais il est facile de créer un type entier pour lequel nous pouvons appeler la fonction len()
:
>>> class MyInt(int):
... # create an "upside down" method for len()
... def \_\_len\_\_(self):
... return 1
...
>>> x = MyInt(13)
>>> x
13
>>> len(x)
1
Jai créé un nouveau type appelé MyInt
, jai défini une variable x
de type MyInt
, et a pu appeler len()
. Mon len()
est assez inutile (), mais cela prouve le fait que len()
peut être appelé pour nimporte quel objet, pas seulement un «conteneur. » En pratique, en tant que programmeur, je pourrais créer mon propre objet Organization
, qui représente une entreprise ou une autre organisation. et je pourrais souhaiter pouvoir appeler len()
sur un objet Organization
et lui faire renvoyer le nombre dannées dexistence de lorganisation .
Donc, en comprenant ce qui se passe sous le capot, nous pouvons aller plus loin en tant que programmeurs.
Réponse
Je pense que dautres ont donné de bonnes explications sur ce que » sous le capot »signifie en général.
Quelques notes pour clarifier: un ordinateur, dans sa forme la plus simple, est le processeur et la mémoire principale. Les processeurs lisent des instructions très particulières et déplacent les valeurs en mémoire environ. La mémoire est divisée en dinnombrables cellules, chaque cellule a une adresse.
«Sous le capot», la mémoire de votre ordinateur ressemble à ceci:
(Source: https://chortle.ccsu.edu/AssemblyTutorial/Chapter-10/memory01.gif)
Lorsque vous travaillez dans un langage de haut niveau (je suppose que vous travaillez avec Java ou Python ou quelque chose de similaire), il est difficile de comprendre pourquoi les choses sont comme elles sont. Par exemple, considérons une liste liée. On vous a peut-être montré une image de bulles avec des nombres avec une flèche pointant vers une autre bulle à côté.
Quelque chose comme ça:
Tout cela est très bien pour comprendre le fonctionnement des listes chaînées par rapport, par exemple, à un tableau; cependant, «sous le capot», cest bien différent.
Comme nous lavons dit, tout dans lordinateur est constitué de cellules de mémoire avec des valeurs. Un nœud de liste chaînée, alors quil est visualisé près de son voisin, peut être à des centaines ou des milliers doctets de son voisin. Sous le capot, les flèches que vous voyez dans limage sont en fait des pointeurs et un pointeur peut référencer nimporte quelle cellule en mémoire. En particulier, le pointeur fait référence à ladresse du nœud suivant dans la liste.
Jespère que cet exemple aidera à clarifier de quoi il parle.