wayground logo

Free Printable Worksheets

NEW

Font size

S
M
L
XL
Worksheets

My Quiz sur l'héritage et la composition

Total questions: 30

Worksheet time: 15mins

Name
Class
Date
1.

Quand devriez-vous préférer la composition à l'héritage ?

a)

Lorsque vous souhaitez partager du code entre des classes non liées

b)

Lorsque vous avez une relation 'est-un'

c)

Lorsque vous souhaitez éviter un couplage fort

d)

Lorsque vous utilisez PHP 8 ou une version ultérieure

2.

Quel est le principal problème de l'héritage multiple (non pris en charge en PHP) ?

a)

Cela ralentit les performances

b)

Cela crée des conflits de méthode (problème du diamant)

c)

Cela nécessite plus de mémoire

d)

Ce n'est pas sécurisé

3.

Dans quel cas l'héritage est-il le plus approprié ?

a)

Pour partager un comportement entre User et Product

b)

Pour la relation BasicUser → ProUser (spécialisation)

c)

Pour injecter une dépendance

d)

Pour créer une interface commune

4.

Quel principe SOLID est basé sur la composition ?

a)

Responsabilité unique

b)

Ouvert/Fermé

c)

Substitution de Liskov

d)

Inversion de dépendance

5.

Quelle est la différence entre 'a-un' (composition) et 'est-un' (héritage) ?

a)

'a-un' = possession, 'est-un' = spécialisation

b)

'a-un' = héritage, 'est-un' = interface

c)

'a-un' = statique, 'est-un' = dynamique

d)

'a-un' = public, 'est-un' = privé

6.

Pourquoi dit-on que la composition est plus flexible que l'héritage ?

a)

Parce qu'elle utilise moins de mémoire

b)

Parce qu'elle permet de changer le comportement à l'exécution

c)

Parce qu'elle est plus rapide

d)

Parce qu'elle est compatible avec tous les frameworks

7.

Dans PhotoSphere, pourquoi BasicUser → ProUser → Moderator → Admin utilise-t-il l'héritage ?

a)

Pour économiser du code

b)

Pour avoir une hiérarchie stricte des permissions

c)

Parce que c'est plus rapide

d)

Pour utiliser moins de classes

8.

Quand utiliser un trait au lieu de l'héritage ?

a)

Pour partager du code entre des classes non liées

b)

Pour créer une hiérarchie stricte

c)

Pour améliorer les performances

d)

Pour respecter le principe de Liskov

9.

Quelle est la principale différence entre une classe abstraite et une interface ?

a)

Une interface peut avoir des propriétés, une classe abstraite ne peut pas

b)

Une classe abstraite peut avoir des implémentations, une interface ne peut pas

c)

Une interface peut être instanciée, une classe abstraite ne peut pas

d)

Une classe abstraite est plus rapide

10.

Combien d'interfaces une classe peut-elle implémenter ?

a)

Une seule

b)

Maximum deux

c)

Maximum trois

d)

Aucune limite

11.

Quand utiliser une classe abstraite plutôt qu'une interface ?

a)

Lorsque vous voulez forcer l'implémentation de certaines méthodes

b)

Lorsque vous avez du code commun à partager entre les classes enfants

c)

Lorsque vous voulez de meilleures performances

d)

Lorsque vous utilisez PHP 7 ou une version inférieure

12.

Quel mot-clé est utilisé pour hériter d'une classe abstraite ?

a)

implements

b)

extends

c)

uses

d)

inherits

13.

Pouvez-vous instancier directement une classe abstraite ?

a)

Oui, avec new AbstractClass()

b)

Non, elle doit être étendue {extended}

c)

Oui, si elle n'a pas de méthodes abstraites

d)

Non, sauf si vous utilisez une Factory

14.

Quelle est la syntaxe correcte pour une méthode abstraite ?

a)

abstract function method();

b)

function abstract method();

c)

abstract method();

d)

function method() abstract;

15.

Dans PhotoSphere, pourquoi User est-il une classe abstraite ?

