¿Es el principio de responsabilidad única una regla de la POO?[cerrado]

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

  •  08-06-2019
  •  | 
  •  

Pregunta

Un respuesta a una pregunta de Stack Overflow se indicó que un marco en particular violaba una regla de programación orientada a objetos simple y llanamente:Principio de Responsabilidad Única (PRS).

¿Cuál es el principio de responsabilidad única? en realidad ¿Una regla de programación orientada a objetos?

Entiendo la definición de Programación Orientada a Objetos como "un paradigma en el que los objetos y su comportamiento se utilizan para crear software".Esto incluye las siguientes técnicas:Encapsulación, polimorfismo y herencia.

No me malinterpreten: creo que SRP es la clave para la mayoría de los buenos diseños de OO, pero creo que hay casos en los que este principio puede y debe romperse (al igual que las reglas de normalización de bases de datos).Impulso agresivamente los beneficios de SRP y la gran mayoría de mi código sigue este principio.

Pero, ¿es una regla y, por tanto, implica que no debe romperse?

¿Fue útil?

Solución

Muy pocas reglas, si es que hay alguna, en el desarrollo de software no tienen excepción.Algunas personas piensan que no hay lugar para ir a pero están equivocados.

En lo que respecta a la programación orientada a objetos, no existe una definición única de orientación a objetos, por lo que, dependiendo de a quién le pregunte, obtendrá un conjunto diferente de principios, patrones y prácticas estrictos y blandos.

La idea clásica de la programación orientada a objetos es que los mensajes se envían a objetos que de otro modo serían opacos y los objetos interpretan el mensaje con conocimiento de sus propias entrañas y luego realizan una función de algún tipo.

SRP es un principio de ingeniería de software que se puede aplicar al rol de una clase, función o módulo.Contribuye a la cohesión de algo para que se comporte bien sin partes no relacionadas que cuelguen de él o que tengan múltiples roles que se entrelazan y complican las cosas.

Incluso con una sola responsabilidad, ésta puede variar desde una única función hasta un grupo de funciones poco relacionadas que forman parte de un tema común.Siempre que evite manipular un elemento para que asuma la responsabilidad de algo para lo que no fue diseñado principalmente o hacer alguna otra cosa ad hoc que diluya la simplicidad de un objeto, entonces viole cualquier principio que desee.

Pero encuentro que es más fácil lograr que el SRP sea correcto que hacer algo más elaborado que sea igual de sólido.

Otros consejos

Ninguna de estas reglas son leyes.Son más pautas y mejores prácticas.Hay ocasiones en las que no tiene sentido seguir "las reglas" y debes hacer lo mejor para tu situación.

No tengas miedo de hacer lo que creas correcto.De hecho, es posible que se te ocurran reglas más nuevas y mejores.

Para citar al Capitán Barbossa:

"...Y en segundo lugar, debes ser un pirata para que se aplique el código pirata y no lo eres.Y en tercer lugar, el código es más lo que llamarías "directrices" que reglas reales..."

Para citar a Jack Sparrow y Gibbs."Pensé que se suponía que debías cumplir con el código". Señor.Gibbs:"Pensamos que eran pautas más reales."

Claramente los Piratas entienden esto bastante bien.

Las "reglas" podrían entenderse a través del movimiento de patrones como "Fuerzas"

Entonces hay una fuerza que intenta hacer que la clase tenga una única responsabilidad.(cohesión)

Pero también hay una fuerza que intenta mantener bajo el acoplamiento con otras clases.

Como ocurre con todo diseño (no solo código), la respuesta es que depende.

Ahh, supongo que esto se refiere a una respuesta que di.:)

Como ocurre con la mayoría de las reglas y leyes, existen motivos subyacentes por los cuales estas reglas son relevantes: si el motivo subyacente no está presente o no es aplicable a su caso, entonces usted es libre de doblar o romper las reglas según sus propias necesidades.

Dicho esto, SRP no es una regla de programación orientada a objetos per se, pero se consideran mejores prácticas para crear aplicaciones de programación orientada a objetos que sean fácilmente extensibles y comprobables por unidad.

Ambas son características que considero de suma importancia en el desarrollo de aplicaciones empresariales, donde el mantenimiento de las aplicaciones existentes ocupa más tiempo que el desarrollo nuevo.

Como han dicho muchos de los otros carteles, todas las reglas están hechas para romperse.
Dicho esto, creo que SRP es una de las reglas más importantes para escribir un buen código.No es específico de la programación orientada a objetos, pero la parte de "encapsulación" de la programación orientada a objetos es muy difícil de hacer bien si la clase no tiene una única responsabilidad.

Después de todo, ¿cómo se encapsula de forma correcta y sencilla una clase con múltiples responsabilidades?Por lo general, la respuesta es múltiples interfaces y en muchos idiomas, lo que puede ayudar bastante, pero aún resulta confuso para los usuarios de su clase que se pueda aplicar de maneras completamente diferentes en diferentes situaciones.

SRP es sólo otra expresión de ISP :-) .

Y la "P" significa "principio", no "regla" :D

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top