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

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

Обзор

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

Альтернативой классам и наследованию являются прототипы и делегация,[2] который используется в программирование на основе прототипов, и более динамичный. Вместо использования одного класса для улучшения другого, делегирование позволяет одному объекту переопределять поведение другого. Оригинальный объект а (аналогично поведению производного класса) может делегировать некоторые из его методов к другому объекту б (аналогично поведению базового класса). Если а делегирует свои фу метод к бар метод б, то любой вызов фу на а вызовет б 's бар метод для выполнения. Тем не мение, бар выполняется в контексте а объект, например, его себя идентификатор относится к а а не б.

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

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

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

Смотрите также

Рекомендации

  1. ^ Уве Асманн, Инвазивная программная композиция, Springer-Verlag, 2003, с. 39.
  2. ^ Линн Андреа Штайн, Делегация - это наследование. Конференция по языкам и приложениям систем объектно-ориентированного программирования, Орландо, Флорида, 1987, США, стр. 138 - 146
  3. ^ Стефан Херрманн, Демистификация объекта шизофрения, в Трудах МАСПЕГИ Мастерская в ЭКООП 2010