Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
В объектно-ориентированном программировании делегирование относится к вычислению значения члена (свойства или метода) одного объекта (приемника) в контексте другого исходного объекта (отправителя). Делегирование может быть явным, посредством передачи ответственности от отправителя к получателю, что возможно в любом объектно-ориентированном языке, или неявным, посредством правил поиска членов языка, что требует поддержки этой функции на уровне языка. Неявное делегирование является основным механизмом повторного использования поведения в прототипном программировании, аналогичным наследованию в классовом программировании. Наиболее известными языками, поддерживающими делегирование на уровне языка, являются Self, который реализует делегирование через изменяемые родительские слоты, используемые при поиске метода при вызове через `self`, и JavaScript; см. Делегирование в JavaScript. Термин "делегирование" также используется в широком смысле для описания различных других отношений между объектами; подробнее см. в статье Делегирование (программирование). Часто путают делегирование с простым использованием другого объекта, что точнее называется консультацией или агрегацией, а также с вычислением значения члена одного объекта путем вычисления соответствующего члена другого объекта, особенно в контексте принимающего объекта, что точнее называется перенаправлением (когда оборачивающий объект не передает себя обернутому объекту). Шаблон делегирования – это шаблон проектирования программного обеспечения для реализации делегирования, хотя этот термин также используется в широком смысле для описания консультации или перенаправления.
In object oriented programming, delegation refers to evaluating a member (property or method) of one object (the receiver) in the context of another original object (the sender). Delegation can be done explicitly, by passing the responsibilities of the sending object to the receiving object, which can be done in any object oriented language; or implicitly, by the member lookup rules of the language, which requires language support for the feature. Implicit delegation is the fundamental method for behavior reuse in prototype based programming, corresponding to inheritance in class based programming. The best known languages that support delegation at the language level are Self, which incorporates the notion of delegation through its notion of mutable parent slots that are used upon method lookup on self calls, and JavaScript; see JavaScript delegation. The term delegation is also used loosely for various other relationships between objects; see delegation (programming) for more. Frequently confused concepts are simply using another object, more precisely referred to as consultation or aggregation; and evaluating a member on one object by evaluating the corresponding member on another object, notably in the context of the receiving object, which is more precisely referred to as forwarding (when a wrapper object doesn't pass itself to the wrapped object). The delegation pattern is a software design pattern for implementing delegation, though this term is also used loosely for consultation or forwarding.
Связанные области
Делегирование можно описать как механизм низкого уровня для обмена кодом и данными между сущностями. Таким образом, оно закладывает основу для других языковых конструкций. Языки программирования, ориентированные на роли, активно использовали делегирование, однако особенно старые из них фактически использовали агрегацию, заявляя об использовании делегирования. Это не следует считать обманом, а скорее связано с множеством определений того, что подразумевается под делегированием (как описано выше). В последнее время также ведутся работы по распределённому делегированию, например, клиенты поисковой системы (при поиске недорогих гостиничных номеров) могут использовать общую сущность посредством делегирования для обмена лучшими результатами и общей повторно используемой функциональностью. Эрнст и Лоренц в 2003 году также предложили использовать делегирование для разрешения советов в аспектно-ориентированном программировании.
Delegation can be described as a low level mechanism for sharing code and data between entities. Thus it builds the foundation for other language constructs. Notably role oriented programming languages have been utilizing delegation, but especially the older ones factually used aggregation while claiming to use delegation. This should not be considered cheating, merely the plural definitions of what delegation means (as described above). More recently work has also been done on distributing delegation, so e. g. clients of a search engine (finding cheap hotel rooms) can use a shared entity using delegation to share best hits and general re usable functionality. Delegation has also been suggested for advice resolution in aspect oriented programming by Ernst and Lorenz in 2003.