Refleksiya

Refleksiyaproqramlaşdırmada: proqramın icrası zamanı öz strukturunu və hərəkətlərini izləyə və dəyişdirə bildiyi proses. İnikasın əsaslandığı proqramlaşdırma paradiqması refleksiv proqramlaşdırma adlanır. Bu, metaproqramlaşdırmanın növlərindən biridir.

Müasir kompüter arxitekturalarının əksəriyyətində proqram kodu (CODE) verilənlər (DATA) kimi saxlanır. Kod və verilənlər arasında fərq ondan ibarətdir ki, kompüterlər kodu yerinə yetirməklə verilənləri emal edir. Başqa sözlə, kod (göstərişlər) yerinə yetirilir, verilənlər isə bu göstərişlərə uyğun olaraq emal olunur. Fəqət bəzi dillərdə yazılmış proqramlar öz göstərişlərini (INSTRUCTION) verilənlər kimi emal etmək və, beləliklə də, refleksiv modifikasiyaları yerinə yetirmək imkanına malikdir. Belə özünü modifikasiya edən proqramlar, əsasən, virtual maşından istifadə edən yüksək səviyyəli proqramlaşdırma dilləri (məsələn, SMALLTALK, skriptli dillər) vasitəsilə yaradılır. Refleksiyadan bir az aşağı səviyyədə Java, C, ML, Haskell kimi dillərdə istifadə olunur.

// Refleksiyasız new Foo().Hello();

// Refleksiya ilə Type type=System.Type.GetType("Foo"); var foo=Activator.CreateInstance(type); foo.GetType().GetMethod("Hello").Invoke(foo, null);

R-14. C++ dilində Foo sinfinin foo nüsxəsinin yaradılması və Hello metodunun çağrılması: refleksiyasız və refleksiyadan istifadə olunmaqla


Developed by StudentB