Os padrões GRASP descrevem princípios fundamentais de atribuição de responsabilidades em projetos de software orientado a objeto. De acordo com esses padrões, o polimorfismo é um princípio orientador para atribuir responsabilidades
- A)a classes artificiais que não representem nada no domínio do problema de maneira a obter uma coesão alta.
Errada: classes artificiais sem representação no domínio costumam remeter a criação de indirection ou objetos auxiliares, não ao princípio de polimorfismo.
- B)a classes abstratas que representem o comportamento de classes concretas para permitir ao sistema lidar com vários tipos de maneira homogênea.
Certa: o polimorfismo distribui a responsabilidade entre classes com comportamento comum, permitindo tratar tipos diferentes de forma uniforme.
- C)a uma classe controladora global para centralizar o tratamento de todas as mensagens e eventos do sistema.
Errada: isso descreve o padrão Controlador, que centraliza eventos e mensagens, não polimorfismo.
- D)a classes que têm a informação necessária para satisfazer à responsabilidade e colaborar para que o acoplamento permaneça alto.
Errada: a ideia de usar quem tem a informação para executar a tarefa remete ao padrão Especialista da Informação, e ainda por cima a alternativa fala em acoplamento alto, o que contraria o objetivo do GRASP.
- E)a classes estáticas, altamente coesas e que são utilizadas no sistema sem a necessidade de instanciar objetos.
Errada: classes estáticas e utilitárias não expressam o princípio de polimorfismo, que depende de despacho por tipo e não de métodos sem instância.
Gabarito: B
Os padrões GRASP ajudam você a decidir quem faz o quê em um sistema orientado a objetos. Eles não são padrões de código prontos, mas princípios de distribuição de responsabilidades. Entre eles, o polimorfismo aparece quando uma responsabilidade precisa variar conforme o tipo do objeto, e a solução mais elegante é deixar cada classe concreta responder do seu jeito, por meio de uma abstração comum. Na prática, isso evita um monte de estruturas cheias de if e switch perguntando "que tipo é você?" a cada momento. Em vez de centralizar a decisão em uma classe controladora, o sistema delega o comportamento para objetos diferentes, todos tratados de forma homogênea. É a velha ideia: o cliente conversa com a interface ou classe base, e cada implementação concreta resolve sua parte. Por isso a alternativa B está correta. Ela descreve exatamente essa atribuição de responsabilidade para classes abstratas que representam um comportamento comum, permitindo lidar com vários tipos sem espalhar regras de decisão pelo sistema. Em GRASP, o polimorfismo é o princípio que orienta a variação de comportamento por meio de interfaces ou herança, reduzindo dependência de condições explícitas. A banca costuma cobrar isso confundindo polimorfismo com controlador, informação especialista ou classes utilitárias. Então guarde a ideia central: se a responsabilidade depende do tipo do objeto, você tende a usar polimorfismo para deixar cada classe fazer sua parte, sem o sistema virar um festival de decisões manuais.