Jump to content

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

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

Последствия

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

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

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f19975270ad4f29b379ff49ed1303dac__1714739940
URL1:https://arc.ask3.ru/arc/aa/f1/ac/f19975270ad4f29b379ff49ed1303dac.html
Заголовок, (Title) документа по адресу, URL1:
Object orgy - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)