Prévia do material em texto
Injeção de dependência O que e injecao de dependencia (DI)? a) Um padrao de projeto que permite a criacao de objetos de forma automatica. b) Um padrao de design que permite que objetos sejam passados como dependencias para uma classe, em vez de serem criados dentro dela. c) Um mecanismo que gerencia todas as dependencias de um sistema de forma manual. d) Uma tecnica para criar instancias de classes sem a necessidade de programacao orientada a objetos. Resposta correta: b) Um padrao de design que permite que objetos sejam passados como dependencias para uma classe, em vez de serem criados dentro dela. Explicacao: A injecao de dependencia e um conceito de design que visa reduzir o acoplamento entre as classes, permitindo que as dependencias sejam passadas para a classe atraves de construtores, metodos ou interfaces. Isso facilita testes, manutencao e reutilizacao de codigo. Qual a principal vantagem da injecao de dependencia? a) Aumento do tempo de execucao do sistema. b) Maior acoplamento entre os componentes do sistema. c) Reducao do acoplamento e aumento da testabilidade. d) Reducao na legibilidade do codigo. Resposta correta: c) Reducao do acoplamento e aumento da testabilidade. Explicacao: A principal vantagem da injecao de dependencia e reduzir o acoplamento entre os componentes de um sistema, facilitando a manutencao e tornando o codigo mais modular. Alem disso, facilita a criacao de testes unitarios, ja que as dependencias podem ser facilmente mockadas ou substituidas. Quais sao os tres tipos principais de injecao de dependencia? a) Injecao via interface, injecao via heranca e injecao via metodo. b) Injecao via construtor, injecao via setter e injecao via interface. c) Injecao via heranca, injecao via metodo e injecao via setter. d) Injecao via construtor, injecao via metodo e injecao via contexto. Resposta correta: b) Injecao via construtor, injecao via setter e injecao via interface. Explicacao: A injecao de dependencia pode ser feita de tres maneiras principais: Via construtor: a dependencia e passada no momento da criacao do objeto. Via setter: a dependencia e configurada depois que o objeto e instanciado, usando um metodo setter. Via interface: a dependencia e passada por meio de uma interface que a classe implementa. Em qual cenario a injecao de dependencia via construtor e mais adequada? a) Quando a dependencia e opcional e pode ser alterada durante a execucao. b) Quando as dependencias sao fixas e nao podem ser alteradas apos a criacao do objeto. c) Quando o objeto depende de varias classes que nao tem um comportamento comum. d) Quando se deseja otimizar o tempo de execucao. Resposta correta: b) Quando as dependencias sao fixas e nao podem ser alteradas apos a criacao do objeto. Explicacao: A injecao via construtor e indicada quando as dependencias sao essenciais para o funcionamento da classe e nao devem ser alteradas depois que o objeto e instanciado. Isso garante que o objeto sempre tenha todas as dependencias necessarias de forma consistente. Qual das alternativas a seguir e uma desvantagem da injecao de dependencia? a) Aumento da reutilizacao do codigo. b) Maior complexidade na configuracao do sistema. c) Facilita o processo de testes unitarios. d) Reducao da quantidade de codigo necessario para criar objetos. Resposta correta: b) Maior complexidade na configuracao do sistema. Explicacao: Embora a injecao de dependencia traga beneficios, como maior testabilidade e flexibilidade, ela pode aumentar a complexidade do sistema, principalmente se houver um grande numero de dependencias a serem injetadas. Em sistemas mais simples, isso pode se tornar um exagero. Qual framework de Java e amplamente utilizado para implementar injecao de dependencia? a) JUnit b) Hibernate c) Spring d) Maven Resposta correta: c) Spring Explicacao: O Spring e um dos frameworks mais populares para implementacao de injecao de dependencia em Java. Ele oferece um container que gerencia a criacao e injecao de objetos, alem de outras funcionalidades como transacoes e seguranca. O que e um container de injecao de dependencia? a) Um sistema que cria e armazena todas as instancias de classes do projeto. b) Um componente que gerencia o ciclo de vida das dependencias e faz a injecao delas nas classes. c) Um banco de dados onde as dependencias sao armazenadas. d) Uma biblioteca que permite a implementacao de funcoes matematicas no sistema. Resposta correta: b) Um componente que gerencia o ciclo de vida das dependencias e faz a injecao delas nas classes. Explicacao: O container de DI (Dependency Injection) e responsavel por gerenciar o ciclo de vida dos objetos e suas dependencias, realizando a injecao quando necessario. O Spring, por exemplo, possui um container chamado "Spring Context" que cuida disso. Qual das alternativas a seguir descreve melhor o conceito de "injecao de dependencia inversa"? a) As dependencias sao passadas para o objeto atraves de um setter. b) O objeto e responsavel por criar suas dependencias, aumentando o acoplamento. c) O controle de criacao de dependencias e delegado a um componente externo, como um container. d) A classe e responsavel por determinar o comportamento das dependencias. Resposta correta: c) O controle de criacao de dependencias e delegado a um componente externo, como um container. Explicacao: A injecao de dependencia inversa (ou Inversion of Control - IoC) significa que a responsabilidade pela criacao e gerenciamento das dependencias de uma classe e delegada a um componente externo, como um container de DI, em vez de ser feito internamente pela classe. Qual das alternativas a seguir e um exemplo de injecao de dependencia via setter? a) new Carro(engine) b) carro.setEngine(engine) c) Carro car = container.get(Carro.class) d) Carro(carroEngine) Resposta correta: b) carro.setEngine(engine) Explicacao: A injecao via setter ocorre quando a dependencia e atribuida a um objeto atraves de um metodo setter. Nesse caso, a dependencia engine e passada ao objeto carro por meio de um setter. Quais problemas a injecao de dependencia ajuda a resolver? a) Reduzir o tempo de resposta da aplicacao. b) Aumentar a complexidade do codigo. c) Melhorar a modularizacao e reduzir o acoplamento entre as classes. d) Aumentar a quantidade de codigo redundante. Resposta correta: c) Melhorar a modularizacao e reduzir o acoplamento entre as classes. Explicacao: A injecao de dependencia permite que as classes sejam mais modulares e independentes, o que facilita a manutencao, a extensao e a testabilidade do codigo. A principal vantagem e a reducao do acoplamento entre os componentes, tornando o sistema mais flexivel. O que significa o conceito de "acoplamento fraco" em um sistema que utiliza injecao de dependencia? a) As classes estao fortemente dependentes umas das outras, dificultando a manutencao. b) As classes estao quase sem nenhuma dependencia entre si, facilitando a manutencao e o teste. c) As dependencias sao criadas manualmente, mas as classes podem ser alteradas facilmente. d) As classes dependem de outros componentes, mas nao podem ser modificadas. Resposta correta: b) As classes estao quase sem nenhuma dependencia entre si, facilitando a manutencao e o teste. Explicacao: O "acoplamento fraco" ocorre quando as classes dependem minimamente umas das outras, o que torna o sistema mais flexivel e facil de modificar sem impactar outras partes do codigo. Isso e um dos principais objetivos da injecao de dependencia. O que e o "Principio da Inversao de Controle" (IoC)? a) O controle sobre o comportamento das classes e dado ao programador. b) O controle sobre o ciclo de vida dos objetos e suas dependencias e transferido para um container ou framework. c) O controle das classes e dado a classe principal do sistema. d) O controle das dependencias e realizado apenas atraves de chamadas diretas. Resposta correta: b) O controle sobre o ciclo de vida dos objetos e suas dependencias e transferidopara um container ou framework. Explicacao: O Principio da Inversao de Controle (IoC) e a base para a