L'abstraction en POO : Masquer la complexité
Vous conduisez une voiture en utilisant quelques actions simples. Vous appuyez sur l'accélérateur. Vous tournez le volant. Vous freinez.
Vous n'avez pas besoin de savoir comment le carburant entre dans le moteur. Vous n'avez pas besoin de comprendre comment les pistons bougent ou comment les vitesses passent. La voiture vous cache ces détails. Vous utilisez une interface simple pour contrôler une machine complexe.
Le logiciel fonctionne de la même manière.
Pensez à l'envoi d'un e-mail. Vous appelez une seule commande : emailService.send().
En coulisses, beaucoup de choses se passent :
- Le système valide l'adresse.
- Il crée une connexion SMTP.
- Il s'authentifie auprès d'un fournisseur.
- Il construit le message.
- Il gère les tentatives de réessai si la première tentative échoue.
Vous n'avez pas besoin de voir ces étapes. Tout ce qui vous importe, c'est que l'e-mail soit envoyé.
Si vous n'utilisiez pas l'abstraction, votre code ressemblerait à ceci :
connect()authenticate()buildMessage()sendMessage()disconnect()
Faire cela à chaque fois crée des problèmes. Chaque partie de votre code en sait trop. Si vous changez de fournisseur de messagerie, vous devez mettre à jour chaque ligne de code qui envoie des e-mails. Votre système devient difficile à modifier.
L'abstraction résout ce problème. Elle montre ce qu'un objet fait, mais cache la manière dont il fonctionne.
Vous exposez une interface simple. L'appelant reste concentré sur la tâche. L'implémentation reste cachée. Cela permet de garder votre code découplé et facile à maintenir.
On confond souvent l'abstraction avec l'encapsulation.
L'encapsulation pose la question : Qui peut modifier ces données ? Elle protège l'état interne. L'abstraction pose la question : De quels détails l'utilisateur a-t-il besoin ? Elle masque la complexité.
Elles travaillent ensemble pour construire de meilleurs systèmes.
Ensuite, nous aborderons l'héritage. Nous répondrons à une question : si les objets partagent un comportement, avez-vous besoin d'écrire deux fois le même code ?