Question
Pouvez-vous consulter le code suivant et expliquer pourquoi il n'est pas correctement conçu. Comment allez-vous améliorer la conception ?



La classe Restaurant utilise les classes ci-dessus comme suit :



Les classes ci-dessus sont mal conçues pour les raisons suivantes :
  • Le nom doit être un attribut et non une classe comme Bob ou Jane. Une bonne conception OOP devrait cacher les détails non essentiels par l'abstraction. Si le restaurant emploie plus de personnes, vous ne voulez pas que le système soit inflexible et crée de nouvelles classes comme Peter, Jason, etc. pour chaque nouvel employé.
  • L'utilisation incorrecte de la solution ci-dessus des interfaces pour les rôles de travail comme serveur, gestionnaire, etc. rendra vos classes très rigides et étroitement couplées en exigeant des modifications structurelles statiques. Et si Bob devient un gestionnaire à temps plein? Vous devrez supprimer l'interface Waiter de la classe Bob. Et si Jane devient manager? Vous devrez changer l'interface Serveur avec Manager.

Les inconvénients ci-dessus dans la conception peuvent être corrigés comme indiqué ci-dessous en posant les bonnes questions. Fondamentalement, le serveur, le gestionnaire, etc. sont des rôles qu'un employé joue. Vous pouvez le résumer comme indiqué ci-dessous :



La classe Employé définit le nom de l'employé comme un attribut par opposition à une classe. Cela rend la conception flexible car de nouveaux employés peuvent être ajoutés au moment de l'exécution en instanciant de nouveaux objets Employé avec des noms appropriés. C'est le pouvoir de l'abstraction. Vous n'avez pas à créer de nouvelles classes pour chaque nouvel employé. Les rôles sont déclarés sous forme de liste en utilisant l'agrégation, de sorte que de nouveaux rôles peuvent être ajoutés ou les rôles existants peuvent être supprimés au moment de l'exécution lorsque les rôles des employés changent. Cela rend la conception plus flexible.



La classe de restaurant suivante montre à quel point la conception ci-dessus est flexible, extensible et maintenable.