a)

Pour pouvoir l'instancier directement

b)

Pour partager du code commun entre BasicUser, ProUser, etc.

c)

Pour améliorer les performances

d)

Pour respecter PSR-12

16.

Quel est le but des interfaces Taggable, Commentable, Likeable ?

a)

Définir un contrat que plusieurs classes peuvent implémenter

b)

Partager du code entre Photo et Album

c)

Améliorer les performances des requêtes

d)

Faciliter le débogage

17.

Quel principe SOLID est respecté en utilisant des interfaces ?

a)

Responsabilité unique

b)

Ségrégation des interfaces

c)

Substitution de Liskov

d)

Ouvert/Fermé

18.

Que se passe-t-il si vous n'implémentez pas toutes les méthodes d'une interface ?

a)

PHP génère un avertissement

b)

PHP génère une erreur fatale

c)

Le code fonctionne mais avec des erreurs

d)

PHP essaie de les implémenter automatiquement

19.

Quel est le but principal du modèle Singleton ?

a)

Créer de nombreuses instances rapidement

b)

Garantir qu'une classe n'a qu'une seule instance

c)

Rendre une classe abstraite

d)

Améliorer les performances des requêtes SQL

20.

Dans PhotoSphere, pourquoi Database utilise-t-il Singleton ?

a)

Pour éviter plusieurs connexions à la base de données

b)

Pour améliorer les performances du cache

c)

Pour respecter le principe Ouvert/Fermé

d)

Pour faciliter les tests unitaires

21.

Comment empêcher plusieurs instanciations dans un Singleton ?

a)

En rendant le constructeur privé

b)

En utilisant le mot-clé 'final'

c)

En implémentant une interface

d)

En utilisant des traits

22.

Quel est le principal risque du Singleton ?

a)

Il consomme trop de mémoire

b)

Il crée un état global difficile à tester

c)

Il ralentit l'exécution

d)

Il n'est pas sécurisé

23.

Quelle méthode est utilisée pour obtenir l'instance dans un Singleton ?

a)

getInstance()

b)

createInstance()

c)

newInstance()

d)

singleton()

24.

Quel est l'avantage principal du modèle Repository ?

a)

Il améliore les performances des requêtes

b)

Il découple la logique métier de l'accès aux données

c)

Il réduit la quantité de code SQL

d)

Il rend les classes plus petites

25.

Dans PhotoSphere, quel est le rôle de UserRepository ?

a)

Gérer les vues HTML pour les utilisateurs

b)

Fournir des méthodes CRUD pour l'entité User

c)

Valider les données utilisateur

d)

Gérer les sessions utilisateur

26.

Quelle méthode typique trouve-t-on dans un Repository ?

a)

find(int $id): ?object

b)

renderView(string $template): string

c)

validate(array $data): bool

d)

sendEmail(string $to): bool

27.

Comment le modèle Repository facilite-t-il les tests unitaires ?

a)

En permettant une simulation facile de l'accès aux données

b)

En réduisant le temps d'exécution des tests

c)

En générant automatiquement des données de test

d)

En fournissant des assertions prédéfinies

28.

Quel modèle de conception est souvent combiné avec Repository ?

a)

Singleton (pour PDO)

b)

Observer (pour les notifications)

c)

Factory (pour créer des entités)

d)

Decorator (pour étendre les fonctionnalités)

29.

Quel est l'avantage d'utiliser des interfaces pour les entités comme Photo et Album ?

a)

Augmenter la taille du code source

b)

Limiter l'utilisation de l'héritage

c)

Permettre une flexibilité dans l'implémentation des fonctionnalités

d)

Obliger toutes les classes à avoir les mêmes propriétés

30.

Pourquoi utiliser un trait pour ajouter une fonctionnalité à plusieurs classes ?

a)

Pour rendre les classes abstraites

b)

Pour améliorer la sécurité

c)

Pour créer une hiérarchie stricte

d)

Pour éviter la duplication de code