Введение

В объектно-ориентированном программировании делегирование относится к вычислению значения члена (свойства или метода) одного объекта (приемника) в контексте другого исходного объекта (отправителя). Делегирование может быть явным, посредством передачи ответственности от отправителя к получателю, что возможно в любом объектно-ориентированном языке, или неявным, посредством правил поиска членов языка, что требует поддержки этой функции на уровне языка. Неявное делегирование является основным механизмом повторного использования поведения в прототипном программировании, аналогичным наследованию в классовом программировании. Наиболее известными языками, поддерживающими делегирование на уровне языка, являются Self, который реализует делегирование через изменяемые родительские слоты, используемые при поиске метода при вызове через `self`, и JavaScript; см. Делегирование в JavaScript. Термин "делегирование" также используется в широком смысле для описания различных других отношений между объектами; подробнее см. в статье Делегирование (программирование). Часто путают делегирование с простым использованием другого объекта, что точнее называется консультацией или агрегацией, а также с вычислением значения члена одного объекта путем вычисления соответствующего члена другого объекта, особенно в контексте принимающего объекта, что точнее называется перенаправлением (когда оборачивающий объект не передает себя обернутому объекту). Шаблон делегирования – это шаблон проектирования программного обеспечения для реализации делегирования, хотя этот термин также используется в широком смысле для описания консультации или перенаправления.

Связанные области

Делегирование можно описать как механизм низкого уровня для обмена кодом и данными между сущностями. Таким образом, оно закладывает основу для других языковых конструкций. Языки программирования, ориентированные на роли, активно использовали делегирование, однако особенно старые из них фактически использовали агрегацию, заявляя об использовании делегирования. Это не следует считать обманом, а скорее связано с множеством определений того, что подразумевается под делегированием (как описано выше). В последнее время также ведутся работы по распределённому делегированию, например, клиенты поисковой системы (при поиске недорогих гостиничных номеров) могут использовать общую сущность посредством делегирования для обмена лучшими результатами и общей повторно используемой функциональностью. Эрнст и Лоренц в 2003 году также предложили использовать делегирование для разрешения советов в аспектно-ориентированном программировании.