NEW
Font size
WorksheetsMy Quiz sur l'héritage et la composition
Total questions: 30
Worksheet time: 15mins
Quand devriez-vous préférer la composition à l'héritage ?
Lorsque vous souhaitez partager du code entre des classes non liées
Lorsque vous avez une relation 'est-un'
Lorsque vous souhaitez éviter un couplage fort
Lorsque vous utilisez PHP 8 ou une version ultérieure
Quel est le principal problème de l'héritage multiple (non pris en charge en PHP) ?
Cela ralentit les performances
Cela crée des conflits de méthode (problème du diamant)
Cela nécessite plus de mémoire
Ce n'est pas sécurisé
Dans quel cas l'héritage est-il le plus approprié ?
Pour partager un comportement entre User et Product
Pour la relation BasicUser → ProUser (spécialisation)
Pour injecter une dépendance
Pour créer une interface commune
Quel principe SOLID est basé sur la composition ?
Responsabilité unique
Ouvert/Fermé
Substitution de Liskov
Inversion de dépendance
Quelle est la différence entre 'a-un' (composition) et 'est-un' (héritage) ?
'a-un' = possession, 'est-un' = spécialisation
'a-un' = héritage, 'est-un' = interface
'a-un' = statique, 'est-un' = dynamique
'a-un' = public, 'est-un' = privé
Pourquoi dit-on que la composition est plus flexible que l'héritage ?
Parce qu'elle utilise moins de mémoire
Parce qu'elle permet de changer le comportement à l'exécution
Parce qu'elle est plus rapide
Parce qu'elle est compatible avec tous les frameworks
Dans PhotoSphere, pourquoi BasicUser → ProUser → Moderator → Admin utilise-t-il l'héritage ?
Pour économiser du code
Pour avoir une hiérarchie stricte des permissions
Parce que c'est plus rapide
Pour utiliser moins de classes
Quand utiliser un trait au lieu de l'héritage ?
Pour partager du code entre des classes non liées
Pour créer une hiérarchie stricte
Pour améliorer les performances
Pour respecter le principe de Liskov
Quelle est la principale différence entre une classe abstraite et une interface ?
Une interface peut avoir des propriétés, une classe abstraite ne peut pas
Une classe abstraite peut avoir des implémentations, une interface ne peut pas
Une interface peut être instanciée, une classe abstraite ne peut pas
Une classe abstraite est plus rapide
Combien d'interfaces une classe peut-elle implémenter ?
Une seule
Maximum deux
Maximum trois
Aucune limite
Quand utiliser une classe abstraite plutôt qu'une interface ?
Lorsque vous voulez forcer l'implémentation de certaines méthodes
Lorsque vous avez du code commun à partager entre les classes enfants
Lorsque vous voulez de meilleures performances
Lorsque vous utilisez PHP 7 ou une version inférieure
Quel mot-clé est utilisé pour hériter d'une classe abstraite ?
implements
extends
uses
inherits
Pouvez-vous instancier directement une classe abstraite ?
Oui, avec new AbstractClass()
Non, elle doit être étendue {extended}
Oui, si elle n'a pas de méthodes abstraites
Non, sauf si vous utilisez une Factory
Quelle est la syntaxe correcte pour une méthode abstraite ?
abstract function method();
function abstract method();
abstract method();
function method() abstract;
Dans PhotoSphere, pourquoi User est-il une classe abstraite ?
Pour pouvoir l'instancier directement
Pour partager du code commun entre BasicUser, ProUser, etc.
Pour améliorer les performances
Pour respecter PSR-12
Quel est le but des interfaces Taggable, Commentable, Likeable ?
Définir un contrat que plusieurs classes peuvent implémenter
Partager du code entre Photo et Album
Améliorer les performances des requêtes
Faciliter le débogage
Quel principe SOLID est respecté en utilisant des interfaces ?
Responsabilité unique
Ségrégation des interfaces
Substitution de Liskov
Ouvert/Fermé
Que se passe-t-il si vous n'implémentez pas toutes les méthodes d'une interface ?
PHP génère un avertissement
PHP génère une erreur fatale
Le code fonctionne mais avec des erreurs
PHP essaie de les implémenter automatiquement
Quel est le but principal du modèle Singleton ?
Créer de nombreuses instances rapidement
Garantir qu'une classe n'a qu'une seule instance
Rendre une classe abstraite
Améliorer les performances des requêtes SQL
Dans PhotoSphere, pourquoi Database utilise-t-il Singleton ?
Pour éviter plusieurs connexions à la base de données
Pour améliorer les performances du cache
Pour respecter le principe Ouvert/Fermé
Pour faciliter les tests unitaires
Comment empêcher plusieurs instanciations dans un Singleton ?
En rendant le constructeur privé
En utilisant le mot-clé 'final'
En implémentant une interface
En utilisant des traits
Quel est le principal risque du Singleton ?
Il consomme trop de mémoire
Il crée un état global difficile à tester
Il ralentit l'exécution
Il n'est pas sécurisé
Quelle méthode est utilisée pour obtenir l'instance dans un Singleton ?
getInstance()
createInstance()
newInstance()
singleton()
Quel est l'avantage principal du modèle Repository ?
Il améliore les performances des requêtes
Il découple la logique métier de l'accès aux données
Il réduit la quantité de code SQL
Il rend les classes plus petites
Dans PhotoSphere, quel est le rôle de UserRepository ?
Gérer les vues HTML pour les utilisateurs
Fournir des méthodes CRUD pour l'entité User
Valider les données utilisateur
Gérer les sessions utilisateur
Quelle méthode typique trouve-t-on dans un Repository ?
find(int $id): ?object
renderView(string $template): string
validate(array $data): bool
sendEmail(string $to): bool
Comment le modèle Repository facilite-t-il les tests unitaires ?
En permettant une simulation facile de l'accès aux données
En réduisant le temps d'exécution des tests
En générant automatiquement des données de test
En fournissant des assertions prédéfinies
Quel modèle de conception est souvent combiné avec Repository ?
Singleton (pour PDO)
Observer (pour les notifications)
Factory (pour créer des entités)
Decorator (pour étendre les fonctionnalités)
Quel est l'avantage d'utiliser des interfaces pour les entités comme Photo et Album ?
Augmenter la taille du code source
Limiter l'utilisation de l'héritage
Permettre une flexibilité dans l'implémentation des fonctionnalités
Obliger toutes les classes à avoir les mêmes propriétés
Pourquoi utiliser un trait pour ajouter une fonctionnalité à plusieurs classes ?
Pour rendre les classes abstraites
Pour améliorer la sécurité
Pour créer une hiérarchie stricte
Pour éviter la duplication de code
