{"subject_id":"3a3cc48d009981acbd24f53f805b8215","topico":"GoF: criacionais, estruturais, comportamentais","stems":["A respeito de arquitetura, design e testes de software, julgue os itens seguintes.","Com base nos conceitos fundamentais de padrões de projeto (designer patterns) e padrões de arquitetura MVC, julgue os seguintes itens.","Julgue os itens seguintes, que tratam de padrões de projeto e dos protocolos para Web services, padrões e tecnologias relacionadas.","Julgue os itens subsequentes, relativos a padrões GoF.","Julgue os próximos itens, relativos a padrão de projetos e Scrum.","Acerca dos padrões de projeto em arquitetura de software, julgue os próximos itens.","Julgue os itens subsequentes, a respeito de padrões de projeto de software.","Com base nos fundamentos da Engenharia de Software, julgue os itens a seguir relativos às decisões adequadas que devem ser tomadas pelas equipes de analistas quando do planejamento para o desenvolvimento de um novo sistema.","A respeito de padrões de criação, julgue os itens subsecutivos.","Acerca de padrões estruturais, julgue os itens subsequentes.","Com relação a padrões comportamentais, julgue os itens seguintes.","Acerca da UML, de padrões de projeto e de arquitetura, julgue os itens seguintes.","Julgue os próximos itens, a respeito de domain-driven design, design patterns, emergent design, enterprise content management e REST.","Julgue os itens subsequentes, referentes a Domain Driven Design e a Design Patterns.","Acerca de padrões de projeto, JSE e JME, julgue os itens a seguir.","Julgue os itens a seguir, a respeito de padrões de projetos."],"questions":[{"id":"bb55ad52a8a9","number":53,"stem":0,"statement":"De acordo com um dos princípios da arquitetura orientada a objetos, a programação volta à interface, e não à implementação dos próprios objetos.","answer":"C","source":{"slug":"INFRASA_26_ANALISTA","ano":2026},"explanation":{"verdict_reason":"Programar para uma interface, e não para uma implementação, é um dos dois princípios que sustentam o catálogo de padrões. O cliente declara a dependência pelo tipo abstrato e permanece indiferente à classe concreta que chega em tempo de execução, o que é o que permite substituir implementações sem alterá-lo.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Programar para a interface, não para a implementação","citation":"Gamma et al., Design Patterns, cap. 1","trap_note":"São dois princípios, e caem juntos: programar para a interface e favorecer composição de objetos em vez de herança de classe."}},{"id":"1609e42dc851","number":55,"stem":1,"statement":"O padrão observer segue a arquitetura MVC uma vez que, quando os dados de seu modelo mudam de estado, as suas visões correspondentes são notificadas e atualizadas.","answer":"C","source":{"slug":"MP_GO_24_SERVIDOR","ano":2024},"explanation":{"verdict_reason":"O MVC do Smalltalk é o exemplo clássico do observer no próprio catálogo: o modelo guarda o estado e as visões são seus observadores, de modo que a mudança de estado do modelo dispara a notificação e a atualização das visões correspondentes. A relação entre padrão e arquitetura está corretamente descrita.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Observer é a mecânica de notificação entre modelo e visões no MVC","citation":"Gamma et al., Design Patterns, Observer","trap_note":"No MVC, quem notifica a mudança de estado é o modelo, não o controlador. Item que põe o controller como origem da notificação de estado troca os papéis."}},{"id":"9fe9ffc1c38b","number":56,"stem":1,"statement":"Os designer patterns não se destinam a contribuir com especificação de interfaces de objetos, pois a essência dos padrões está nos algoritmos e na implementação dos objetos que evitam potenciais problemas nos projetos de sistemas.","answer":"E","source":{"slug":"MP_GO_24_SERVIDOR","ano":2024},"explanation":{"verdict_reason":"Os padrões contribuem, sim, para a especificação de interfaces: eles identificam os elementos-chave dessas interfaces, os dados que trafegam entre os objetos e os relacionamentos entre participantes. A essência de um padrão está no arranjo de classes e objetos e na intenção que ele atende, não no algoritmo interno nem na implementação.","distortion_type":"inversao","distorted_span":"não se destinam a contribuir com especificação de interfaces de objetos","corrected_statement":"Os designer patterns destinam-se também a contribuir com a especificação de interfaces de objetos, pois identificam seus elementos-chave e os dados que trafegam entre os objetos, e não se resumem aos algoritmos e à implementação dos objetos.","concept":"Padrões ajudam a especificar interfaces","citation":null,"trap_note":"Padrão é decisão de interface e de colaboração entre objetos. Sempre que um item empurra a essência dos padrões para algoritmo ou implementação, está negando o que eles são."}},{"id":"8fb3425cdd74","number":70,"stem":2,"statement":"O padrão de projetos Iterator fornece aos clientes vários métodos simples de acesso aos elementos da coleção, protegendo a coleção contra ações descuidadas ou maliciosas passíveis de ocorrência caso seja permitido o acesso direto à coleção.","answer":"C","source":{"slug":"PREF_CACHOEIRO_24_ADM","ano":2024},"explanation":{"verdict_reason":"O iterator dá acesso sequencial aos elementos de um agregado sem expor sua representação interna. Ao oferecer ao cliente apenas operações simples de percurso, ele impede a manipulação direta da estrutura da coleção, que poderia corrompê-la por descuido ou por ação maliciosa.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Iterator percorre sem expor a representação interna da coleção","citation":"Gamma et al., Design Patterns, Iterator","trap_note":"Proteger a coleção é consequência de não expor a representação interna, e não um padrão à parte. Iterator e encapsulamento andam juntos."}},{"id":"d016b95f17ff","number":91,"stem":3,"statement":"Os padrões abstract factory e facade são, respectivamente, de criação e estrutural, uma vez que o abstract factory fornece uma interface para criação de famílias de objetos relacionados, ao passo que o facade separa a construção de um objeto complexo da sua representação.","answer":"E","source":{"slug":"BCB_24","ano":2023},"explanation":{"verdict_reason":"A primeira metade está correta: abstract factory é criacional e fornece interface para criar famílias de objetos relacionados. A segunda troca de padrão: separar a construção de um objeto complexo da sua representação é o builder. O facade oferece uma interface única e simplificada para um subsistema.","distortion_type":"troca_de_termo","distorted_span":"o facade separa a construção de um objeto complexo da sua representação","corrected_statement":"Os padrões abstract factory e facade são, respectivamente, de criação e estrutural, uma vez que o abstract factory fornece uma interface para criação de famílias de objetos relacionados, ao passo que o facade fornece uma interface única e simplificada para um conjunto de interfaces de um subsistema.","concept":"Facade simplifica interface; builder separa construção de representação","citation":null,"trap_note":"Item com dois padrões e duas definições quase sempre acerta a primeira e adultera a segunda. Julgue as duas metades separadamente antes de decidir."}},{"id":"aff13902c33c","number":92,"stem":3,"statement":"O padrão composite atribui responsabilidades adicionais a um objeto dinamicamente e o memento, sem violar o encapsulamento, captura e externaliza um estado interno de um objeto, de modo que este possa, posteriormente, ser restaurado para aquele estado.","answer":"E","source":{"slug":"BCB_24","ano":2023},"explanation":{"verdict_reason":"A definição de memento está correta. A de composite não: atribuir responsabilidades adicionais a um objeto dinamicamente é o decorator. O composite compõe objetos em árvores parte-todo para que o cliente trate objetos individuais e composições de maneira uniforme.","distortion_type":"troca_de_termo","distorted_span":"composite atribui responsabilidades adicionais a um objeto dinamicamente","corrected_statement":"O padrão decorator atribui responsabilidades adicionais a um objeto dinamicamente e o memento, sem violar o encapsulamento, captura e externaliza um estado interno de um objeto, de modo que este possa, posteriormente, ser restaurado para aquele estado.","concept":"Decorator acrescenta responsabilidade dinâmica; composite trata parte e todo","citation":null,"trap_note":"A palavra dinamicamente junto de responsabilidade adicional é decorator. Composite e decorator compõem objetos recursivamente, mas só o decorator existe para empilhar comportamento em tempo de execução."}},{"id":"07d2e3e2db80","number":107,"stem":4,"statement":"No padrão de projetos adapter, um algoritmo pode variar independentemente dos clientes que o utilizam, de modo a fornecer diferentes implementações de um mesmo comportamento.","answer":"E","source":{"slug":"INPI_23","ano":2023},"explanation":{"verdict_reason":"Fazer o algoritmo variar independentemente dos clientes que o utilizam, com implementações intercambiáveis do mesmo comportamento, é a intenção declarada do strategy. O adapter converte a interface de uma classe na interface esperada pelo cliente, para que classes incompatíveis trabalhem juntas.","distortion_type":"troca_de_termo","distorted_span":"No padrão de projetos adapter","corrected_statement":"No padrão de projetos strategy, um algoritmo pode variar independentemente dos clientes que o utilizam, de modo a fornecer diferentes implementações de um mesmo comportamento.","concept":"Strategy faz o algoritmo variar; adapter converte interface","citation":null,"trap_note":"Algoritmo que varia independentemente do cliente é a frase de assinatura do strategy no catálogo. Ela só é verdadeira sob esse nome."}},{"id":"fc0989004aa5","number":112,"stem":5,"statement":"Em um projeto orientado a objetos, a decomposição do sistema em objetos é influenciada por fatores como encapsulamento, granularidade e desempenho.","answer":"C","source":{"slug":"BANRISUL_22","ano":2022},"explanation":{"verdict_reason":"A decomposição de um sistema em objetos é reconhecidamente influenciada por encapsulamento, granularidade, dependências, flexibilidade, desempenho, evolução e reutilização. O item lista três desses fatores, e desempenho é um critério legítimo de projeto orientado a objetos, não apenas de implementação.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Fatores que influenciam a decomposição em objetos","citation":"Gamma et al., Design Patterns, cap. 1","trap_note":"Item que apenas enumera fatores de projeto costuma ser verdadeiro; a banca erra quando transforma a lista em exclusiva, com apenas ou somente."}},{"id":"fd7d15ee78f0","number":114,"stem":5,"statement":"O objetivo do padrão Singleton é especificar os tipos de objetos a partir de uma instância de protótipo.","answer":"E","source":{"slug":"BANRISUL_22","ano":2022},"explanation":{"verdict_reason":"Especificar os tipos de objetos a criar usando uma instância protótipo e criar novos por cópia dela é a intenção do prototype. O objetivo do singleton é garantir instância única da classe e um ponto global de acesso a ela.","distortion_type":"troca_de_termo","distorted_span":"padrão Singleton é especificar os tipos de objetos","corrected_statement":"O objetivo do padrão Prototype é especificar os tipos de objetos a partir de uma instância de protótipo.","concept":"Prototype usa instância protótipo; singleton garante instância única","citation":null,"trap_note":"A palavra protótipo no meio da definição entrega o padrão. Singleton e prototype são ambos criacionais, e é por isso que a banca os troca."}},{"id":"4c343b2cbb86","number":115,"stem":5,"statement":"Por meio do padrão Facade, é possível construir uma interface comum e simplificada para um sistema ou subsistema.","answer":"C","source":{"slug":"BANRISUL_22","ano":2022},"explanation":{"verdict_reason":"O facade fornece uma interface unificada para um conjunto de interfaces de um subsistema, definindo uma interface de nível mais alto que torna o subsistema mais fácil de usar. Interface comum e simplificada é exatamente o que o padrão entrega.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Facade: interface única e simplificada para um subsistema","citation":"Gamma et al., Design Patterns, Facade","trap_note":"Facade simplifica o acesso ao subsistema mas não o esconde: o cliente ainda pode usar as classes internas diretamente se precisar."}},{"id":"d7588e4ee183","number":116,"stem":5,"statement":"O padrão de comportamento Command permite representar comandos como objetos, sem a necessidade de saber como a operação é executada.","answer":"C","source":{"slug":"BANRISUL_22","ano":2022},"explanation":{"verdict_reason":"O command é comportamental e encapsula uma requisição como objeto. Quem invoca o comando conhece apenas a interface de execução e não precisa saber como a operação é realizada nem quem a realiza: esse desacoplamento entre invocador e receptor é o núcleo do padrão.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Command representa comandos como objetos e desacopla invocador de receptor","citation":"Gamma et al., Design Patterns, Command","trap_note":"Comando como objeto é comportamental, não criacional: o padrão distribui responsabilidade de execução, não decide qual classe instanciar."}},{"id":"d7bfaa1aeb9b","number":69,"stem":6,"statement":"Os três principais padrões de projeto (design patterns) são os criacionais, os estruturais e os comportamentais; os padrões criacionais aumentam a flexibilidade e a reutilização de código porque oferecem diversas alternativas de criação de objetos.","answer":"C","source":{"slug":"PETROBRAS_21_NS","ano":2021},"explanation":{"verdict_reason":"O catálogo GoF classifica os padrões por propósito em criacionais, estruturais e comportamentais. Os criacionais abstraem o processo de instanciação e oferecem alternativas de criação de objetos, o que aumenta a flexibilidade do sistema e o reaproveitamento de código existente.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"As três famílias e o papel dos criacionais","citation":"Gamma et al., Design Patterns, cap. 1","trap_note":"Criacional, estrutural e comportamental é a classificação por propósito. Existe uma segunda, por escopo, em padrões de classe e de objeto: não confunda as duas."}},{"id":"1ea0b58b2634","number":71,"stem":6,"statement":"Design patterns é um conjunto de soluções generalistas para problemas recorrentes durante o desenvolvimento de um software; trata-se de um framework ou código pronto, e não de uma definição de alto nível de como um problema comum pode ser solucionado.","answer":"E","source":{"slug":"PETROBRAS_21_NS","ano":2021},"explanation":{"verdict_reason":"A primeira oração está correta, e a segunda a desmente: padrão de projeto é justamente a descrição, em alto nível, de como um problema comum pode ser resolvido, e não código pronto ou framework. O padrão é reimplementado em cada sistema, na linguagem e no contexto de cada um.","distortion_type":"inversao","distorted_span":"trata-se de um framework ou código pronto, e não de uma definição de alto nível","corrected_statement":"Design patterns é um conjunto de soluções generalistas para problemas recorrentes durante o desenvolvimento de um software; trata-se de uma definição de alto nível de como um problema comum pode ser solucionado, e não de um framework ou código pronto.","concept":"Padrão é solução de projeto em alto nível, não código pronto","citation":null,"trap_note":"Estrutura e não X, mas sim Y com as duas pontas trocadas é uma inversão barata e frequente. Leia a frase na ordem certa antes de julgar."}},{"id":"740ab6df0176","number":91,"stem":7,"statement":"Para a solução de problemas que surgirem no projeto do sistema, quando o contexto não estiver claro e não houver tempo para entendê-lo, devem ser adotados padrões de projeto constantes da literatura da área.","answer":"E","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"Um padrão descreve a solução de um problema recorrente dentro de um contexto, com forças e consequências conhecidas. Escolher o padrão exige entender esse contexto; aplicá-lo justamente porque não houve tempo de entendê-lo inverte a condição de uso e produz solução procurando problema.","distortion_type":"relacao_causal","distorted_span":"quando o contexto não estiver claro e não houver tempo para entendê-lo","corrected_statement":"Para a solução de problemas que surgirem no projeto do sistema, quando o contexto estiver compreendido e o problema for recorrente, devem ser adotados padrões de projeto constantes da literatura da área.","concept":"Padrão pressupõe problema recorrente em contexto compreendido","citation":null,"trap_note":"Padrão não é atalho para pular o entendimento do problema. Qualquer item que ofereça padrão, framework ou norma como substituto da análise do contexto está errado."}},{"id":"67d9342474e5","number":105,"stem":8,"statement":"Conforme o padrão Singleton, um sistema que necessite de um único objeto de uma classe, após o programa instanciar o objeto, não deve ter permissão de criar objetos adicionais dessa classe.","answer":"C","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"A intenção do singleton é garantir que uma classe tenha uma única instância e fornecer um ponto global de acesso a ela. A própria classe controla a criação e impede instâncias adicionais depois da primeira, tipicamente escondendo o construtor e devolvendo sempre o mesmo objeto.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Singleton: instância única sob controle da própria classe","citation":"Gamma et al., Design Patterns, Singleton","trap_note":"Instância única e ponto global de acesso: os dois lados do singleton. Cuidado com a variante em que o item vende isso como facilitador de teste unitário, o que é falso."}},{"id":"fc017533b116","number":106,"stem":8,"statement":"O padrão Prototype cria novos objetos a partir da cópia de quaisquer objetos, sem aproveitar o estado do objeto copiado.","answer":"E","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"O prototype cria novos objetos copiando uma instância protótipo, e a cópia carrega o estado do original: é justamente isso que evita reconstruir o objeto do zero e torna o padrão útil. A propriedade definidora foi negada.","distortion_type":"inversao","distorted_span":"sem aproveitar o estado do objeto copiado","corrected_statement":"O padrão Prototype cria novos objetos a partir da cópia de uma instância protótipo, aproveitando o estado do objeto copiado.","concept":"Prototype clona a instância protótipo com o estado dela","citation":null,"trap_note":"Quando o item descreve o padrão certo mas nega a propriedade que lhe dá sentido, o verdadeiro é o contrário do que está escrito. Pergunte: se isso fosse verdade, para que serviria o padrão?"}},{"id":"55dc064352ba","number":107,"stem":9,"statement":"O propósito do padrão Adapter é separar uma abstração de sua implementação, para que as duas possam variar e ser independentes.","answer":"E","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"Separar uma abstração de sua implementação para que as duas variem independentemente é a intenção do bridge. O adapter converte a interface de uma classe existente naquela que o cliente espera, permitindo que classes trabalhem juntas apesar de interfaces incompatíveis.","distortion_type":"troca_de_termo","distorted_span":"padrão Adapter é separar uma abstração de sua implementação","corrected_statement":"O propósito do padrão Bridge é separar uma abstração de sua implementação, para que as duas possam variar e ser independentes.","concept":"Bridge separa abstração de implementação; adapter converte interface","citation":null,"trap_note":"Adapter conserta incompatibilidade que já existe; bridge é projetado antes para que dois eixos variem em paralelo. Guarde o par pela intenção, não pelo desenho de classes, que é parecido."}},{"id":"fc94a2997fc1","number":108,"stem":9,"statement":"Um cliente que precisa tratar, de maneira uniforme, objetos individuais e suas composições deve utilizar, para essa finalidade, o padrão Facade.","answer":"E","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"Tratar de maneira uniforme objetos individuais e suas composições é a definição literal do composite, que organiza os objetos em estruturas de árvore parte-todo. O facade resolve outro problema: dar uma interface única e simplificada a um subsistema complexo.","distortion_type":"troca_de_termo","distorted_span":"o padrão Facade","corrected_statement":"Um cliente que precisa tratar, de maneira uniforme, objetos individuais e suas composições deve utilizar, para essa finalidade, o padrão Composite.","concept":"Uniformidade entre parte e todo é composite","citation":null,"trap_note":"As palavras objetos individuais e composições, uniformemente e parte-todo só descrevem um padrão do catálogo: composite."}},{"id":"e92724347b00","number":109,"stem":10,"statement":"O padrão Iterator oferece uma forma flexível de uso de herança para estender uma funcionalidade.","answer":"E","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"Estender funcionalidade de forma flexível, como alternativa à herança, é o decorator. O iterator é comportamental e serve para percorrer os elementos de uma coleção sequencialmente sem expor sua representação interna.","distortion_type":"troca_de_termo","distorted_span":"O padrão Iterator","corrected_statement":"O padrão Decorator oferece uma alternativa flexível ao uso de herança para estender uma funcionalidade.","concept":"Decorator estende sem herança; iterator percorre coleção","citation":null,"trap_note":"Alternativa flexível à herança para acrescentar comportamento é sempre decorator. Iterator nunca aparece associado a extensão de funcionalidade."}},{"id":"6ea5cf2d125e","number":110,"stem":10,"statement":"O padrão Command permite suportar operações reversíveis e diferentes requisições parametrizadas pelo cliente.","answer":"C","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"Encapsular a requisição como objeto é o que permite parametrizar o cliente com diferentes requisições, enfileirá-las, registrá-las em log e, guardando o estado necessário, desfazê-las. Operações reversíveis e requisições parametrizadas são consequências diretas do command.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Command: requisição como objeto, com undo e parametrização","citation":"Gamma et al., Design Patterns, Command","trap_note":"Desfazer, refazer, enfileirar, registrar e agendar são todas consequências do mesmo fato: a requisição virou objeto. Qualquer uma delas aponta para command."}},{"id":"62135e1575d5","number":76,"stem":11,"statement":"Uma maneira de parametrizar um sistema pelas classes de objetos que ele cria é utilizar o padrão factory method para criar subclasses da classe que cria objetos, contudo essa solução tem a desvantagem de requerer a criação de uma nova subclasse somente para mudar a classe do produto.","answer":"C","source":{"slug":"FUB_19","ano":2019},"explanation":{"verdict_reason":"O factory method define uma operação de criação e deixa que a subclasse escolha a classe concreta do produto, de modo que o sistema é parametrizado pelas classes de objetos que cria. O próprio catálogo registra a desvantagem citada: como a escolha do produto está presa à subclasse da criadora, pode ser necessário derivar uma subclasse nova apenas para trocar a classe do produto. Vantagem e custo estão corretamente emparelhados.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Factory method: a subclasse decide o produto, e esse é o custo","citation":"Gamma et al., Design Patterns, Factory Method","trap_note":"Item que enuncia um padrão e em seguida cobra o preço dele costuma ser verdadeiro: o catálogo GoF sempre lista consequências negativas. Desconfie mais do item que só apresenta benefícios."}},{"id":"a8f8f666cccf","number":93,"stem":12,"statement":"O uso de design patterns leva à unificação dos códigos utilizados em diferentes aplicações que utilizem o mesmo padrão.","answer":"E","source":{"slug":"SLU_DF_19","ano":2019},"explanation":{"verdict_reason":"O que se reaproveita em um padrão é a solução de projeto, não o código. O mesmo padrão é reimplementado de forma diferente em cada sistema, conforme a linguagem, as classes do domínio e as forças do contexto; duas aplicações que usam observer não terminam com código unificado, mas com o mesmo desenho de colaboração.","distortion_type":"escopo_ampliado","distorted_span":"leva à unificação dos códigos utilizados em diferentes aplicações","corrected_statement":"O uso de design patterns leva ao reaproveitamento da mesma solução de projeto em diferentes aplicações que utilizem o mesmo padrão, ainda que o código de cada uma seja distinto.","concept":"Reuso de projeto, não de código","citation":null,"trap_note":"Padrão padroniza desenho e vocabulário, não implementação. Item que promete código igual, biblioteca pronta ou framework a partir de um padrão está estendendo o benefício além do que ele é."}},{"id":"d9b44cd8d0c7","number":97,"stem":13,"statement":"O padrão observer separa o display do estado de um objeto a partir do objeto em si e, sempre que houver mudança no estado do objeto, permite atualizar e refletir a mudança em todos os displays.","answer":"C","source":{"slug":"MP_PI_18","ano":2018},"explanation":{"verdict_reason":"O observer define uma dependência um-para-muitos entre objetos: o objeto observado guarda o estado, os observadores exibem, e toda mudança de estado dispara notificação e atualização de todos os dependentes. Separar a exibição do estado do objeto que o mantém é precisamente a motivação do padrão.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Observer: um-para-muitos, notifica e atualiza todos os dependentes","citation":"Gamma et al., Design Patterns, Observer","trap_note":"Notificar dependentes quando o estado muda é observer em qualquer roupagem, inclusive na descrição de modelo e visões do MVC."}},{"id":"96978bc5ff95","number":98,"stem":13,"statement":"O padrão chain of responsibility desacopla o emissor do receptor, fazendo passar a solicitação por uma cadeia de receptores potenciais, ou seja, ele procura evitar o acoplamento do remetente de uma solicitação.","answer":"C","source":{"slug":"MP_PI_18","ano":2018},"explanation":{"verdict_reason":"A intenção do chain of responsibility é evitar o acoplamento entre o remetente da solicitação e o seu receptor, dando a mais de um objeto a chance de tratá-la: a solicitação percorre a cadeia de receptores potenciais até que um a atenda. Desacoplamento e cadeia são as duas metades do padrão.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Chain of responsibility desacopla emissor e receptor pela cadeia","citation":"Gamma et al., Design Patterns, Chain of Responsibility","trap_note":"Se o item fala em cadeia de receptores potenciais e em evitar acoplamento entre quem pede e quem atende, o padrão é chain of responsibility, mesmo que a banca assine command."}},{"id":"918bf41efefa","number":71,"stem":14,"statement":"Considere que determinado sistema tenha apresentado problemas de uso excessivo de recursos de armazenamento na criação de múltiplas instâncias de objetos. Nesse caso, o padrão Adapter é mais apropriado que o padrão Flyweight para se resolver o problema.","answer":"E","source":{"slug":"PREF_JP_17_CGM","ano":2017},"explanation":{"verdict_reason":"Excesso de instâncias consumindo memória é o problema que o flyweight resolve, compartilhando o estado intrínseco entre muitos objetos de granularidade fina. O adapter não tem relação com consumo de recursos: ele converte interfaces incompatíveis. A recomendação está invertida.","distortion_type":"inversao","distorted_span":"o padrão Adapter é mais apropriado que o padrão Flyweight","corrected_statement":"Considere que determinado sistema tenha apresentado problemas de uso excessivo de recursos de armazenamento na criação de múltiplas instâncias de objetos. Nesse caso, o padrão Flyweight é mais apropriado que o padrão Adapter para se resolver o problema.","concept":"Flyweight resolve custo de muitas instâncias; adapter resolve interface","citation":null,"trap_note":"Em item que compara dois padrões com mais apropriado que, monte a ordem certa antes de ler a do enunciado: a banca costuma apenas girar os dois nomes."}},{"id":"6ed30594f951","number":72,"stem":14,"statement":"O padrão Strategy possui benefícios como: clarificar algoritmos ao diminuir ou remover uma lógica condicional; simplificar uma classe ao mover variações de um algoritmo para uma hierarquia; habilitar um algoritmo para ser substituído por outro em tempo de execução; permitir que o algoritmo varie independentemente dos clientes que o utilizem.","answer":"C","source":{"slug":"PREF_JP_17_CGM","ano":2017},"explanation":{"verdict_reason":"Todos os benefícios listados são do strategy: encapsular cada algoritmo em uma classe própria elimina condicionais na classe cliente, move as variações para uma hierarquia, permite substituir o algoritmo em tempo de execução e faz o algoritmo variar independentemente de quem o usa.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Strategy: algoritmos intercambiáveis e fim das condicionais","citation":"Gamma et al., Design Patterns, Strategy","trap_note":"Remover lógica condicional e trocar algoritmo em tempo de execução é strategy. Quando esses efeitos aparecem sob o nome adapter ou template method, o item é falso."}},{"id":"37ee8ad904ef","number":92,"stem":15,"statement":"O padrão command tem como definição passar uma requisição entre uma lista ou objetos encadeados para a execução de uma ação ou o acionamento de um evento em um momento posterior.","answer":"E","source":{"slug":"SEE_16_DF","ano":2016},"explanation":{"verdict_reason":"Passar a requisição por uma lista de objetos encadeados até que alguém a trate é a definição do chain of responsibility. O command encapsula a requisição como um objeto, o que permite parametrizar o cliente, enfileirar e desfazer a operação, mas não implica cadeia de receptores. A descrição está certa e o nome assinado é de outro padrão.","distortion_type":"troca_de_termo","distorted_span":"O padrão command","corrected_statement":"O padrão chain of responsibility tem como definição passar uma requisição entre uma lista ou objetos encadeados para a execução de uma ação ou o acionamento de um evento em um momento posterior.","concept":"Chain of responsibility encadeia receptores; command empacota a requisição","citation":null,"trap_note":"A palavra encadeado, cadeia ou sequência de receptores potenciais aponta sempre para chain of responsibility, qualquer que seja o nome escrito no item."}},{"id":"e86f85b15edf","number":93,"stem":15,"statement":"O isolamento dos códigos de construção e representação é um dos objetivos do padrão builder.","answer":"C","source":{"slug":"SEE_16_DF","ano":2016},"explanation":{"verdict_reason":"A intenção do builder é exatamente separar a construção de um objeto complexo da sua representação, de modo que o mesmo processo de construção produza representações diferentes. Isolar o código que monta do código que representa é o que o padrão entrega.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Builder separa construção de representação","citation":"Gamma et al., Design Patterns, Builder","trap_note":"Construcao separada de representacao e assinatura do builder. Quando esse par aparece sob outro nome, como facade, o item e falso."}},{"id":"a36be9cb70b8","number":95,"stem":15,"statement":"O padrão de projeto estrutural bridge fornece um objeto substituto, que faz referência a outro objeto.","answer":"E","source":{"slug":"SEE_16_DF","ano":2016},"explanation":{"verdict_reason":"Fornecer um objeto substituto que faz referência a outro objeto e controla o acesso a ele é o proxy. O bridge é realmente estrutural, mas sua intenção é separar uma abstração de sua implementação para que ambas variem de forma independente. A família está certa; o padrão dentro dela, não.","distortion_type":"troca_de_termo","distorted_span":"bridge fornece um objeto substituto","corrected_statement":"O padrão de projeto estrutural proxy fornece um objeto substituto, que faz referência a outro objeto.","concept":"Proxy é o substituto; bridge separa abstração de implementação","citation":null,"trap_note":"A banca costuma acertar a família e errar o padrão dentro dela. Confirmar que o padrão é estrutural não basta: dos sete estruturais, só um é o substituto."}}]}