O Princípio da Responsabilidade Única é uma regra de OOP?[fechado]

StackOverflow https://stackoverflow.com/questions/15412

  •  08-06-2019
  •  | 
  •  

Pergunta

Um responder para uma pergunta do Stack Overflow afirmou que uma estrutura específica violou uma regra OOP pura e simples:Princípio de Responsabilidade Única (SRP).

É o princípio da responsabilidade única realmente uma regra de OOP?

Meu entendimento da definição de Programação Orientada a Objetos é "um paradigma onde objetos e seu comportamento são usados ​​para criar software".Isso inclui as seguintes técnicas:Encapsulamento, Polimorfismo e Herança.

Agora, não me interpretem mal - acredito que o SRP seja a chave para a maioria dos bons projetos de OO, mas sinto que há casos em que esse princípio pode e deve ser quebrado (assim como as regras de normalização de banco de dados).Eu busco agressivamente os benefícios do SRP, e a grande maioria do meu código segue esse princípio.

Mas será que é uma regra e, portanto, implica que não deve ser quebrada?

Foi útil?

Solução

Muito poucas regras, se houver, no desenvolvimento de software são isentas de exceção.Algumas pessoas pensam que não há lugar para Vá para mas eles estão errados.

No que diz respeito à OOP, não existe uma definição única de orientação a objetos, portanto, dependendo de quem você perguntar, você obterá um conjunto diferente de princípios, padrões e práticas rígidos e suaves.

A ideia clássica da POO é que as mensagens são enviadas para objetos de outra forma opacos e os objetos interpretam a mensagem com conhecimento de suas próprias entranhas e então executam algum tipo de função.

SRP é um princípio de engenharia de software que pode ser aplicado à função de uma classe, função ou módulo.Contribui para a coesão de algo para que ele se comporte bem montado, sem partes não relacionadas penduradas ou tendo múltiplas funções que se entrelaçam e complicam as coisas.

Mesmo com apenas uma responsabilidade, isso ainda pode variar de uma única função a um grupo de funções vagamente relacionadas que fazem parte de um tema comum.Contanto que você evite manipular um elemento para assumir a responsabilidade por algo para o qual não foi projetado principalmente ou fazer alguma outra coisa ad-hoc que dilua a simplicidade de um objeto, viole qualquer princípio que desejar.

Mas acho que é mais fácil acertar o SRP do que fazer algo mais elaborado e igualmente robusto.

Outras dicas

Nenhuma dessas regras são leis.São mais diretrizes e melhores práticas.Há momentos em que não faz sentido seguir “as regras” e você precisa fazer o que é melhor para sua situação.

Não tenha medo de fazer o que você acha certo.Você pode realmente criar regras mais novas e melhores.

Para citar o capitão Barbossa:

"..E em segundo lugar, você deve ser um pirata para que o código do pirata seja aplicado e você não é.E em terceiro lugar, o código é mais o que você chamaria de “diretrizes” do que regras reais....”

Para citar Jack Sparrow e Gibbs."Eu pensei que você deveria manter o código". Senhor.Gibbs:“Achamos que eram diretrizes mais reais."

Então, claramente, os piratas entendem isso muito bem.

As “regras” poderiam ser entendidas através do movimento dos padrões como “Forças”

Então existe uma força tentando fazer com que a classe tenha uma responsabilidade única.(coesão)

Mas há também uma força que tenta manter baixa a ligação com outras classes.

Tal como acontece com todo design (não apenas código), a resposta é que depende.

Ahh, acho que isso se refere a uma resposta que dei.:)

Tal como acontece com a maioria das regras e leis, existem motivos subjacentes pelos quais estas regras são relevantes – se o motivo subjacente não estiver presente ou aplicável ao seu caso, então você está livre para quebrar/quebrar as regras de acordo com as suas próprias necessidades.

Dito isto, o SRP não é uma regra de OOP em si, mas é considerado uma prática recomendada para criar aplicativos OOP que sejam facilmente extensíveis e testáveis ​​em unidade.

Ambas são características que considero de extrema importância no desenvolvimento de aplicações empresariais, onde a manutenção de aplicações existentes ocupa mais tempo do que o desenvolvimento de novas.

Como muitos dos outros postadores disseram, todas as regras foram feitas para serem quebradas.
Dito isto, acho que o SRP é uma das regras mais importantes para escrever um bom código.Não é específico da programação orientada a objetos, mas a parte de "encapsulamento" da POO é muito difícil de ser feita corretamente se a classe não tiver uma única responsabilidade.

Afinal, como encapsular de maneira correta e simples uma classe com múltiplas responsabilidades?Geralmente a resposta é múltiplas interfaces e em muitas linguagens que podem ajudar um pouco, mas ainda é confuso para os usuários da sua classe que isso possa ser aplicado de maneiras completamente diferentes em situações diferentes.

SRP é apenas mais uma expressão de ISP :-).

E o "P" significa "princípio" e não "regra" :D

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top