Virtual cədvəl və şahid cədvəli arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Virtual cədvəl (vtable) obyekt yönümlü proqramlaşdırma dillərində çoxşaxəliliyi həyata keçirmək üçün istifadə olunur, Swift üçün sinflər daxil olmaqla. O, sinfin funksiyalarına (metodlara) işarəçilər saxlayır və bunlar alt sinflərdə yenidən yaza bilər. Əsas sinfə işarəçi vasitəsilə metod çağırıldıqda, sistem obyektin vtable-ına baxır və hansı metodun çağırılmalı olduğunu müəyyən edir (əsas sinif və ya alt sinifdə yenidən yazılmış).
Şahid cədvəli (witness table) Swift-də protokollar üçün istifadə olunur. O, bu protokolun tələblərinin (xüsusiyyətlər, metodlar, əlaqəli tiplər) konkret tip üçün tətbiqinə işarəçilər saxlayır. Protokol tipli arqument qəbul edən funksiya çağırıldıqda, sistem ötürülən obyektlə əlaqəli witness table-dan istifadə edərək, bu tip üçün protokol tələblərinin xüsusi tətbiqlərinə çıxış edir. Witness table Swift-ə protokollar üçün dinamik yönləndirmə həyata keçirməyə imkan verir və siniflər üçün vtable ilə əlaqəli əlavə xərcləri aradan qaldırır, həmçinin protokolların elastikliyini dəstəkləyir.
Əsas fərqlər:
| Xüsusiyyət | Virtual cədvəl (vtable) | Şahid cədvəli (witness table) |
|---|---|---|
| Tətbiq olunan | Sinflər | Protokollar |
| Əsasən saxlayır | Sinif metodlarına işarəçilər | Bu tip üçün protokol tələblərinin tətbiqlərinə işarəçilər |
| Mexanizm | Mirasçılıq | Protokollara uyğunluq |
| Çoxşaxəlilik | Alt tiplər çoxşaxəliliyi | Protokol çoxşaxəliliyi |