Объектная оргия - Object orgy

В компьютерное программирование, объект оргия это термин, распространенный в Perl сообщество программистов, описывающее общий сбой (или антипаттерн ) в объектно-ориентированный дизайн или объектно-ориентированного программирования. В объектной оргии объектов недостаточно. инкапсулированный через скрытие информации, позволяя неограниченный доступ к их внутренним компонентам, что обычно приводит к увеличению потребностей и проблем в обслуживании и даже к непосильной сложности.

Последствия

Результатом объектной оргии в основном является потеря преимуществ инкапсуляции, в том числе:

  • Неограниченный доступ затрудняет читателю представление о поведении объекта. Это связано с тем, что прямой доступ к его внутреннему состоянию означает, что любая другая часть системы может манипулировать им, увеличивая объем кода для проверки и создавая средства для будущих злоупотреблений.
  • Вследствие сложности рассуждений дизайн по контракту фактически невозможно.
  • Если большая часть кода использует преимущества отсутствия инкапсуляции, результатом является трудно поддерживаемый лабиринт взаимодействий, широко известный как крысиное гнездо или код спагетти.
  • Первоначальный дизайн не виден из-за чрезмерно широких интерфейсов к объектам.
  • Широкие интерфейсы затрудняют повторную реализацию класса, не нарушая остальную часть системы. Это особенно сложно, когда клиенты одного класса разрабатываются другой командой или другой организацией.

Формы

Инкапсуляцию можно ослабить несколькими способами, в том числе:

  • Объявив внутренних членов общедоступными или предоставив бесплатный доступ к данным через общедоступные методы мутатора (сеттер или геттер).
  • Предоставляя частный доступ. Например, см .: Модификаторы доступа Java и уровни доступности в C #[1]
  • В C ++, с помощью некоторых из вышеперечисленных средств и путем объявления друг классы или функции.

Объект также может сделать свои внутренние данные доступными, передав ссылки на них в качестве аргументов в методы или конструкторы других классов, которые могут сохранять ссылки.

Напротив, объекты, содержащие ссылки друг на друга, хотя иногда и описываются как форма объектной оргии, сами по себе не нарушают инкапсуляцию.

Причины

Члены могут быть объявлены общедоступными, чтобы избежать усилий или синтаксических накладных расходов, связанных с предоставлением им подходящих средств доступа. Это может повысить удобочитаемость класса, но за счет описанных выше последствий.

Для некоторых языков член, предназначенный для чтения другими объектами, можно сделать изменяемым, поскольку в языке нет удобной конструкции для доступа только для чтения.

Объектная вакханалия может быть симптомом кодирования незрелого дизайна, когда дизайнер недостаточно проанализировал взаимодействия между объектами. Это также может возникнуть из-за лени или поспешности в реализации дизайна, особенно если программист недостаточно общается с дизайнером, или из-за нежелания пересматривать дизайн при возникновении проблем, что также поощряет многие другие антишаблоны.

Решения

Как правило, инкапсуляция нарушается, потому что этого требует дизайн других классов и требуется переработка. Если это не так, может быть достаточно перекодировать систему в соответствии с передовой практикой. После того, как интерфейсы будут опубликованы безвозвратно, может быть уже слишком поздно их исправлять.

использованная литература

внешние ссылки