Reflection_(khoa_học_máy_tính)

Trong khoa học máy tính, khả năng phục hồi (hay reflection) được hiểu là khả năng quan sát và tự chỉnh sửa cấu trúc ở mức cao của một của một chương trình (máy tính). Thông thường, reflection dùng để chỉ khả năng phục hồi động hay khả năng phục hồi trong thời gian thực thi (runtime reflection), mặc dù vậy, một số ngôn ngữ lập trình hỗ trợ phục hồi tĩnh hay phục hồi tại thời gian biên dịch (compile time reflection). Khả năng này thường có trong các ngôn ngữ lập trình cấp cao chạy ở máy ảo như Smalltalk, và ít phổ biến ở các ngôn ngữ lập trình cấp thấp như C.Mẫu hình lập trình kiểu reflection được gọi là lập trình có tính chất phục hồi.Khi mã nguồn của một chương trình được biên dịch, các thông tin về cấu trúc của chương trình (như struct, tên biến, tên phương thức, tên class...) thường bị mất đi khi đã chuyển thành mã cấp thấp (thường là mã nhị phân). Nếu một hệ thống có hỗ trợ phục hồi thì thông tin cấu trúc sẽ được bảo toàn dưới dạng siêu dữ liệu cùng với mã được sinh ra.Tùy vào cách hiện thực, đoạn mã với khả năng phục hồi thường chạy chậm hơn khi không có nó.Trong các ngôn ngữ mà không có sự khác biệt giữa thời gian thi hànhthời gian dịch (ví dụ: Lisp và các biến thể của nó), thì không có sự khác biệt giữa biên dịch và thông dịch của mã và sự phục hồi.