Questão
ID 66337Disciplina: Tecnologia da Informação
Assuntos: Conceitos Básicos de Análise e Projeto OO, Padrões Comportamentais, Programação Orientada a Aspecto (POA)
Ano: 2025 Banca: PERFIL - ENADE Órgão: Primeiro Simulado Pnd
Um professor de um curso de graduação em Ciência da Computação está lecionando sobre Paradigmas de Linguagens de Programação. Ele quer que os alunos compreendam as diferenças filosóficas e práticas entre a programação orientada a objetos (OO) e a programação funcional (PF). Para isso, ele planeja uma atividade onde os alunos devem modelar e implementar uma parte de um sistema de um jogo de RPG simples: o cálculo do dano de um ataque. O professor apresenta um trecho de um ensaio de Eric Elliott: "A programação OO modela o mundo como um conjunto de objetos com estado mutável e métodos que operam nesse estado. A identidade do objeto é fundamental. A programação funcional modela o mundo como um conjunto de funções puras e imutáveis que transformam dados. O fluxo de dados é fundamental. A OO nos diz para encapsular o que muda, enquanto a PF nos diz para evitar a mudança. Em OO, um 'personagem' seria um objeto com um atributo 'vida' que é decrementado por um método `receberDano()`. Em PF, o cálculo do dano seria uma função pura que recebe o estado atual do personagem como entrada e retorna um *novo* estado do personagem com a vida atualizada, sem modificar o original." Ele então pede aos alunos que analisem implementações que representem essas duas abordagens para um ataque que pode ser modificado por itens (ex: uma 'espada de fogo' que adiciona dano de fogo).
Avaliando as abordagens sob a perspectiva dos paradigmas, analise as seguintes asserções:
I. Em uma abordagem OO, a solução poderia ser implementada usando o padrão de projeto Decorator. O objeto 'ataque' básico seria 'decorado' ou 'envolvido' por um objeto `DecoradorDanoDeFogo`, que adiciona o dano de fogo ao chamar o método de ataque do objeto original. Isso permite compor comportamentos dinamicamente, mantendo o encapsulamento.
II. Em uma abordagem funcional, a solução poderia ser implementada através da composição de funções. Haveria uma função `ataqueBasico(alvo)` e uma função `adicionarDanoDeFogo(dano)`. O cálculo final seria o resultado da composição `adicionarDanoDeFogo(ataqueBasico(alvo))`. Isso representa uma 'pipeline' de transformações de dados, onde a saída de uma função é a entrada da próxima.
III. A abordagem OO é inerentemente superior para este problema, pois o conceito de 'personagem' e 'item' se mapeia diretamente para objetos do mundo real, tornando o código mais intuitivo e menos abstrato do que a composição de funções da PF.
É correto o que se afirma em: