b'\n_START_ARTICLE_\nPrinc\xc3\xadpio da invers\xc3\xa3o de depend\xc3\xaancia\n_START_PARAGRAPH_\nNo design orientado a objeto, o Principio de invers\xc3\xa3o de depend\xc3\xaancia refere-se a uma forma espec\xc3\xadfica de dissocia\xc3\xa7\xc3\xa3o\xc2\xa0de software de m\xc3\xb3dulos. Ao seguir este princ\xc3\xadpio, o convencional depend\xc3\xaancia de estabelecimento de rela\xc3\xa7\xc3\xb5es de alto n\xc3\xadvel, a pol\xc3\xadtica de defini\xc3\xa7\xc3\xa3o de m\xc3\xb3dulos de baixo n\xc3\xadvel, m\xc3\xb3dulos de depend\xc3\xaancia revertida, assim renderiza\xc3\xa7\xc3\xa3o de alto n\xc3\xadvel m\xc3\xb3dulos independentes, de baixo m\xc3\xb3dulo de n\xc3\xadvel de detalhes de implementa\xc3\xa7\xc3\xa3o. O princ\xc3\xadpio afirma que:Por ditar que both alto-n\xc3\xadvel e objetos de baixo n\xc3\xadvel n\xc3\xa3o devem depender a mesma abstra\xc3\xa7\xc3\xa3o este princ\xc3\xadpio de design inverts a forma como algumas pessoas podem pensar sobre programa\xc3\xa7\xc3\xa3o orientada a objeto._NEWLINE_A id\xc3\xa9ia por tr\xc3\xa1s dos pontos A e B deste princ\xc3\xadpio \xc3\xa9 que, ao projetar a intera\xc3\xa7\xc3\xa3o entre um alto n\xc3\xadvel de m\xc3\xb3dulo e um baixo n\xc3\xadvel, a intera\xc3\xa7\xc3\xa3o deve ser considerada como um resumo de intera\xc3\xa7\xc3\xa3o entre eles. Isto n\xc3\xa3o s\xc3\xb3 tem implica\xc3\xa7\xc3\xb5es no design de alto-n\xc3\xadvel de m\xc3\xb3dulo, mas tamb\xc3\xa9m no baixo n\xc3\xadvel um: o de baixo n\xc3\xadvel deve ser projetado com a intera\xc3\xa7\xc3\xa3o em mente e pode ser necess\xc3\xa1rio alterar a sua interface de uso._NEWLINE_Em muitos casos, o pensamento sobre a intera\xc3\xa7\xc3\xa3o em si, como um conceito abstrato permite o acoplamento de componentes a ser reduzido sem a introdu\xc3\xa7\xc3\xa3o adicional de codifica\xc3\xa7\xc3\xa3o de padr\xc3\xb5es, permitindo que apenas um isqueiro e menos dependentes de implementa\xc3\xa7\xc3\xa3o intera\xc3\xa7\xc3\xa3o esquema.\n_START_SECTION_\nTraditional layers pattern\n_START_PARAGRAPH_\nNo convencional, a arquitetura de aplicativos, componentes de n\xc3\xadvel inferior (por exemplo, Utilit\xc3\xa1rio Camada) s\xc3\xa3o projetados para ser consumido pelo maior n\xc3\xadvel de componentes (e.g. Pol\xc3\xadtica de Camada) que permitem que sistemas cada vez mais complexos para ser constru\xc3\xaddo. Nesta composi\xc3\xa7\xc3\xa3o, o maior n\xc3\xadvel de componentes dependem diretamente em componentes de n\xc3\xadvel inferior para conseguir alguma tarefa. Esta depend\xc3\xaancia de componentes de n\xc3\xadvel inferior limita as oportunidades de reutiliza\xc3\xa7\xc3\xa3o de componentes superiores._NEWLINE_O objetivo da invers\xc3\xa3o de depend\xc3\xaancia padr\xc3\xa3o \xc3\xa9 para evitar este altamente juntamente distribui\xc3\xa7\xc3\xa3o com a media\xc3\xa7\xc3\xa3o de um resumo camada, e aumentar a reutiliza\xc3\xa7\xc3\xa3o de maior/pol\xc3\xadtica de camadas.\n_START_SECTION_\nDepend\xc3\xaancia de invers\xc3\xa3o de padr\xc3\xa3o\n_START_PARAGRAPH_\nCom a adi\xc3\xa7\xc3\xa3o de uma camada abstrata, ambos de alto e de baixo n\xc3\xadvel camadas reduzir o tradicional depend\xc3\xaancias de cima para baixo. No entanto, a "invers\xc3\xa3o" conceito n\xc3\xa3o significa que de n\xc3\xadvel inferior camadas dependem, em maior n\xc3\xadvel de camadas. Ambas as camadas devem depender de abstra\xc3\xa7\xc3\xb5es que desenhar o comportamento necess\xc3\xa1rios de n\xc3\xadvel superior camadas._NEWLINE_Em uma aplica\xc3\xa7\xc3\xa3o direta da invers\xc3\xa3o de depend\xc3\xaancia, os resumos s\xc3\xa3o de propriedade do superior/pol\xc3\xadtica de camadas. Este grupos de arquitectura superior/pol\xc3\xadtica de componentes e as abstra\xc3\xa7\xc3\xb5es que definem inferior servi\xc3\xa7os junto no mesmo pacote. O n\xc3\xadvel inferior camadas s\xc3\xa3o criadas por heran\xc3\xa7a/implementa\xc3\xa7\xc3\xa3o destas classes abstratas ou interfaces._NEWLINE_A invers\xc3\xa3o de depend\xc3\xaancias e de propriedade incentiva a reutiliza\xc3\xa7\xc3\xa3o de superior/pol\xc3\xadtica de camadas. Camadas superiores pode usar outras implementa\xc3\xa7\xc3\xb5es do menor de servi\xc3\xa7os. Quando o n\xc3\xadvel inferior da camada de componentes s\xc3\xa3o fechados ou quando a aplica\xc3\xa7\xc3\xa3o requer a reutiliza\xc3\xa7\xc3\xa3o de servi\xc3\xa7os existentes, \xc3\xa9 comum que um Adaptador de media\xc3\xa7\xc3\xa3o entre os servi\xc3\xa7os e as abstra\xc3\xa7\xc3\xb5es.\n_START_SECTION_\nImplementa\xc3\xa7\xc3\xb5es\n_START_PARAGRAPH_\nAs duas implementa\xc3\xa7\xc3\xb5es de MERGULHO uso de arquitetura l\xc3\xb3gica semelhante, com diferentes implica\xc3\xa7\xc3\xb5es._NEWLINE_Um direto de pacotes de implementa\xc3\xa7\xc3\xa3o da pol\xc3\xadtica de classes com servi\xc3\xa7o de resumos de aulas em uma biblioteca. Neste implementa\xc3\xa7\xc3\xa3o de alto n\xc3\xadvel de componentes e componentes de baixo n\xc3\xadvel s\xc3\xa3o distribu\xc3\xaddos em pacotes separados, bibliotecas, onde as interfaces definem o comportamento/servi\xc3\xa7os exigidos pelo alto n\xc3\xadvel de componente s\xc3\xa3o de propriedade, e existem dentro o alto n\xc3\xadvel do componente de biblioteca. A implementa\xc3\xa7\xc3\xa3o de alto n\xc3\xadvel da componente de interface com o baixo n\xc3\xadvel de componente requer que o baixo n\xc3\xadvel de pacote de componente dependem do alto n\xc3\xadvel de componente para a compila\xc3\xa7\xc3\xa3o, portanto, a invers\xc3\xa3o convencional de rela\xc3\xa7\xc3\xa3o de depend\xc3\xaancia._NEWLINE_Figuras 1 e 2 ilustram o c\xc3\xb3digo com a mesma funcionalidade, no entanto, na Figura 2, uma interface tem sido utilizada para inverter a depend\xc3\xaancia. A dire\xc3\xa7\xc3\xa3o de depend\xc3\xaancia pode ser escolhido de forma a maximizar a pol\xc3\xadtica de reutiliza\xc3\xa7\xc3\xa3o de c\xc3\xb3digo, e eliminar depend\xc3\xaancias c\xc3\xadclicas._NEWLINE_Nesta vers\xc3\xa3o do DIP, a camada inferior do componente de depend\xc3\xaancia nas interfaces/resumos em n\xc3\xadvel superior camadas faz re-utiliza\xc3\xa7\xc3\xa3o da camada inferior componentes dif\xc3\xadcil. Esta implementa\xc3\xa7\xc3\xa3o, em vez disso, "inverte" a tradicional depend\xc3\xaancia de cima para baixo, para a frente, de baixo para cima._NEWLINE_Uma solu\xc3\xa7\xc3\xa3o mais flex\xc3\xadvel extrai o resumo de componentes em um conjunto independente de pacotes/bibliotecas:_NEWLINE_A separa\xc3\xa7\xc3\xa3o de todas as camadas em seu pr\xc3\xb3prio pacote incentiva a re-utiliza\xc3\xa7\xc3\xa3o de qualquer camada, fornecendo robustez e mobilidade.\n_START_SECTION_\nGeneal\xc3\xb3gicas m\xc3\xb3dulo\n_START_PARAGRAPH_\nUm geneal\xc3\xb3gica sistema poder\xc3\xa1 representar o relacionamento entre as pessoas, como um gr\xc3\xa1fico de primeiro n\xc3\xadvel relacionamentos entre eles (pai/filho, pai/filha, m\xc3\xa3e/filho, m\xc3\xa3e/filha, marido/mulher, mulher/marido...). Isso \xc3\xa9 muito eficiente (e extens\xc3\xadvel: ex-marido/ex-mulher, o respons\xc3\xa1vel legal...)_NEWLINE_Mas o alto n\xc3\xadvel de m\xc3\xb3dulos pode exigir uma maneira mais simples de procurar o sistema: uma pessoa pode ter filhos, um pai, uma m\xc3\xa3e, irm\xc3\xa3os e irm\xc3\xa3s (incluindo, ou n\xc3\xa3o, meio-irm\xc3\xa3os e irm\xc3\xa3s), av\xc3\xb4s, av\xc3\xb3s, tios, tias, primos, primas ..._NEWLINE_Dependendo do uso do geneal\xc3\xb3gica m\xc3\xb3dulo, apresentando comuns rela\xc3\xa7\xc3\xb5es distintas direto propriedades (escondendo o gr\xc3\xa1fico) vai fazer a liga\xc3\xa7\xc3\xa3o entre o alto n\xc3\xadvel do m\xc3\xb3dulo e geneal\xc3\xb3gico m\xc3\xb3dulo por muito mais leves e permitem alterar a representa\xc3\xa7\xc3\xa3o interna completamente sem qualquer efeito sobre o uso de m\xc3\xb3dulos. Ele tamb\xc3\xa9m permite incorporar na geneal\xc3\xb3gica m\xc3\xb3dulo a defini\xc3\xa7\xc3\xa3o exata do irm\xc3\xa3o e irm\xc3\xa3s (incluindo ou n\xc3\xa3o pela metade), tios ... permitindo que se possa impor o \xc3\xbanico princ\xc3\xadpio de responsabilidade._NEWLINE_Finalmente, se o primeiro extens\xc3\xadvel generalizada gr\xc3\xa1fico abordagem parece mais extens\xc3\xadvel, o uso do geneal\xc3\xb3gica m\xc3\xb3dulo pode mostrar que um mais especializado e mais simples rela\xc3\xa7\xc3\xa3o de implementa\xc3\xa7\xc3\xa3o \xc3\xa9 suficiente para o aplicativo(s) e ajuda voc\xc3\xaa a fazer um sistema mais eficiente._NEWLINE_Neste exemplo abstraindo a intera\xc3\xa7\xc3\xa3o entre os m\xc3\xb3dulos leva a uma simplificada interface de baixo-n\xc3\xadvel de m\xc3\xb3dulo e pode levar a uma execu\xc3\xa7\xc3\xa3o mais simples.\n_START_SECTION_\nModel View Controller\n_START_PARAGRAPH_\nA INTERFACE do usu\xc3\xa1rio e ApplicationLayer pacotes cont\xc3\xa9m principalmente classes concretas. Controladores cont\xc3\xa9m resumos/tipos de interface. UI tem uma inst\xc3\xa2ncia de ICustomerHandler. Todos os pacotes s\xc3\xa3o separados fisicamente. No ApplicationLayer h\xc3\xa1 uma implementa\xc3\xa7\xc3\xa3o concreta de que a P\xc3\xa1gina classe vai usar. Inst\xc3\xa2ncias desta interface s\xc3\xa3o criados dinamicamente por uma F\xc3\xa1brica (possivelmente no mesmo Controladores de pacote). O concreto tipos de P\xc3\xa1gina e CustomerHandler, n\xc3\xa3o dependem uns dos outros; ambos dependem ICustomerHandler._NEWLINE_O efeito direto \xc3\xa9 que a INTERFACE do usu\xc3\xa1rio n\xc3\xa3o precisa fazer refer\xc3\xaancia a ApplicationLayer ou qualquer de concreto pacote que implementa o ICustomerHandler. A classe do bet\xc3\xa3o ser\xc3\xa1 carregado usando reflex\xc3\xa3o. A qualquer momento, a implementa\xc3\xa7\xc3\xa3o concreta poderia ser substitu\xc3\xaddo por outro de concreto de implementa\xc3\xa7\xc3\xa3o sem alterar a INTERFACE do usu\xc3\xa1rio de classe. Outra possibilidade interessante \xc3\xa9 que a P\xc3\xa1gina de classe implementa uma interface IPageViewer que pode ser passado como um argumento para ICustomerHandler m\xc3\xa9todos. Em seguida, a implementa\xc3\xa7\xc3\xa3o concreta pode se comunicar com a INTERFACE do usu\xc3\xa1rio sem uma concreta de depend\xc3\xaancia. Novamente, ambos est\xc3\xa3o ligados pelas interfaces.\n_START_SECTION_\nPadr\xc3\xb5es relacionados\n_START_PARAGRAPH_\nAplicando a invers\xc3\xa3o de depend\xc3\xaancia princ\xc3\xadpio tamb\xc3\xa9m pode ser visto como um exemplo de placa padr\xc3\xa3o, por exemplo, o alto n\xc3\xadvel de classe define a sua pr\xc3\xb3pria interface de adaptador que \xc3\xa9 a abstra\xc3\xa7\xc3\xa3o que o alto n\xc3\xadvel de classes dependem. O adaptee implementa\xc3\xa7\xc3\xa3o depende tamb\xc3\xa9m da placa de interface de abstra\xc3\xa7\xc3\xa3o (claro, desde que ele implementa a sua interface), enquanto ele pode ser implementado utilizando o c\xc3\xb3digo de dentro de sua pr\xc3\xb3pria baixo n\xc3\xadvel de m\xc3\xb3dulo. O alto n\xc3\xadvel n\xc3\xa3o tem depend\xc3\xaancia do baixo n\xc3\xadvel de m\xc3\xb3dulo, pois utiliza apenas o baixo n\xc3\xadvel indiretamente atrav\xc3\xa9s da placa de interface de invoca\xc3\xa7\xc3\xa3o de m\xc3\xa9todos polim\xc3\xb3rficos para a interface, que s\xc3\xa3o implementadas pelo adaptee e seu baixo n\xc3\xadvel de m\xc3\xb3dulo._NEWLINE_V\xc3\xa1rios padr\xc3\xb5es, tais como Plugin, Service Locator, ou Inje\xc3\xa7\xc3\xa3o de Depend\xc3\xaancia s\xc3\xa3o empregadas para facilitar o tempo de execu\xc3\xa7\xc3\xa3o de provisionamento dos escolhidos de baixo n\xc3\xadvel de componente de implementa\xc3\xa7\xc3\xa3o para o alto n\xc3\xadvel de componente.\n_START_SECTION_\nHist\xc3\xb3ria\n_START_PARAGRAPH_\nA depend\xc3\xaancia invers\xc3\xa3o de princ\xc3\xadpio foi postulada por Robert C. Martin e descrito em v\xc3\xa1rias publica\xc3\xa7\xc3\xb5es, incluindo o papel Orientado a Objeto-Design de M\xc3\xa9tricas de Qualidade: uma an\xc3\xa1lise de depend\xc3\xaancias, um artigo publicado em C++ Relat\xc3\xb3rio em Maio de 1996, o direito de Depend\xc3\xaancia, de Invers\xc3\xa3o de Princ\xc3\xadpio, e os livros \xc3\x81geis de Desenvolvimento de Software, Princ\xc3\xadpios, Padr\xc3\xb5es e Pr\xc3\xa1ticas, e Princ\xc3\xadpios \xc3\x81geis, Padr\xc3\xb5es e Pr\xc3\xa1ticas em C#.'