Тож я прочитав це, і це майже те, що це означає: взяти абстрактне поняття і зробити його конкретним. Або існує проксі, який представляє абстрактне поняття. Наприклад, у Lisp поняття абстракції та застосування процедур переосмислюється, коли ви використовуєте лямбди.
Сама по собі реіфікація є широким поняттям, а не лише застосовним до функціональних мов програмування.
Наприклад, у Java є типи, доступні під час виконання. Це типи, які можна перетворювати. Це означає, що існує конкретне відображення абстрактного поняття типу під час роботи. На відміну від них, існують типи, що не підлягають переробці. Це особливо видно під час використання дженериків у Java. У Java загальні типи підлягають видаленню, тому загальна інформація про тип недоступна під час виконання (якщо параметризований тип не використовує необмежені символи підстановки).
Інший приклад - це коли ви намагаєтесь змоделювати концепцію. Наприклад, припустимо, що у вас є Group
клас і User
клас. Зараз існують певні абстрактні поняття, що описують взаємозв'язок між ними. Наприклад, абстрактне поняття того, User
що є членом Group
. Щоб зробити ці відносини конкретними, ви повинні написати метод із назвою, isMemberOf
який повідомляє, чи User
є a членом a Group
. Отже, що ви тут зробили, це те, що ви переосмислили (зробили реальним / явним / конкретним) абстрактне поняття членства в групі.
Ще один хороший приклад - це база даних, де у вас є взаємозв'язки батьків і дітей між об'єктами. Ви можете описати ці відносини в абстрактному понятті дерева. Тепер припустимо, у вас є функція / метод, який бере ці дані з бази даних і створює фактичний Tree
об’єкт. Те, що ви зараз зробили, переосмислило абстрактне поняття дерев’яних відносин між батьками та дітьми у фактичний Tree
об’єкт.
Повертаючись до функціональних мов загалом, мабуть, найкращим прикладом реіфікації є створення самої мови програмування Lisp. Лісп був абсолютно абстрактною і теоретичною конструкцією (в основному лише математичним позначенням для комп'ютерних мов). Так залишалося до тих пір, поки eval
функцію Ліспа фактично не реалізував Стів Рассел на IBM 704:
Згідно з повідомленням Пола Грема в Hackers & Painters, с. 185, Маккарті сказав: "Стів Рассел сказав, дивись, чому б мені не запрограмувати цей евал ..., і я сказав йому, хо, хо, ти плутаєш теорію з практикою, цей евал призначений для читання, а не для обчислень. Але він пішов далі і зробив це. Тобто, він склав евал у моїй роботі в машинний код IBM 704, виправивши помилку, а потім рекламував це як інтерпретатор Lisp, що це, безумовно, було. по суті та форма, яку вона має сьогодні ... "
Тож Лісп був переосмислений з абстрактного поняття у фактичну мову програмування.