MON 2.2 - Programmation Orientée Objet (POO)

Tags :
  • MON
  • info
  • POO
Auteur :
  • Inès Kebbab
2024-2025

Bases de la POO avec Python, quelles différences avec la POO en C/C++ ?

L'objectif de ce MON est de comprendre les bases de la Programmation Objet à partir du cours de M. Brucker. Ce cours utilisant Python et ayant suivi l'électif sur le C++ en 2A, je souhaite identifier les différences possibles.

Aussi, l'objectif est de comprendre dans quels cas utilsés de la programmation orientée objet est recommandée, les liens et différences avec d'autres langages dits "non typés", des langages de programmation "impérative" VS "fonctionnelle", ou de programmation évenementielle (n'ayant jamais mis de définition sur chacun de ces termes).

indiquer les MON/POK en lien

Contenu

Défintions et différences entre les types de langages

En commençant mon étude, je me suis rendue compte que j'étais très confuse sur les différences et les significations entre les termes énoncés ci-dessus, j'opposais par exemple programmation orientée objet et langage non typé. Pour commencer, je propose de refaire un point sur les définitions et cas d'usages.

Programmation Orientée Objet et cas d'usages

La programmation objet est un principe de programmation utilisé par la quasi-totalité des langages de programmation (avec des nuances et subtilités entre eux). Elle respose sur l'objectif d'écrire du code qui soit :

La programmation orientée objet est souvent opposée à la programmation fonctionnelle dans laquelle les instructions n'ont pas besoin de suivre un ordre particulier lors de l'exécution pour qu'elle réussisse.

Quels langages sont basés sur de la POO ? En fait il est utilisé dans une très grande partie des langages que j'utilise déjà, et notamment JavaScript, C++, Java et Python.

Pourquoi et quand utiliser de la POO ?

La POO présente les avantages suivants :

La programmation fonctionnelle s’inspire dans son écriture des fonctions mathématiques, et a une application plus abstraite. Elle est donc très appréciée pour manipuler et analyser de gros volumes de données mais moins pertinente pour développer une application utile au quotidien.

Un troisième type de programmation, la programmation procédurale, est une méthode qui procède à une analyse descendante pour résoudre un problème, en décomposant le problème en sous-problèmes jusqu’à ce que des actions très simples, aussi appelées procédures, soient identifiées. Cette méthode de programmation peut être très lourde, surtout sur des projets complexes. Elle est adaptée pour des programmes courts.

La POO est donc la méthode à privilégier pour écrire des programmes de taille importante, avec des données complexes.

Kézako un langage typé fortement ou faiblement ?

Une fois encore, la nuance dépasse le "typé" ou "non typé".

Un langage fortement typé (comme PHP) va vérifier à la compilation la cohérence entre les données et les types des objets. Cela permet de prévenir les erreurs à l'exécution, comme des erreurs de calcul et des exceptions. Ces langages sont a priori moins permissifs et demandent donc plus de rigueur.

Avec un langage à typage dynamique (comme Python ou JavaScript), le typage est affecté au moment de l'exécution du code. Il permet d'être plus souple et rapide pour coder, d'autant plus que les développeurs peuvent manquer d'informations sur le type de la donnée ; néanmoins, cela rend plus difficile le debug. Cela a aussi un impact sur la consommation de mémoire et temps de processeur.

Un langage dit non typé, ou faiblement typé, se préoccupe peu des types. Cela offre de la flexibilité sur la manipulation des données. Il y a aussi une notion d'inférences de types pour permettre dans des langages typés de demander au compilateur de déterminer le type (une fonctionnalité à utiliser avec modération).

Programmation déclarative VS impérative

Dans un système impératif, les variables doivent être définies, remplies, ajoutées, formatées et affichées, etc. et on se concentre sur le comment. (ex. Python, PHP, Java, JavaScript, C++)

Dans le système déclaratif, on se concentre sur le contenu et le quoi. Par exemple, les pages HTML sont déclaratives car elles décrivent ce que contient une page (texte, titres, paragraphes, etc.) et non comment les afficher (positionnement, couleurs, polices de caractères…). (Ex. HMTL)

Kézako : les autres définitions

Programmation événementielle

La programmation événementielle est un paradigme de programmation très utiliser dans les interfaces graphiques. Cette méthode consiste à réagir à des événements issus du programme comme de cliquer sur un bouton, appuyer sur une touche, etc. Source

Langage interprété VS natif

Un langage interprété nécessite un interpréteur pour pouvoir exécuter le code. (ex. Python, HTML).

Les notions de bases de la POO

Pour reprendre la programmation Orientée Objet sur de bonnes bases, j'ai suivi le cours de F. Brucker utilisant Python et trouvable au lien suivant : Programmation Objet

Ce qu'il faut en retenir, dans l'esprit de la POO

Les design patterns, ou façons de faire, sont pour ainsi dire de l'algorithmie objet : ils permettent de résoudre nombre de problèmes courants en développement et d'éviter les erreurs classiques, aussi appelées anti-pattern.

Il existe 3 grands types de design pattern:

  • les types creational qui créent des objets.

  • les types structural qui mettent les objets en relation.

  • les types behavioural qui regroupent les objets ayant même comportement.

Le cours aborde aussi le test son code. J'ai noté le point de vigilence suivant avec la POO :

Attention, dans la mesure du possible ne pas utiliser les attributs de classes. On ne vérifie que les résultats de la méthode, pas comment l'objet stocke ses informations.

Chaque méthode doit être testé.

Chaque test doit être indépendant.

Avantages et inconvénients de la POO

✅ Les avantages :

❌ Les inconvénients :

Comparaison Python VS C++

🐍 Python:

🧮 C++:

Conclusion du MON

J'ai apprécié lors de ce MON revoir les bases de la programmation orientée objet avec des exemples concrets et clairs.

De plus, cela m'a permis de refaire un point sur les définitions sur les différentes typologies de programmation.