Je répondrai à votre question par une question; lorsque vous avez conduit au travail ce matin (je suppose que vous l'avez fait en fait), vous êtes-vous soucié exactement de la façon dont le moteur a ouvert les soupapes pour laisser entrer les mélanges air-carburant, puis les a allumées? Non. Vous ne vous souciez pas du fonctionnement du moteur de votre voiture lorsque vous conduisez sur la route. Vous souciez qu'il fait le travail.
Supposons qu'un jour votre voiture ne fonctionne pas. Ne démarre pas, lance une tige, brise une ceinture, laboure inexplicablement cette barrière de béton sans aucune faute de votre part pendant que vous étiez occupé à envoyer des SMS. Maintenant, vous avez besoin d'une nouvelle voiture (au moins temporairement). Vous souciez-vous exactement du fonctionnement de cette nouvelle voiture? Non. Ce qui vous importe, c'est d'abord que cela fonctionne, et deuxièmement que vous pouvez utiliser les mêmes connaissances et compétences que vous avez utilisées pour conduire votre ancienne voiture pour conduire la nouvelle. Idéalement, il devrait vous sembler qu'il n'y a eu aucun changement dans la voiture que vous conduisez. De façon réaliste, le fonctionnement de cette nouvelle voiture devrait vous donner le moins de "surprises" possible.
Ces principes de base sont le principe de base derrière l'encapsulation et l'abstraction. La connaissance de la façon dont un objet fait ce qu'il fait ne devrait pas être une condition préalable à son utilisation pour faire ce qu'il fait. Même en programmation informatique, les détails des chemins électriques au sein du CPU exécutant votre programme sont résumés derrière au moins une demi-douzaine de couches d'instructions d'E / S, de pilotes, de logiciels OS et d'exécution. De nombreux ingénieurs logiciels très performants écrivent du bon code sans se soucier une seule fois de l'architecture matérielle exacte, ni même de la construction du système d'exploitation, qui l'exécutera. Y compris moi.
L'encapsulation / la dissimulation de l'information permet à la mentalité de "ne pas se soucier de la façon dont elle le fait, juste de s'en soucier". Votre objet doit exposer ce qui est utile au consommateur, d'une manière que le consommateur puisse facilement consommer. Maintenant, dans le monde réel, cela ne signifie pas qu'une voiture ne devrait pas donner à l'utilisateur des informations sur le fonctionnement interne, ou que la voiture ne devrait permettre à l'utilisateur que les fonctionnalités les plus élémentaires comme l'allumage, le volant, et pédales. Toutes les voitures ont des compteurs de vitesse et des jauges de carburant, des tachymètres, des lumières idiotes et d'autres commentaires. Pratiquement toutes les voitures ont également des commutateurs pour divers sous-systèmes indépendants, tels que les phares, les clignotants, la radio, le réglage des sièges, etc. Certaines voitures permettent une entrée utilisateur assez ésotérique, comme la sensibilité du différentiel central à glissement limité. Dans tous les cas, si vous en savez assez, vous pouvez l'ouvrir et changer les choses pour le faire fonctionner d'une manière légèrement différente. Mais, dans la plupart des cas, peut-être, juste peut-être, l'utilisateur ne devrait pas être en mesure de contrôler directement et indépendamment les pompes à carburant de l'intérieur de la cabine? Peut-être, juste peut-être, que l'utilisateur ne devrait pas être en mesure d'activer ses feux de freinage sans appuyer sur la pédale de frein?
L'abstraction permet la mentalité "ce n'est pas la même chose que cela, mais parce qu'ils sont tous les deux XI, je peux les utiliser comme je le ferais avec n'importe quelle mentalité X". Si votre objet hérite ou implémente une abstraction, vos consommateurs doivent s'attendre à ce que votre implémentation produise le même résultat ou un résultat similaire à d'autres implémentations connues de l'abstraction. Une Toyota Camry et une Ford Fusion sont toutes deux des «voitures». En tant que tels, ils ont un ensemble commun de fonctionnalités attendues, comme un volant. Tournez-le dans le sens antihoraire, la voiture va à gauche. Tournez-le dans le sens des aiguilles d'une montre, la voiture va à droite. Vous pouvez monter dans n'importe quelle voiture aux États-Unis et vous attendre à ce que la voiture ait un volant et au moins deux pédales, celle de droite étant la pédale "car go" et celle du centre étant la pédale "car stops" .
Un corollaire de l'abstraction est la "théorie du moindre étonnement". Si vous preniez le volant d'une nouvelle voiture pour un essai routier, tourniez le volant dans le sens des aiguilles d'une montre et que la voiture tournait à gauche, vous seriez assez étonné pour le moins. Vous accuseriez le revendeur de colporter un point de vente et vous auriez peu de chances d'écouter l'une de ses raisons pour lesquelles le nouveau comportement est "meilleur" que ce à quoi vous êtes habitué, ou si ce comportement est "documenté" ou comment " transparent "est le système de contrôle. Malgré cette nouvelle voiture et toutes les autres que vous avez conduites étant toujours des "voitures", lorsque vous conduisez cette voiture, vous devez changer certains concepts fondamentaux de la façon dont une voiture est censée être conduite afin de conduire la nouvelle voiture avec succès. C'est généralement une mauvaise chose, et cela ne se produit que lorsqu'il y a un avantage intuitif au nouveau paradigme. L'ajout de ceintures de sécurité est peut-être un bon exemple; Il y a 50 ans, vous venez de monter et de partir, mais maintenant vous devez boucler votre ceinture, l'avantage intuitif étant que vous ne passez pas par le pare-brise ou sur le siège passager en cas d'accident. Même alors, les conducteurs ont résisté; de nombreux propriétaires de voitures ont coupé les ceintures de sécurité de la voiture jusqu'à l'adoption de lois rendant leur utilisation obligatoire.