{"subject_id":"3a3cc48d0099818eac07c0bbbb97e39b","topico":"GRASP: Information Expert, Creator, Controller, Low Coupling, High Cohesion etc.","stems":["Julgue os próximos itens, a respeito de GRASP (general responsibility assignment software patterns).","A respeito de arquitetura de aplicações, julgue os próximos itens.","Julgue os itens a seguir, relativos a arquitetura MVC e princípios de projeto.","Acerca dos padrões de projeto em arquitetura de software, julgue os próximos itens.","Com relação à arquitetura de desenvolvimento de software, julgue os itens a seguir.","Considerando o padrão GRASP, julgue os itens a seguir.","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":"f4aee01f7a6f","number":53,"stem":0,"statement":"Um padrão que recomenda que uma classe tenha várias e diferentes responsabilidades, para que se aumente sua reutilização, é caracterizado como de alta coesão (high cohesion).","answer":"E","source":{"slug":"CNJ_24","ano":2024},"explanation":{"verdict_reason":"Alta coesão é o oposto do descrito: a classe deve ter poucas responsabilidades, fortemente relacionadas e voltadas a um único propósito. Uma classe com várias responsabilidades diferentes é de baixa coesão e fica mais difícil de entender, manter e reutilizar, e não o contrário.","distortion_type":"inversao","distorted_span":"várias e diferentes responsabilidades","corrected_statement":"Um padrão que recomenda que uma classe tenha poucas responsabilidades, fortemente relacionadas entre si, para que se aumente sua reutilização, é caracterizado como de alta coesão (high cohesion).","concept":"Alta coesão: poucas responsabilidades, fortemente relacionadas","citation":null,"trap_note":"Reúso é o benefício alegado dos dois lados, então não julgue por ele. Julgue pela quantidade e pela afinidade das responsabilidades descritas."}},{"id":"f2e43befe147","number":54,"stem":0,"statement":"Determinar quando deve ser delegada a responsabilidade para outro objeto é responsabilidade do criador (creator).\n\n<?php\n$ host = 10.10.10.50;\n$ dbname = 'app_db';\n$ user = 'root';\n$ pass = 'Password;\n$ charset = 'utf8mb4';\n$ dsn = “mysql:host = $ host; dbname =\n$ dbname; charset = $ charset”;\n$ options = [\n    PDO::ATTR_ERRMODE =>\nPDO::ERRMODE_EXCEPTION,\n    PDO::ATTR_DEFAULT_FETCH_MODE =>\nPDO::FETCH_ASSOC,\n    PDO::ATTR_EMULATE_PREPARES => false,\n];\ntry {\n    $ pdo = new PDO($ dsn, $ user, $ pass,\n$ options);\n} catch (\\PDOException $ e) {\n    throw new \\PDOException($ e->getMessage(),\n(int)$ e->getCode());\n}\n?>","answer":"E","source":{"slug":"CNJ_24","ano":2024},"explanation":{"verdict_reason":"O criador responde a uma pergunta só: quem deve instanciar determinada classe. Decidir quando a responsabilidade deve ser delegada a outro objeto é assunto do controlador, que recebe o evento do sistema e distribui o trabalho, e do especialista da informação, que indica para quem o trabalho vai.","distortion_type":"troca_de_termo","distorted_span":"Determinar quando deve ser delegada a responsabilidade para outro objeto","corrected_statement":"Determinar quem deve criar uma nova instância de uma classe é responsabilidade do criador (creator).","concept":"Creator responde a quem instancia, não a quando delegar","citation":null,"trap_note":"Emparelhe padrão e pergunta antes de ler o nome: instanciar é Creator, executar com os dados é Expert, receber o evento e delegar é Controller."}},{"id":"29a513fac9ef","number":69,"stem":1,"statement":"No padrão GRASP (general responsibility assignment software patterns), a aplicação do controller tem como objetivo a separação do controle da interface das demais partes do sistema.","answer":"C","source":{"slug":"MPO_24","ano":2024},"explanation":{"verdict_reason":"O controller recebe os eventos do sistema em um objeto que não pertence à camada de apresentação, o que mantém o controle da interface separado da lógica de domínio. É essa separação que permite trocar ou acrescentar interfaces sem tocar nas regras do sistema.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Controller separa o controle da interface do restante do sistema","citation":null,"trap_note":"O Controller não é a tela: ele existe para que a tela não carregue lógica. Item que o identifique com janela, formulário ou componente visual está errado."}},{"id":"43b3c4cdb9e0","number":104,"stem":2,"statement":"A arquitetura MVC aplica o princípio do baixo acoplamento em projetos quando preserva as interfaces já desenvolvidas ao receber do controller uma notificação de mudança de estado.","answer":"E","source":{"slug":"ANM_24","ano":2024},"explanation":{"verdict_reason":"Preservar as interfaces já desenvolvidas diante de uma mudança é o princípio das variações protegidas (protected variations), que encapsula o ponto de variação atrás de uma interface estável; o baixo acoplamento mede o número e a força das ligações entre classes. Some-se que, no MVC, a notificação de mudança de estado parte do modelo para as visões, e não do controlador.","distortion_type":"troca_de_termo","distorted_span":"o princípio do baixo acoplamento","corrected_statement":"A arquitetura MVC aplica o princípio das variações protegidas (protected variations) em projetos quando preserva as interfaces já desenvolvidas ao receber uma notificação de mudança de estado.","concept":"Interface estável diante da mudança é Protected Variations","citation":null,"trap_note":"Proteger o que já existe contra a variação é Protected Variations; contar e afrouxar ligações é baixo acoplamento. E no MVC quem avisa que o estado mudou é o modelo."}},{"id":"5ab299a8aa01","number":117,"stem":3,"statement":"O padrão GRASP de Expert é utilizado para atribuir uma responsabilidade à classe que possui a informação necessária para atender essa mesma responsabilidade.","answer":"C","source":{"slug":"BANRISUL_22","ano":2022},"explanation":{"verdict_reason":"É a formulação literal do especialista da informação: a responsabilidade vai para a classe que possui a informação necessária para atendê-la. Manter a lógica junto dos dados reduz o tráfego entre objetos, preserva o encapsulamento e sustenta a coesão da classe.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Information Expert: responsabilidade para quem tem a informação","citation":null,"trap_note":"Expert é o padrão de uso mais frequente do GRASP e o critério é sempre a posse da informação, nunca a importância da classe no domínio."}},{"id":"8d4e45b441d2","number":70,"stem":4,"statement":"Aplicando-se o padrão de projetos especialista da informação da abordagem GRASP no desenvolvimento de software orientado a objetos, ficará claramente definida de quem é a responsabilidade pela criação de nova instância de uma classe.","answer":"E","source":{"slug":"SEFAZ_CE_21","ano":2021},"explanation":{"verdict_reason":"Quem responde a quem cabe criar uma nova instância é o padrão criador (creator): cria a classe que agrega, contém, registra, usa de perto ou detém os dados de inicialização do objeto criado. O especialista da informação responde a outra pergunta, a de quem executa uma responsabilidade, e a resposta é quem tem a informação necessária.","distortion_type":"troca_de_termo","distorted_span":"especialista da informação","corrected_statement":"Aplicando-se o padrão de projetos criador (creator) da abordagem GRASP no desenvolvimento de software orientado a objetos, ficará claramente definida de quem é a responsabilidade pela criação de nova instância de uma classe.","concept":"Creator decide quem instancia; Expert decide quem executa","citation":null,"trap_note":"Cada padrão GRASP responde a uma pergunta só. A palavra criação, instanciação ou nova instância no enunciado remete ao Creator, qualquer que seja o nome assinado."}},{"id":"6d2cd578558e","number":111,"stem":5,"statement":"Observa-se a utilização do padrão Controller quando uma classe recebe a responsabilidade de lidar com eventos do sistema.","answer":"C","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"O controller é definido pela responsabilidade de receber e coordenar os eventos do sistema, atuando como primeira porta de entrada da camada de domínio, fora da interface gráfica. Uma classe que assume essa função é, por definição, o controlador do GRASP.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Controller trata os eventos do sistema","citation":null,"trap_note":"Evento do sistema é o gatilho que vem da fronteira externa. Quem o recebe é o Controller; quem o executa depois, por delegação, costuma ser o Expert."}},{"id":"226697ad060e","number":112,"stem":5,"statement":"Atribuir responsabilidades para abstrações, e não para objetos, faz parte do padrão Expert.","answer":"E","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"O critério do Expert é a posse da informação: a responsabilidade vai para o objeto que detém os dados necessários para cumpri-la. Atribuir responsabilidades a abstrações em vez de objetos concretos é outra ideia, ligada ao polimorfismo e às variações protegidas, que trabalham sobre interfaces estáveis.","distortion_type":"inversao","distorted_span":"para abstrações, e não para objetos","corrected_statement":"Atribuir responsabilidades aos objetos que detêm a informação necessária, e não a abstrações, faz parte do padrão Expert.","concept":"Expert atribui a quem tem a informação","citation":null,"trap_note":"Quando o item nega o critério que define o padrão, o verdadeiro é o contrário do que está escrito. Para o Expert, o critério é sempre um só: quem tem os dados."}},{"id":"53c908f336f1","number":73,"stem":6,"statement":"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.","answer":"C","source":{"slug":"PREF_JP_17_CGM","ano":2017},"explanation":{"verdict_reason":"Agregar e usar objetos da outra classe são duas das condições que o padrão criador lista para atribuir a responsabilidade de instanciar. O controlador responde a outra pergunta, a de quem recebe os eventos do sistema, e não tem relação com a criação de instâncias.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"Creator: cria quem agrega, contém, registra, usa ou tem os dados","citation":null,"trap_note":"Basta uma das condições do Creator para indicá-lo, e agregação é a mais forte delas: quem vai guardar o objeto é quem deve criá-lo, porque não acrescenta dependência nova."}},{"id":"12587369298c","number":94,"stem":7,"statement":"No padrão GRASP, a alta coesão (high cohesion) serve para mensurar quão fortemente uma classe está conectada a outras classes.","answer":"E","source":{"slug":"SEE_16_DF","ano":2016},"explanation":{"verdict_reason":"Medir quão fortemente uma classe está ligada a outras é acoplamento, que olha para fora da classe. A coesão olha para dentro: mede o quanto as responsabilidades de uma mesma classe se relacionam entre si e servem a um único propósito. A definição apresentada é a do padrão vizinho.","distortion_type":"troca_de_termo","distorted_span":"a alta coesão (high cohesion)","corrected_statement":"No padrão GRASP, o baixo acoplamento (low coupling) serve para mensurar quão fortemente uma classe está conectada a outras classes.","concept":"Coesão olha para dentro da classe; acoplamento, para as ligações externas","citation":null,"trap_note":"As palavras conectada a outras classes, depende de e conhece apontam sempre para acoplamento. Se a frase fala de ligação entre classes, o nome coesão está errado."}}]}