Jump to content

Шизофрения (объектно-ориентированное программирование)

Объектная шизофрения или самошизофрения — это осложнение, возникающее в результате делегирования и связанных с ним методов объектно-ориентированного программирования , где self/ this может относиться к более чем одному объекту. В качестве метафоры публичного смешения диссоциативного расстройства идентичности с психиатрическим диагнозом шизофрении , причем первый из них связан с «раздвоением личности», эта конфигурация называется объектной шизофренией или самошизофренией в объектно-ориентированном программировании. [1]

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

Альтернативой классам и наследованию являются прототипы и делегирование . [2] который используется в программировании на основе прототипов и является более динамичным. Вместо использования одного класса для уточнения другого, делегирование позволяет одному объекту переопределять поведение другого. Исходный объект a (аналог поведения производного класса) может делегировать некоторые из своих методов другому объекту b (аналогично поведению базового класса). Если a делегирует свой foo метод методу bar объекта b , то любой вызов foo на a приведет b объекта bar к выполнению метода . Однако bar выполняется в контексте объекта , например, его self идентификатор относится к a, а не к b .

При использовании делегирования возникает вопрос: какова ценность self при оценке метода объекта a , который делегируется методу объекта b ? Идентичность разделена: она может ссылаться на a или b . Обратите внимание, что хотя эти два объекта являются отдельными и имеют отдельные физические идентификаторы, self (независимо от того, используется ли он явно или неявно) неоднозначно.

История и обсуждение

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

Херрманн [3] сообщает, что этот термин был придуман Уильямом Харрисоном из IBM Research примерно в мае 1997 года в наборе веб-страниц, на которых обсуждались проблемы, связанные с некоторыми распространенными шаблонами проектирования (эти веб-страницы больше не являются общедоступными). В приведенных примерах проблема усугублялась тем, что типичные решения использовали бы более слабую форму делегирования (иногда называемую пересылкой ), при которой знания об исходном объекте-получателе фактически теряются во время делегирования. Здесь использование пересылки связано с тем, что большинство основных объектно-ориентированных языков программирования не поддерживают более сильную форму делегирования. Харрисон и др. предложили предметно-ориентированное программирование как решение, которое за счет статической композиции позволяет избежать любых проблем объектной шизофрении. На другом конце спектра Херрманн показывает, что язык с контекстуальными ролями может быть спроектирован таким образом, что потенциальные проблемы объектной шизофрении по существу не имеют значения, несмотря на использование делегирования как средства разделения поведения между объект роли и связанный с ним базовый объект .

См. также

[ редактировать ]
  1. ^ Асманн, Уве (2003). Инвазивная композиция программного обеспечения (1-е изд.). Берлин / Гейдельберг , Германия : Springer Science+Business Media . п. 39. ИСБН  9783662050828 .
  2. ^ Штейн, Линн Андреа (1 декабря 1987 г.). «Делегирование – это наследование» . Уведомления ACM SIGPLAN . 22 (12): 138–146 – через Ассоциацию вычислительной техники .
  3. ^ Херрманн, Стефан (22 июня 2010 г.). «Демистификация объекта шизофрении» . MASPEGHI '10: Материалы 4-го семинара по механизмам специализации, обобщения и наследования (2): 1–5 – через Ассоциацию вычислительной техники .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3de5250adc425b2687066f9a65b719be__1718352240
URL1:https://arc.ask3.ru/arc/aa/3d/be/3de5250adc425b2687066f9a65b719be.html
Заголовок, (Title) документа по адресу, URL1:
Schizophrenia (object-oriented programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)