oop - oose - object oriented analysis and design pdf
Significa "bajo en acoplamiento y alto en cohesiĆ³n" (11)
Tengo problemas para entender la afirmación low in coupling and high in cohesion
. He buscado en Google y he leído mucho sobre esto, pero me parece difícil de entender.
Lo que entiendo es que la High cohesion
significa que deberíamos tener clases especializadas para realizar una función particular. Espero que esto sea correcto? Como una clase de validación de tarjeta de crédito, que está especializada para validar solo las tarjetas de crédito.
¿Y todavía no entiendo qué significa Baja Acoplamiento?
¿Tienes un teléfono inteligente? ¿Hay una gran aplicación o muchos pequeños? ¿Una aplicación responde sobre otra? ¿Puedes usar una aplicación mientras instalas, actualizas y / o desinstalas otra? Que cada aplicación sea autónoma es de alta cohesión. Que cada aplicación sea independiente de las otras es de bajo acoplamiento. DevOps favorece esta arquitectura porque significa que puede realizar una implementación continua discreta sin interrumpir todo el sistema.
Bajo acoplamiento y alta cohesión es un fenómeno recomendado.
Acoplamiento significa en qué medida varios módulos son interdependientes y cómo los otros módulos se ven afectados al cambiar algunas / considerable funcionalidad de un módulo. Se enfatiza el acoplamiento bajo, ya que la dependencia debe mantenerse baja para que se realicen cambios mínimos o insignificantes en otros módulos.
Cohesión: cuán estrechamente relacionado está todo el uno con el otro. Acoplamiento: cómo todo está conectado el uno con el otro.
Tomemos un ejemplo: queremos diseñar un auto que conduzca solo.
1) Necesitamos que el motor funcione correctamente.
2) Necesitamos que el automóvil conduzca por sí mismo.
Todas las clases y funciones en (1) arrancar el motor y hacerlo funcionar funcionan muy bien juntas, pero no ayudan al auto a gobernar. Entonces colocamos esas clases detrás de un controlador de motor.
Todas las clases y funciones en (2) funcionan estupendamente para hacer que el auto se mueva, acelere y frene. No ayudan al auto a arrancar ni a enviar gasolina a los pistones. Así que colocamos estas clases detrás de su propio controlador de conducción.
Estos controladores se utilizan para comunicarse con todas las clases y funciones disponibles. Los controladores se comunican solo entre ellos. Esto significa que no puedo llamar a una función en la clase de pistón de la clase de acelerador para acelerar el automóvil.
La clase de pedal tiene que pedirle al controlador de conducción que hable con el controlador del motor, que luego le dice a la clase de pistón que vaya más rápido. Esto nos permite a los programadores poder encontrar problemas y nos permite combinar programas grandes sin preocuparse. Esto se debe a que el código estaba funcionando detrás del controlador.
El bajo acoplamiento se produce en el contexto de dos o muchos módulos. Si un cambio en un módulo da como resultado muchos cambios en otro módulo, entonces se dice que está altamente acoplado. Aquí es donde ayuda la programación basada en interfaz. Cualquier cambio dentro del módulo no afectará al otro módulo ya que la interfaz (la media de interacción) entre ellos no ha cambiado.
Alta cohesión: junta las cosas similares. Entonces una clase debe tener un método o comportamientos para hacer un trabajo relacionado. Solo para dar un mal ejemplo exagerado: una implementación de la interfaz de lista no debería tener operaciones relacionadas con String. La clase String debe tener métodos, campos que sean relevantes para String y, de forma similar, la implementación de List debe tener las características correspondientes.
Espero que ayude.
En el diseño de software, una alta cohesión significa que la clase debería hacer una cosa y una cosa muy bien. La alta cohesión está estrechamente relacionada con el principio de responsabilidad única .
El bajo acoplamiento sugiere que la clase debería tener menos dependencias posibles. Además, las dependencias que deben existir deben ser dependencias débiles: prefieren la dependencia en la interfaz en lugar de la dependencia en la clase concreta, o prefieren la composición sobre la herencia.
La alta cohesión y el bajo acoplamiento nos dan un código mejor diseñado que es más fácil de mantener.
La herencia o generalización es un ejemplo de alto acoplamiento (es decir, alta interdependencia). Lo que quise decir con esto es que, en herencia, a menudo la clase padre define las funcionalidades básicas que usa su clase hija y el cambio en los métodos de la clase padre afecta directamente sus clases secundarias. Por lo tanto, podemos decir que existe un mayor grado de interdependencia entre las clases.
La realización o el uso de la interfaz es un ejemplo de alta cohesión (es decir, poca interdependencia). Lo que esto significa es que una interfaz presenta un contrato para cualquier clase que lo implemente, pero cada clase tiene el derecho de implementar métodos declarados en la interfaz a su manera y los cambios en el método declarado en una clase no afectan a ninguna otra clase.
Lo que creo es esto:
La cohesión se refiere al grado en que los elementos de un módulo / clase pertenecen juntos, se sugiere que el código relacionado debe estar cerca uno del otro, por lo que debemos esforzarnos por lograr una alta cohesión y unir todos los códigos relacionados lo más cerca posible. Tiene que ver con los elementos dentro del módulo / clase.
El acoplamiento se refiere al grado en que los diferentes módulos / clases dependen unos de otros, se sugiere que todos los módulos sean independientes en la medida de lo posible, por eso es de bajo acoplamiento. Tiene que ver con los elementos entre diferentes módulos / clases.
Para resumir, el bajo acoplamiento, según entendí, significaba que los componentes podían intercambiarse sin afectar el correcto funcionamiento de un sistema. Modifique básicamente su sistema en componentes funcionales que se puedan actualizar individualmente sin romper el sistema
Un ejemplo podría ser útil. Imagine un sistema que genera datos y los coloca en un almacén de datos, ya sea un archivo en el disco o una base de datos.
La alta cohesión se puede lograr separando el código del almacén de datos del código de producción de datos. (y, de hecho, separando el almacenamiento en disco del almacenamiento de la base de datos).
Se puede lograr un acoplamiento bajo asegurándose de que la producción de datos no tenga ningún conocimiento innecesario del almacén de datos (p. Ej., No pregunta al almacén de datos sobre los nombres de los archivos o las conexiones de DB).
Respuesta corta y clara
- Alta cohesión : los elementos dentro de una clase / módulo deberían estar juntos funcionalmente y hacer una cosa en particular.
- Acoplamiento flojo : Entre las diferentes clases / módulos debe haber una dependencia mínima.
La cohesión en la ingeniería del software, como en la vida real, es cuánto pueden decirse los elementos que consisten en un todo (en nuestro caso digamos una clase) que realmente pertenecen juntos. Por lo tanto, es una medida de cuán fuertemente relacionada está cada función expresada por el código fuente de un módulo de software.
Una forma de ver la cohesión en términos de OO es si los métodos en la clase están utilizando cualquiera de los atributos privados.
Ahora la discusión es más grande que esto, pero High Cohesion (o el mejor tipo de cohesión, la cohesión funcional) es cuando las partes de un módulo se agrupan porque todas contribuyen a una única tarea bien definida del módulo.
El acoplamiento en palabras simples, es cuánto un componente (una vez más, imagina una clase, aunque no necesariamente) sabe sobre el funcionamiento interno o elementos internos de otro, es decir, cuánto conocimiento tiene del otro componente.
El acoplamiento suelto es un método de interconexión de los componentes en un sistema o red para que esos componentes, dependan entre sí en la menor medida posible ...
Escribí una publicación en el blog sobre esto. Discute todo esto con mucho detalle, con ejemplos, etc. También explica los beneficios de por qué debe seguir estos principios.