Введение

Принцип компьютерного программирования

Принцип единого доступа в компьютерном программировании был сформулирован Бертраном Мейером (впервые в его книге «Объектно-ориентированное построение программного обеспечения»). Он гласит: «Все услуги, предоставляемые модулем, должны быть доступны посредством единого синтаксиса, который не указывает, реализованы ли они через хранение или вычисление». Этот принцип в целом применим к синтаксису объектно-ориентированных языков программирования. В более простой форме он утверждает, что не должно быть синтаксических различий между обращением к атрибуту, предварительно вычисленному свойству или методу/запросу объекта. Хотя большинство примеров фокусируются на аспекте «чтения» принципа (то есть, на получении значения), Мейер показывает, что последствия принципа для «записи» (то есть, для изменения значения) сложнее, в своей ежемесячной колонке на официальном сайте языка программирования Эйфель.

Пояснение

Проблема, которую решает Мейер, связана с поддержкой и сопровождением крупных программных проектов или библиотек кода. Иногда в процессе разработки или сопровождения программного обеспечения возникает необходимость изменить класс или объект, превратив простой доступ к атрибуту в вызов метода, после того как значительная часть кода уже написана. Языки программирования часто используют различный синтаксис для доступа к атрибутам и вызова методов (например, `.` против `()`). Такое изменение синтаксиса потребовало бы, в популярных языках программирования того времени, изменения исходного кода во всех местах использования этого атрибута. Это могло бы потребовать внесения изменений в исходный код во множестве различных мест в очень большом объеме кода. Или, что еще хуже, если изменение касается библиотеки объектов, используемой сотнями клиентов, каждому из них пришлось бы найти и изменить все места использования атрибута в своем коде и перекомпилировать свои программы. Обратный переход (от метода к простому атрибуту) не представлял собой проблемы, поскольку функцию можно было просто сохранить и заставить ее возвращать значение атрибута. Мейер осознал необходимость в том, чтобы разработчики программного обеспечения писали код таким образом, чтобы минимизировать или устранить каскадные изменения, возникающие в результате преобразования атрибута объекта в вызов метода или наоборот. Для решения этой задачи он разработал принцип единого доступа. Многие языки программирования не поддерживают принцип единого доступа в строгом виде, но поддерживают его различные формы. Свойства, предоставляемые во многих языках программирования, решают проблему, которую Мейер решал с помощью принципа единого доступа, другим способом. Вместо предоставления единой унифицированной нотации, свойства позволяют вызывать метод объекта, используя тот же синтаксис, что и для доступа к атрибутам. Отдельный синтаксис вызова метода при этом остается доступным.

C++

В C++ нет ни UAP, ни свойств. Когда объект изменяется таким образом, что атрибут (например, цвет) становится парой функций, любое место в коде, где используется экземпляр этого объекта для установки или получения значения атрибута, необходимо изменить, чтобы вызывать одну из этих функций. Используя шаблоны и перегрузку операторов, можно эмулировать свойства, но это сложнее, чем в языках с прямой поддержкой свойств. Это усложняет поддержку программ на C++. Распределенные библиотеки объектов C++ должны тщательно продумать, как они предоставляют доступ к своим членам данных.

Язык JavaScript

JavaScript поддерживает вычисляемые свойства с 2009 года.