Vì vậy, tôi đã đọc về điều này, và nó có ý nghĩa khá lớn: lấy một khái niệm trừu tượng và biến nó thành cụ thể. Hoặc, có một proxy đại diện cho khái niệm trừu tượng. Ví dụ, trong Lisp, khái niệm trừu tượng và ứng dụng thủ tục được sửa đổi khi bạn sử dụng lambdas.
Bản thân việc sửa lại là một khái niệm rộng và không chỉ áp dụng cho các ngôn ngữ lập trình chức năng.
Trong Java chẳng hạn, có những kiểu có sẵn trong thời gian chạy. Đây là những loại có thể tái sử dụng. Có nghĩa là, tồn tại một đại diện cụ thể của khái niệm trừu tượng về kiểu, trong thời gian chạy. Ngược lại, có những loại không thể tái sử dụng. Điều này đặc biệt rõ ràng trong quá trình sử dụng generic trong Java. Trong Java, các số liệu chung có thể bị xóa kiểu và vì vậy thông tin kiểu chung không có sẵn trong thời gian chạy (trừ khi kiểu được tham số hóa sử dụng các ký tự đại diện không bị ràng buộc).
Một ví dụ khác là khi bạn cố gắng mô hình hóa một khái niệm. Ví dụ, giả sử rằng bạn có một Group
lớp học và một User
lớp học. Bây giờ có một số khái niệm trừu tượng mô tả mối quan hệ giữa hai điều này. Ví dụ, khái niệm trừu tượng về một User
là thành viên của a Group
. Để làm cho mối quan hệ này cụ thể, bạn sẽ viết một phương thức được gọi là phương thức isMemberOf
cho biết liệu a có phải User
là thành viên của a hay không Group
. Vì vậy, những gì bạn đã làm ở đây là bạn đã reified (làm thực / rõ ràng / bê tông) các khái niệm trừu tượng của thành viên nhóm.
Một ví dụ điển hình khác là cơ sở dữ liệu nơi bạn có các mối quan hệ cha-con giữa các đối tượng. Bạn có thể mô tả mối quan hệ này trong khái niệm trừu tượng về cây. Bây giờ, giả sử bạn có một hàm / phương thức lấy dữ liệu này từ cơ sở dữ liệu và xây dựng một đối tượng thực tế Tree
. Có gì bây giờ bạn đã làm được reified khái niệm trừu tượng của cha mẹ và con cái cây giống như mối quan hệ thành một thực tế Tree
đối tượng.
Quay trở lại với các ngôn ngữ chức năng nói chung, có lẽ ví dụ điển hình nhất của việc sửa đổi là việc tạo ra chính ngôn ngữ lập trình Lisp. Lisp là một cấu trúc hoàn toàn trừu tượng và lý thuyết (về cơ bản chỉ là một ký hiệu toán học cho các ngôn ngữ máy tính). Nó vẫn như vậy cho đến khi eval
chức năng của Lisp được Steve Russel thực sự triển khai trên IBM 704:
Theo những gì được báo cáo bởi Paul Graham trong Hackers & Painters, p. 185, McCarthy nói: "Steve Russell nói, xem này, tại sao tôi không lập trình đánh giá này ..., và tôi nói với anh ta, ho, ho, bạn đang nhầm lẫn lý thuyết với thực hành, đánh giá này nhằm mục đích đọc, không phải cho máy tính. Nhưng anh ấy đã tiếp tục và làm được. Đó là, anh ấy đã biên dịch đánh giá trong bài báo của tôi thành mã máy IBM 704, sửa lỗi và sau đó quảng cáo đây là một trình thông dịch Lisp, chắc chắn là như vậy. Vì vậy, tại thời điểm đó Lisp đã về cơ bản là hình thức mà nó có ngày nay ... "
Vì vậy, Lisp được reified từ một khái niệm trừu tượng, vào một ngôn ngữ lập trình thực tế.