Skip to content

Latest commit

 

History

History
147 lines (110 loc) · 7.3 KB

File metadata and controls

147 lines (110 loc) · 7.3 KB

Conceptos de Programación Orientada a Objetos

6. Composición - Delegación

6.1 Contenido

Puede llegar a haber métodos iguales o muy parecidos en una clase que estamos programando y en otra ya existente. Esto puede llegar a ocurrir en clases que no tienen relación, pero es muy común en todas las clases que implementan un mismo tipo. Debería ser posible usar los métodos existentes en las clases ya programadas, para no hacer el trabajo de nuevo. ¿Cómo uso los métodos de una clase que implementa un tipo en otra clase que implementa el mismo tipo?

Agrego a los objetos de la clase que debe implementar el tipo, objetos de una segunda clase que ya tenga el tipo implementado, o creo una segunda clase sólo a efectos de contener esos métodos; esto es llamado composición.

🗒 Tarjeta: Composición ±
Composición
La composición es una asociación fuerte entre una clase compuesta y una clase componente en la que instancias de la clase componente no suelen existir independiente de instancias de la clase compuesta.

Cada método de la primera clase envía un mensaje al objeto de la segunda; esto es conocido como delegación.

🗒 Tarjeta: Delegación ±
Delegación
La delegación es un mecanismo en programación por el cual cuando un objeto recibe un mensaje para realizar una operación, no la realiza él mismo, si no que la encarga a otro objeto.
El objeto que recibe el mensaje es un objeto compuesto, y el otro objeto al que se le delega el mensaje es un objeto componente

La clase compuesta sólo necesita conocer el tipo de la clase componente para poder hacer la delegación. La composición y delegación permiten reutilizar código basándose exclusivamente en los tipos de los objetos.

🗒 Tarjeta: Composición y reutilización ±
Composición y reutilización
La composición y delegación es una forma de reutilización de código pues permite crear nuevas clases a partir de clases existentes.

La composición reduce las dependencias indeseables, porque require sólo de la interfaz pública dada por los tipos de los objetos y no depende de detaller internos de implementación. La composición también favorece el diseño clases encapsuladas y enfocadas a una sola tarea; como consecuencia, las jerarquías de clases se mantienen razonablemente reducidas y manejables.

Por estas razones decimos que la composición favorece la modularidad. La modularidad es la propiedad de un sistema que ha sido descompuesto en un conjunto de módulos altamente cohesivos y poco acoplados.

🗒 Tarjeta: Cohesión ±
Cohesión
La cohesión es la forma y el grado en el que las responsabilidades de una clase o de las clases contenidas en un paquete están relacionas unas con otras.
Cuando la cohesión es alta es mejor.

🗒 Tarjeta: Acoplamiento ±
Acoplamiento
El acoplamiento es la forma y el grado de interdependencia entre clases y entre paquetes.
Cuando el acoplamiento es bajo es mejor.

🗒 Tarjeta: Modularidad ±
Modularidad
La modularidad es una propiedad de las clases y paquetes cuando son altamente cohesivos y están poco acoplados.

6.2 Presentación »