Йо-йо проблема
В разработке программного обеспечения проблема йо -йо — это антишаблон , который возникает, когда программисту приходится читать и понимать программу, граф наследования которой настолько длинный и сложный, что программисту приходится постоянно переключаться между множеством различных определений классов, чтобы следовать поток управления программой. Чаще всего это встречается в контексте объектно-ориентированного программирования . Этот термин произошел от сравнения подпрыгивающего внимания программиста с движением вверх-вниз игрушечного йо-йо . Тензер, Ганти и Подар описали проблему по имени, объяснив: «Часто у нас возникает ощущение, что мы катаемся на йойо , когда пытаемся понять одно из этих деревьев сообщений». [1]
Большинство практик объектно-ориентированного программирования рекомендуют сохранять граф наследования как можно более мелким, отчасти во избежание этой проблемы. Использование композиции вместо наследования также является настоятельно предпочтительным, хотя это по-прежнему требует, чтобы программист имел в виду несколько определений классов одновременно.
Глубокие иерархии — это запах кода и признак подклассификации для повторного использования кода . [2]
В более общем смысле, проблема йо-йо может также относиться к любой ситуации, когда человеку приходится постоянно переключаться между различными источниками информации, чтобы понять концепцию.
Существует несколько методов рефакторинга кода, позволяющих сгладить эти иерархии без ущерба для общего поведения.
Методы объектно-ориентированного проектирования, такие как документирование слоев иерархии наследования, могут уменьшить эффект этой проблемы, поскольку они собирают в одном месте информацию, которую программист должен понять.
См. также
[ редактировать ]- Шаблоны проектирования § Введение, глава 1
- Сложность Что означает, что система (любого типа) является сложной?
- Предел Храйра. Предположение о том, что люди могут одновременно воспринимать не более семи концепций.
- Наследование реализации
- Семантика наследования
- Виртуальное наследование (объектно-ориентированное программирование)
- Код Запах
Ссылки
[ редактировать ]- ^ Тенцер, Дэвид ; Ганти, Мурти; Подар, Сунил (1989). «Проблемы повторного использования объектно-ориентированного программного обеспечения» (PDF) . ECOOP 89: Материалы Третьей Европейской конференции по объектно-ориентированному программированию, 1989 . Издательство Кембриджского университета. стр. 33–34 . Проверено 22 марта 2013 г.
- ^ «Запах кода 11 — подклассификация для повторного использования кода» . хэшнод. 30 октября 2020 г. Проверено 18 января 2021 г.