{"meta":{"title":"Simplificando hierarquias de herança complexas","intro":"Copilot Chat pode ajudá-lo a refatorar o código para evitar classes com várias camadas de herança.","product":"GitHub Copilot","breadcrumbs":[{"href":"/pt/copilot","title":"GitHub Copilot"},{"href":"/pt/copilot/tutorials","title":"Tutoriais"},{"href":"/pt/copilot/tutorials/copilot-cookbook","title":"Livro de receitas do GitHub Copilot"},{"href":"/pt/copilot/tutorials/copilot-cookbook/refactor-code","title":"Refatorar o código"},{"href":"/pt/copilot/tutorials/copilot-cookbook/refactor-code/simplify-inheritance-hierarchies","title":"Simplificar hierarquias de herança"}],"documentType":"article"},"body":"# Simplificando hierarquias de herança complexas\n\nCopilot Chat pode ajudá-lo a refatorar o código para evitar classes com várias camadas de herança.\n\nHierarquias de herança profundas, ou o uso inadequado da herança, podem levar a um código difícil de manter, dificultando o entendimento das relações entre as classes ou extensão delas sem causar interrupção.\n\nCopilot Chat pode sugerir a refatoração de projetos baseados em herança em projetos mais flexíveis baseados em composição (favorecendo a composição em detrimento da herança). Ele também pode recomendar a aplicação de padrões como Estratégia ou Decorador para tornar o sistema mais extensível sem adicionar complexidade à estrutura de herança.\n\n## Cenário de exemplo\n\nO código C# a seguir tem uma hierarquia de herança profunda em que cada classe se baseia na anterior. O resultado é uma cadeia de herança longa que dificulta saber quais propriedades cada classe tem.\n\nUma hierarquia de herança de vários níveis como essa pode ser difícil de entender, modificar e estender.\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## Prompt de exemplo\n\nNessa situação, você pode decidir usar uma classe `Employee` pai cujas propriedades devem ser herdadas por outras classes, mas evitar qualquer outra herança definindo todas as demais propriedades separadamente para cada 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## Resposta de exemplo\n\n> \\[!NOTE] A resposta a seguir é um exemplo. Respostas do Copilot Chat são não determinísticas, portanto, você pode obter uma resposta diferente da mostrada aqui.\n\nCopilot sugere o seguinte código:\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## Leitura adicional\n\n* [Engenharia de prompts para o GitHub Copilot Chat](/pt/copilot/concepts/prompting/prompt-engineering)\n* [Práticas recomendadas para usar GitHub Copilot](/pt/copilot/get-started/best-practices)"}