Из Википедии, бесплатной энциклопедии
  (Перенаправлен с Первоклассного объекта )
Перейти к навигации Перейти к поиску

В программировании язык дизайна , в первый класс гражданина ( в том числе тип , объект , субъект , или значение ) в данном языке программирования является юридическим лицом , которое поддерживает все операции , как правило , доступны для других лиц. Эти операции обычно включают передачу в качестве аргумента, возвращение из функции, изменение и присвоение переменной. [1]

История [ править ]

Понятие объектов первого и второго класса было введено Кристофером Стрейчи в 1960-х годах. [2] [3] На самом деле он не определял этот термин строго, но противопоставлял действительные числа и процедуры в АЛГОЛ :

Объекты первого и второго класса. В ALGOL действительное число может появиться в выражении или быть присвоено переменной, и любое из них может появиться как фактический параметр при вызове процедуры. С другой стороны, процедура может появляться только в другом вызове процедуры либо как оператор (наиболее распространенный случай), либо как один из фактических параметров. Нет других выражений, включающих процедуры или результаты которых являются процедурами. Таким образом, в некотором смысле процедуры в ALGOL являются гражданами второго сорта - они всегда должны появляться лично и никогда не могут быть представлены переменной или выражением (за исключением случая формального параметра) ... [4]

Робин Попплстоун дал следующее определение: Все предметы имеют определенные основные права.

  • 1. Все элементы могут быть фактическими параметрами функций.
  • 2. Все элементы могут быть возвращены в результате выполнения функций.
  • 3. Все позиции могут быть предметом уступок.
  • 4. Все предметы можно проверить на равенство.

[5]

В 1990-е годы Рафаэль Финкель [6] предложил определения ценностей второго и третьего класса, но эти определения не получили широкого распространения. [7]

Примеры [ править ]

Простейшие скалярные типы данных, такие как целые числа и числа с плавающей запятой, почти всегда первоклассны.

Во многих старых языках массивы и строки не являются первоклассными: они не могут быть назначены как объекты или переданы как параметры подпрограмме. Например, ни Fortran IV, ни C не поддерживают присвоение массивов, и когда они передаются в качестве параметров, фактически передается только позиция их первого элемента - их размер теряется. Кажется, что C поддерживает присвоение указателей массива , но на самом деле это просто указатели на первый элемент массива и опять же не несут размер массива.

В большинстве языков типы данных не являются объектами первого класса, хотя в некоторых объектно-ориентированных языках классы являются объектами первого класса и являются экземплярами метаклассов .

Немногие языки вообще поддерживают продолжения и GOTO- метки как объекты, не говоря уже о первоклассных объектах.

Функции [ править ]

Многие языки программирования поддерживают передачу и возврат значений функций, которые могут применяться к аргументам. Достаточно ли этого для первоклассного вызова значений функций - это вопрос.

Некоторые авторы требуют, чтобы во время выполнения была возможность создавать новые функции, чтобы называть их «первоклассными». В результате функции в C не являются объектами первого класса; вместо этого их иногда называют объектами второго класса , потому что ими все еще можно манипулировать большинством вышеперечисленных способов (с помощью указателей на функции ).

В Smalltalk функции (методы) являются объектами первого класса, как и классы Smalltalk. Поскольку операторы Smalltalk (+, - и т. Д.) Являются методами, они также являются объектами первого класса.

Отражение [ править ]

Некоторые языки, такие как Java и PHP , имеют подсистему явного отражения, которая позволяет получить доступ к внутренним структурам реализации, даже если они недоступны или недоступны для управления так же, как обычные объекты.

См. Также [ править ]

  • Первоклассная функция
  • Овеществление

Ссылки [ править ]

  1. ^ Скотт, Майкл (2006). Прагматика языка программирования . Сан-Франциско, Калифорния: Издательство Морган Кауфманн. п. 140 .
  2. ^ Род Берстолл, "Кристофер Стрейчи - Понимание языков программирования", Высший порядок и символические вычисления 13 : 52 (2000)
  3. Гарольд Абельсон и Джеральд Джей Сассман, Структура и интерпретация компьютерных программ , 2-е издание, раздел 1.3.4, сноска 64. Архивировано 9 марта2015 г. в Wayback Machine.
  4. ^ Кристофер Стрейчи, «Фундаментальные концепции языков программирования» в высших порядках и символических вычислениях 13 : 11 (2000); хотя и опубликованные в 2000 году, это заметки из лекций, которые Стрейчи прочитал в августе 1967 года.
  5. ^ RJ Popplestone: Философия дизайна POP-2 . в: D. Michie: Machine Intelligence 3, Edinburgh, University Press, 1968.
  6. ^ Финкель, Р. Расширенный дизайн языка программирования , стр. 73
  7. ^ Норман Рэмси. «О первоклассной стоимости» . stackoverflow.com . Проверено 14 сентября 2013 года .
  8. ^ а б Паритош Шрофф, Скотт Ф. Смит. Вывод типа для сообщений первого класса с функциями сопоставления
  9. ^ Бове, Ана; Дибьер, Питер (2009). «Зависимые типы в действии» (PDF) . Языковая инженерия и тщательная разработка программного обеспечения . 5520 : 57–99. DOI : 10.1007 / 978-3-642-03153-3_2 . Архивировано 2 апреля 2014 года (PDF) . Проверено 8 июня 2015 года . (также в архиве )