En el desarrollo de software , el problema del yo-yo es un anti-patrón que ocurre cuando un programador tiene que leer y comprender un programa cuyo gráfico de herencia es tan largo y complicado que el programador tiene que seguir cambiando entre muchas definiciones de clases diferentes para seguir el flujo de control del programa. A menudo sucede en la programación orientada a objetos . El término proviene de comparar la atención rebotante del programador con el movimiento de arriba hacia abajo de un yo-yo de juguete . Taenzer, Ganti y Podar describieron el problema por su nombre, explicando: "A menudo tenemos la sensación de montar un yoyo cuando tratamos de entender uno de estos árboles de mensajes". [1]
La mayoría de las prácticas de programación orientada a objetos recomiendan mantener el gráfico de herencia lo más superficial posible, en parte para evitar este problema. El uso de composición en lugar de herencia también es muy preferido, aunque esto aún requiere que un programador tenga en mente múltiples definiciones de clases a la vez.
Las jerarquías profundas son un olor a código y un síntoma de subclasificación para la reutilización del código . [2]
De manera más general, el problema del yo-yo también puede referirse a cualquier situación en la que una persona deba seguir cambiando entre diferentes fuentes de información para comprender un concepto.
Existen varias técnicas de refactorización de código para aplanar estas jerarquías sin comprometer el comportamiento general.
Las técnicas de diseño orientado a objetos, como documentar las capas de la jerarquía de herencia, pueden reducir el efecto de este problema, ya que recopilan en un solo lugar la información que el programador debe comprender.
Ver también
- Patrones de diseño § Introducción, Capítulo 1
- Complejidad Lo que significa que un sistema (de cualquier tipo) sea complejo
- Límite de Hrair La sugerencia de que los humanos pueden considerar como máximo aproximadamente siete conceptos a la vez
- Herencia de implementación
- Semántica de herencia
- Herencia virtual (programación orientada a objetos)
- Olor de código
Referencias
- ^ Taenzer, David ; Ganti, Murthy; Podar, Sunil (1989). "Problemas en la reutilización de software orientado a objetos" (PDF) . ECOOP 89: Actas de la Tercera Conferencia Europea de Programación Orientada a Objetos, 1989 . Prensa de la Universidad de Cambridge. págs. 33–34 . Consultado el 22 de marzo de 2013 .
- ^ "Code Smell 11 - Subclasificación para reutilización de código" . hashnode . Consultado el 18 de enero de 2021 .