{"meta":{"title":"Simplificación de jerarquías de herencia complejas","intro":"Copilot Chat puede ayudarle a refactorizar el código para evitar clases con varias capas de herencia.","product":"GitHub Copilot","breadcrumbs":[{"href":"/es/copilot","title":"GitHub Copilot"},{"href":"/es/copilot/tutorials","title":"Tutoriales"},{"href":"/es/copilot/tutorials/copilot-cookbook","title":"Recetario de GitHub Copilot"},{"href":"/es/copilot/tutorials/copilot-cookbook/refactor-code","title":"Refactorización de código"},{"href":"/es/copilot/tutorials/copilot-cookbook/refactor-code/simplify-inheritance-hierarchies","title":"Simplificación de jerarquías de herencia"}],"documentType":"article"},"body":"# Simplificación de jerarquías de herencia complejas\n\nCopilot Chat puede ayudarle a refactorizar el código para evitar clases con varias capas de herencia.\n\nLas jerarquías de herencia profunda, o el uso incorrecto de la herencia, pueden provocar código difícil de mantener, lo que dificulta seguir las relaciones entre clases o ampliarlas sin provocar interrupciones.\n\nCopilot Chat puede sugerir refactorizar diseños basados en herencia para convertirlos en diseños basados en composición más flexibles (priorizando la composición frente a la herencia). También puede recomendar aplicar patrones como Strategy o Decorator para que el sistema sea más extensible sin agregar complejidad a la estructura de herencia.\n\n## Escenario de ejemplo\n\nEl siguiente código de C# tiene una jerarquía de herencia profunda donde cada clase se basa en la anterior. El resultado es una cadena larga de herencia que dificulta saber qué propiedades tiene cada clase.\n\nUna jerarquía de herencia multinivel como esta puede ser difícil de entender, modificar y ampliar.\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## Mensaje de ejemplo\n\nEn esta situación, podría optar por usar una clase principal `Employee` cuyas propiedades hereden otras clases, pero evitar cualquier otra herencia definiendo todas las demás propiedades por separado para cada clase.\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## Respuesta de ejemplo\n\n> \\[!NOTE] La respuesta siguiente es un ejemplo. Las respuestas de Copilot Chat no son deterministas, por lo que puedes obtener una respuesta diferente a la aquí mostrada.\n\nCopilot sugiere el código siguiente:\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## Lectura adicional\n\n* [Ingeniería de mensajes para GitHub Copilot Chat](/es/copilot/concepts/prompting/prompt-engineering)\n* [Procedimientos recomendados para usar GitHub Copilot](/es/copilot/get-started/best-practices)"}