Acerca de padrões de projeto, JSE e JME, julgue o item a seg...
Acerca de padrões de projeto, JSE e JME, julgue o item a seguir.
Ao se empregarem duas classes em que uma delas tanto agrega
quanto usa objetos da outra, é mais indicado utilizar o padrão
criador (creator) que o padrão controlador (controller)
do GRASP.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Vamos comentar o gabarito da questão, que está correto na alternativa C.
Padrões de projeto são soluções reutilizáveis para problemas comuns no desenvolvimento de software. Dentro desse contexto, temos os padrões de projeto da família GRASP (General Responsibility Assignment Software Patterns), que ajudam a definir responsabilidades e interações entre classes e objetos.
Os padrões GRASP incluem, entre outros, os padrões Creator e Controller. Vamos entender cada um deles:
1. Creator: Esse padrão sugere que uma classe deve ser responsável por criar instâncias de outra classe se uma ou mais das seguintes condições são verdadeiras:
- A classe contém ou agrega objetos da classe a ser criada.
- A classe usa objetos da classe a ser criada.
- A classe possui as informações necessárias para inicializar objetos da classe a ser criada.
2. Controller: Esse padrão sugere que uma classe deve ser responsável por lidar com eventos do sistema e delegar as responsabilidades para outras classes adequadas. Basicamente, um Controller serve como intermediário entre a interface do usuário e o modelo de dados.
Na questão apresentada, o enunciado menciona o uso de duas classes onde uma delas tanto agrega quanto usa objetos da outra. Essa situação se encaixa perfeitamente nas condições do padrão Creator, já que ele é indicado para situações onde a classe "agregadora" é a mais adequada para criar instâncias da outra classe.
Por isso, a alternativa C está correta ao afirmar que é mais indicado utilizar o padrão Creator do que o padrão Controller no contexto descrito.
Vamos agora justificar por que a alternativa E está incorreta. O padrão Controller não é a escolha ideal aqui porque ele é mais adequado para gerenciar eventos e ações do sistema, e não para a criação de objetos onde uma classe agrega ou usa a outra. Ou seja, ele não atende às condições específicas descritas na questão.
Então, para resolver questões similares, é essencial entender as responsabilidades e o contexto de aplicação de cada padrão de projeto. Isso ajudará a escolher a solução mais apropriada para o problema apresentado.
Espero que esta explicação tenha sido clara e útil. Se tiver mais dúvidas ou precisar de mais exemplos, estou à disposição para ajudar!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
O gabarito é Certo.
General responsibility assignment software patterns (ou principles), abreviado GRASP, consiste em diretrizes para atribuir responsabilidade a classes e objetos em projeto orientado a objetos.
O padrão controlador atribui a responsabilidade de manipular eventos do sistema para uma classe que não seja de interface do usuário (UI) que representa o cenário global ou cenário de caso de uso. Um objeto controlador é um objeto de interface não-usuário, responsável por receber ou manipular um evento do sistema.
O padrão Creator atribui a responsabilidade de criação de objetos entre duas classes A e B. Para uma classe B ter a responsabilidade de criar instâncias de outra classe A, ele deve obedecer a mais de um dos requisitos abaixo:
B agrega objetos da classe A.
B contém objetos da classe A.
B registra instâncias da classe A.
B usa muitos objetos da classe A.
B possui os dados usados para inicializar A.
O padrão **Creator** é um dos padrões GRASP (General Responsibility Assignment Software Patterns), que são diretrizes para atribuição de responsabilidades em projetos de software orientados a objetos. O padrão Creator ajuda a determinar qual classe deve ser responsável por criar instâncias de outras classes.
### Como Funciona o Padrão Creator
- **Responsabilidade de Criação**: O padrão Creator sugere que uma classe A deve ser responsável por criar uma instância de uma classe B se uma ou mais das seguintes condições forem verdadeiras:
- A classe A agrega objetos da classe B.
- A classe A contém objetos da classe B.
- A classe A usa objetos da classe B.
- A classe A tem os dados necessários para inicializar objetos da classe B.
### Exemplo de Uso
Imagine que você está desenvolvendo um sistema de gerenciamento de pedidos. A classe `Pedido` pode ser responsável por criar instâncias da classe `ItemPedido` porque ela agrega e contém objetos `ItemPedido`.
```java
public class Pedido {
private List<ItemPedido> itens;
public Pedido() {
this.itens = new ArrayList<>();
}
public void adicionarItem(String descricao, int quantidade, double preco) {
ItemPedido item = new ItemPedido(descricao, quantidade, preco);
itens.add(item);
}
}
public class ItemPedido {
private String descricao;
private int quantidade;
private double preco;
public ItemPedido(String descricao, int quantidade, double preco) {
this.descricao = descricao;
this.quantidade = quantidade;
this.preco = preco;
}
// Getters e setters
}
```
Neste exemplo, a classe `Pedido` é responsável por criar instâncias de `ItemPedido` porque ela agrega e contém esses objetos. Isso segue o padrão Creator, que ajuda a manter o código organizado e a responsabilidade de criação clara.
O padrão Creator é útil para garantir que a responsabilidade de criação de objetos esteja bem definida, promovendo um design de software mais coeso e de fácil manutenção. Se precisar de mais detalhes ou exemplos sobre esse padrão, estou aqui para ajudar!
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo