QCM – Paradigmes, Programmation Orientée Objet et Identification des Classes

Présentation & objectifs

Les quiz suivants sont là pour vous aider à vérifier que vous avez compris les articles que vous deviez étudier.
À la fin d’un quiz, des explications vous seront données sur vos réponses.
Si certaines sont fausses, vous aurez la possibilité de cliquer sur la question ratée pour réessayer.

Ces quiz sont fournis pour l’auto-évaluation et ne seront ni notés ni stockés.

N’hésitez pas à poser vos questions sur le serveur Discord pour toute précision ou explication !

# Quel est le principal objectif du paradigme orienté objet ? 1. [ ] A. Minimiser le nombre de lignes de code > ❌ Même si la factorisation via l'héritage peut réduire le nombre de code, la définition de classes, constructeurs, etc. peut s'avérer verbeuse. 1. [ ] B. Accélérer l’exécution des programmes > ❌ La POO n'a pas d'impact sur l'exécution de programmes. 1. [x] C. Structurer le code autour des objets pour faciliter la maintenance > ✅ Le paradigme POO a comme vocation première de structurer le code autour de classes avec un regroupement thématique des données et des fonctionnalités. 1. [ ] D. Remplacer complètement la programmation procédurale > ❌ Le contenu des méthodes reste défini selon le paradigme de la programmation procédurale. # Parmi les affirmations suivantes sur les **objets en POO**, lesquelles sont vraies ? - [x] A. Un objet contient des attributs et des méthodes > ✅ Un objet contient les données communes aux instances (variables de classe) et les données qui leur sont propres (variables d'instance), de même pour les méthodes. - [ ] B. Un objet peut contenir uniquement du code, jamais de données > ❌ Un objet intègre les données de la classe (variables de classe) et ses propres données (variables d'instance). - [x] C. Un objet est toujours une instance d'une classe > ✅ Un objet est par définition une instance d'une classe. - [ ] D. Un objet ne peut pas interagir avec d'autres objets > ❌ Un objet est défini par ses données et ses méthodes, ses données pouvant être des références vers d'autres objets avec lesquels il interagit. # Quel mot-clé est utilisé pour désigner l’instance courante dans une méthode de classe ? 1. [ ] A. `this` > ❌ Ça, c'est en Java. 1. [ ] B. `obj` > ❌ Pas un mot-clé du langage Python 1. [x] C. `self` > ✅ Exact, ce mot-clé est une référence vers l'adresse de l'objet courant. Il correspond au premier argument de chaque méthode. 1. [ ] D. `me` > ❌ Pas un mot-clé du langage Python ## Quels sont les signaux d'alerte pouvant indiquer un mauvais choix de classe ? - [x] A. Le nom de la classe est un verbe > ✅ Les classes représentent des entités (noms), pas des actions (verbes). Un nom de classe verbale indique souvent qu'il s'agit plutôt d'une fonction. - [x] B. La classe a plusieurs responsabilités non liées > ✅ Selon le principe de responsabilité unique, une classe doit avoir une seule raison de changer. Plusieurs responsabilités non liées violent ce principe. - [ ] C. La classe possède un seul attribut > ❌ Une classe peut légitimement n'avoir qu'un seul attribut si cela correspond à son domaine de responsabilité. Ce n'est pas un signal d'alerte en soi. - [x] D. La classe fait uniquement une action spécifique comme "imprimer" > ✅ Une classe qui ne fait qu'une action spécifique devrait probablement être une fonction plutôt qu'une classe. Les classes regroupent données et comportements. # Dans un programme procédural, quelles sont les difficultés rencontrées lors de l'ajout de nouvelles règles spécifiques à certains types de données ? 1. [ ] A. Il faut forcément réécrire tout le programme > ❌ Il n'est pas nécessaire de réécrire tout le programme, mais les modifications peuvent être dispersées et difficiles à localiser dans différentes fonctions du code. 1. [x] B. Il est complexe de localiser les modifications à faire dans les fonctions existantes > ✅ En programmation procédurale, la logique spécifique à un type de données est dispersée dans plusieurs fonctions, rendant les modifications difficiles à localiser et augmentant le risque d'erreurs. 1. [ ] C. Le programme ne peut pas être compilé à nouveau > ❌ La compilation n'est pas affectée par l'ajout de nouvelles règles. C'est plutôt une question de maintenance et d'organisation du code, pas de capacité technique. 1. [ ] D. Les variables globales sont interdites > ❌ Les variables globales ne sont pas interdites en programmation procédurale, bien qu'elles soient déconseillées pour d'autres raisons liées à la maintenabilité du code. # Quelle est la définition correcte d'une **classe** en POO ? 1. [ ] A. Un conteneur de variables globales > ❌ Une classe n'est pas un simple conteneur de variables globales. Elle encapsule des données et des comportements liés dans une structure cohérente, ce qui est très différent des variables globales dispersées. 1. [ ] B. Une entité qui contient uniquement des fonctions > ❌ Une classe contient à la fois des données (attributs) et des fonctions (méthodes), pas seulement des fonctions. L'encapsulation des données est un aspect fondamental des classes. 1. [x] C. Une structure définissant les attributs et méthodes d'une famille d'objets > ✅ C'est la définition correcte : une classe est un modèle ou un plan qui définit les caractéristiques (attributs) et comportements (méthodes) communs à un ensemble d'objets de même type. 1. [ ] D. Une fonction principale du programme > ❌ Une classe n'est pas une fonction principale. C'est un modèle pour créer des objets avec des propriétés et comportements spécifiques, alors qu'une fonction principale est le point d'entrée d'un programme. # À quoi sert **l'héritage** dans la POO ? - [ ] A. À partager les données entre toutes les classes > ❌ L'héritage ne partage pas les données entre toutes les classes, mais crée une relation hiérarchique spécifique entre classe mère et classes filles. Il ne s'agit pas d'un partage global. - [x] B. À factoriser du code commun dans une classe mère > ✅ L'héritage permet de définir du code commun (attributs et méthodes) dans une classe mère, évitant la duplication dans les classes filles qui héritent de ces éléments. - [x] C. À créer des relations hiérarchiques entre classes > ✅ L'héritage établit une relation "est-un" entre la classe fille et la classe mère, créant une hiérarchie logique qui reflète les relations du domaine métier. - [ ] D. À supprimer les constructeurs inutiles > ❌ L'héritage n'a pas pour but de supprimer les constructeurs. Les classes filles peuvent avoir leurs propres constructeurs et peuvent appeler le constructeur de la classe mère. # Quels éléments faut-il identifier pour chaque classe candidate dans un programme orienté objet ? - [x] A. Ses responsabilités > ✅ Identifier les responsabilités d'une classe est essentiel pour définir ce qu'elle doit faire et respecter le principe de responsabilité unique. Cela aide à déterminer si la classe a une mission claire et cohérente. - [ ] B. Ses méthodes uniquement > ❌ Il ne faut pas identifier que les méthodes, mais aussi les attributs, responsabilités et relations avec d'autres classes. Une approche complète est nécessaire pour bien concevoir une classe. - [x] C. Ses associations avec d'autres classes > ✅ Les associations définissent comment les classes interagissent entre elles, ce qui est crucial pour la conception du système. Elles permettent de comprendre les dépendances et collaborations. - [ ] D. Son nom et son type > ❌ Le nom et le type ne suffisent pas. Il faut une analyse plus profonde des responsabilités, attributs, méthodes et relations pour bien concevoir une classe. # Quelle différence majeure distingue un programme procédural d'un programme orienté objet ? 1. [ ] A. L'utilisation exclusive du langage Python > ❌ Les deux paradigmes (procédural et orienté objet) peuvent être utilisés dans de nombreux langages de programmation, pas seulement Python. Ce n'est pas une différence de paradigme mais de langage. 1. [x] B. Le regroupement des données et fonctions dans des objets en POO > ✅ C'est la différence fondamentale ! En programmation procédurale, les données et les fonctions qui les manipulent sont séparées. En POO, elles sont encapsulées ensemble dans des objets. 1. [ ] C. La présence de commentaires dans le code > ❌ Les commentaires peuvent être présents dans les deux paradigmes. Ils ne sont pas une caractéristique distinctive de l'un ou l'autre. 1. [ ] D. L'absence d'algorithmes > ❌ Les algorithmes sont présents dans les deux paradigmes. La POO n'élimine pas les algorithmes, elle les organise différemment en les plaçant dans les méthodes des classes. # Pourquoi la POO est-elle mieux adaptée aux problèmes complexes ? - [ ] A. Elle permet l'utilisation de variables globales > ❌ La POO favorise l'encapsulation et décourage l'utilisation de variables globales, qui rendent le code plus difficile à maintenir et peuvent créer des effets de bord indésirables. - [x] B. Elle rend le code plus lisible et maintenable > ✅ En regroupant les données et comportements liés dans des classes, la POO structure le code de manière logique, facilitant la compréhension et la maintenance du système. - [x] C. Elle facilite la réutilisation du code > ✅ Grâce à l'héritage et l'encapsulation, les classes peuvent être réutilisées et étendues dans différents contextes, réduisant la duplication de code. - [ ] D. Elle interdit l'utilisation de dictionnaires > ❌ La POO n'interdit pas l'utilisation de dictionnaires ou d'autres structures de données. Ces outils peuvent être utilisés à l'intérieur des classes selon les besoins.