{"meta":{"title":"Simplifier les hiérarchies d’héritage complexes","intro":"Copilot Chat peut vous aider à refactoriser le code pour éviter les classes avec plusieurs couches d’héritage.","product":"GitHub Copilot","breadcrumbs":[{"href":"/fr/copilot","title":"GitHub Copilot"},{"href":"/fr/copilot/tutorials","title":"Tutoriels"},{"href":"/fr/copilot/tutorials/copilot-cookbook","title":"livre de recettes GitHub Copilot"},{"href":"/fr/copilot/tutorials/copilot-cookbook/refactor-code","title":"Refactoriser le code"},{"href":"/fr/copilot/tutorials/copilot-cookbook/refactor-code/simplify-inheritance-hierarchies","title":"Simplifier les hiérarchies d’héritage"}],"documentType":"article"},"body":"# Simplifier les hiérarchies d’héritage complexes\n\nCopilot Chat peut vous aider à refactoriser le code pour éviter les classes avec plusieurs couches d’héritage.\n\nLes hiérarchies d’héritage profondes ou l’utilisation incorrecte d’héritage peuvent aboutir à un code difficile à maintenir, car il est difficile de suivre les relations entre les classes ou de les étendre sans provoquer de rupture.\n\nCopilot Chat peut suggérer la refactorisation des conceptions basées sur l’héritage en conceptions plus flexibles basées sur la composition (en favorisant la composition par rapport à l’héritage). Il peut également recommander l’application de modèles tels que Strategy ou Decorator pour rendre le système plus extensible sans ajouter de complexité à la structure d’héritage.\n\n## Exemple de scénario\n\nLe code C# suivant présente une hiérarchie d’héritage profonde où chaque classe s’appuie sur la précédente. Il en résulte une longue chaîne d’héritage. Il est donc difficile de savoir quelles sont les propriétés de chaque classe.\n\nUne telle hiérarchie d’héritage à plusieurs niveaux peut être difficile à comprendre, à modifier et à étendre.\n\n```csharp id=employee-class\npublic class Employee\n{\n    public string Name { get; set; }\n    public int EmployeeID { get; set; }\n}\n\npublic class Manager : Employee\n{\n    public int NumberOfTeams { get; set; }\n}\n\npublic class SeniorManager : Manager\n{\n    public string Region { get; set; }\n}\n\npublic class Director : SeniorManager\n{\n    public int NumberOfDepartments { get; set; }\n}\n\npublic class VicePresident : Director\n{\n    public string Division { get; set; }\n}\n\npublic class President : VicePresident\n{\n    public string Company { get; set; }\n}\n```\n\n## Exemple d’invite\n\nDans cette situation, vous pouvez décider d’utiliser une classe parent `Employee` dont les propriétés doivent être héritées par les autres classes, mais d’éviter tout autre héritage en définissant toutes les autres propriétés séparément pour chaque classe.\n\n```copilot copy prompt ref=employee-class\nRefactor this code so that classes only inherit the properties of the Employee class. All of the other properties that each class currently inherits should instead be declared independently in each class definition.\n```\n\n## Exemple de réponse\n\n> \\[!NOTE] La réponse suivante est un exemple. Les réponses Copilot Chat ne sont pas déterministes, vous pouvez donc obtenir une réponse différente de celle affichée ici.\n\nCopilot suggère le code suivant :\n\n```csharp\npublic class Employee\n{\n    public string Name { get; set; }\n    public int EmployeeID { get; set; }\n}\n\npublic class Manager : Employee\n{\n    public int NumberOfTeams { get; set; }\n}\n\npublic class SeniorManager : Employee\n{\n    public int NumberOfTeams { get; set; }\n    public string Region { get; set; }\n}\n\npublic class Director : Employee\n{\n    public int NumberOfTeams { get; set; }\n    public string Region { get; set; }\n    public int NumberOfDepartments { get; set; }\n}\n\npublic class VicePresident : Employee\n{\n    public int NumberOfTeams { get; set; }\n    public string Region { get; set; }\n    public int NumberOfDepartments { get; set; }\n    public string Division { get; set; }\n}\n\npublic class President : Employee\n{\n    public int NumberOfTeams { get; set; }\n    public string Region { get; set; }\n    public int NumberOfDepartments { get; set; }\n    public string Division { get; set; }\n    public string Company { get; set; }\n}\n```\n\n## Lectures complémentaires\n\n* [Ingénierie rapide pour GitHub Copilot Chat](/fr/copilot/concepts/prompting/prompt-engineering)\n* [Meilleures pratiques pour l’utilisation de GitHub Copilot](/fr/copilot/get-started/best-practices)"}