Шизофрения (объектно-ориентированное программирование)
Объектная шизофрения или самошизофрения — это осложнение, возникающее в результате делегирования и связанных с ним методов объектно-ориентированного программирования , где 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 года в наборе веб-страниц, на которых обсуждались проблемы, связанные с некоторыми распространенными шаблонами проектирования (эти веб-страницы больше не являются общедоступными). В приведенных примерах проблема усугублялась тем, что типичные решения использовали бы более слабую форму делегирования (иногда называемую пересылкой ), при которой знания об исходном объекте-получателе фактически теряются во время делегирования. Здесь использование пересылки связано с тем, что большинство основных объектно-ориентированных языков программирования не поддерживают более сильную форму делегирования. Харрисон и др. предложили предметно-ориентированное программирование как решение, которое за счет статической композиции позволяет избежать любых проблем объектной шизофрении. На другом конце спектра Херрманн показывает, что язык с контекстуальными ролями может быть спроектирован таким образом, что потенциальные проблемы объектной шизофрении по существу не имеют значения, несмотря на использование делегирования как средства разделения поведения между объект роли и связанный с ним базовый объект .
См. также
[ редактировать ]- Проблема запутанного депутата - уязвимость компьютерной безопасности
Ссылки
[ редактировать ]- ^ Асманн, Уве (2003). Инвазивная композиция программного обеспечения (1-е изд.). Берлин / Гейдельберг , Германия : Springer Science+Business Media . п. 39. ИСБН 9783662050828 .
- ^ Штейн, Линн Андреа (1 декабря 1987 г.). «Делегирование – это наследование» . Уведомления ACM SIGPLAN . 22 (12): 138–146 – через Ассоциацию вычислительной техники .
- ^ Херрманн, Стефан (22 июня 2010 г.). «Демистификация объекта шизофрении» . MASPEGHI '10: Материалы 4-го семинара по механизмам специализации, обобщения и наследования (2): 1–5 – через Ассоциацию вычислительной техники .