Apa arti introspeksi sebenarnya? Bagaimana ini berguna untuk seorang programmer? Adakah yang bisa dijelaskan dengan istilah awam?
sumber
Apa arti introspeksi sebenarnya? Bagaimana ini berguna untuk seorang programmer? Adakah yang bisa dijelaskan dengan istilah awam?
Introspeksi adalah cara untuk mengetahui apa objek itu dan apa yang dikandungnya saat runtime. Dalam beberapa bahasa ini lebih penting daripada yang lain. Python yang diketik secara dinamis (artinya, suatu objek dapat memperoleh atribut dan metode saat runtime) menggunakan introspeksi untuk mengetahui status objek saat ini.
Berikut ini adalah contoh Python yang sangat sederhana di mana Anda mulai dengan kelas dan menambahkan atribut baru, dan, menggunakan introspeksi, memantau atribut apa yang tersedia pada instance objek.
>>> class MyObject:
... variable = False
>>> instance = MyObject()
>>> dir(instance)
['__doc__', '__module__', 'variable']
>>> instance.newvariable = "Kittens"
>>> dir(instance)
['__doc__', '__module__', 'newvariable', 'variable']
Jadi dalam sistem dinamis Anda dapat menggunakan hal-hal seperti Python hasattr
untuk mengetahui apakah suatu objek akan dapat melakukan apa yang Anda coba lakukan dengannya. Bahkan jika Anda tidak menggunakannya saat runtime, introspeksi juga sangat berguna untuk debugging.
Sekarang ke GObjects dan perpustakaan berbasis GObject. Mereka berada di C dan di C Anda tidak mendapatkan semua omong kosong kode terkelola yang indah dan halus ini, Anda mendapatkan kinerja. Ini berarti introspeksi bawaan tidak ada dan itu berarti lebih sulit untuk mempertahankan ikatan eksternal.
Binding adalah API antara hal-hal dalam berbagai bahasa yang memungkinkan mereka untuk bekerja sama. Agar itu berfungsi, Anda memerlukan API umum dan dalam hal ini API adalah GObject. Tetapi agar ini berhasil, penelepon yang mengikat harus tahu apa yang tersedia untuk itu. Sampai Introspeksi GObject, ini harus di-hard-code ke dalam binding dan itu berarti mempertahankan daftar tulisan tangan pada setiap set binding.
Introspeksi GObject pada dasarnya menyediakan pemindai yang dapat menelusuri sumber GObject saat ini yang bekerja dengan Anda dan memberi Anda informasi pengikatan XML. Ini kemudian diproses oleh binding dan Anda berakhir dengan API yang hanya berfungsi, sepanjang waktu.
Saya jelas belum membahas semuanya di sini, tetapi saya mencoba memberi Anda gambaran tentang dua topik (introspeksi dan mengapa GObject membutuhkannya). Jika Anda ingin tahu lebih banyak, ada banyak di situs web Gnome.