Co dokładnie oznacza introspekcja? Jak to jest przydatne dla programisty? Czy ktoś może wyjaśnić laikowi?
źródło
Co dokładnie oznacza introspekcja? Jak to jest przydatne dla programisty? Czy ktoś może wyjaśnić laikowi?
Introspekcja to sposób na sprawdzenie, czym jest obiekt i co zawiera w czasie wykonywania. W niektórych językach jest to bardziej konieczne niż w innych. Python, który jest dynamicznie typowany (to znaczy, obiekt może uzyskać atrybuty i metody w czasie wykonywania) korzysta z introspekcji, aby sprawdzić aktualny status obiektu.
Oto bardzo uproszczony przykład Pythona, w którym zaczynasz od klasy i dodajesz nowy atrybut, a korzystając z introspekcji monitorujesz, jakie atrybuty są dostępne w instancji obiektu.
>>> class MyObject:
... variable = False
>>> instance = MyObject()
>>> dir(instance)
['__doc__', '__module__', 'variable']
>>> instance.newvariable = "Kittens"
>>> dir(instance)
['__doc__', '__module__', 'newvariable', 'variable']
Tak więc w systemach dynamicznych możesz używać rzeczy takich jak Python, hasattr
aby stwierdzić, czy obiekt będzie w stanie zrobić to, co próbujesz z nim zrobić. Nawet jeśli nie używasz go w czasie wykonywania, introspekcja jest również niezwykle przydatna do debugowania.
Teraz w GObjects i bibliotekach opartych na GObject. Są w C, aw C nie dostajesz tych wszystkich uroczych, puszystych bzdur zarządzanego kodu, zyskujesz wydajność. Oznacza to, że nie ma wbudowanej introspekcji i trudniej jest utrzymać powiązanie zewnętrzne.
Wiązania to interfejs API między rzeczami w różnych językach, które pozwalają im współpracować. Aby to zadziałało, potrzebujesz wspólnego API, w tym przypadku API to GObject. Ale aby to zadziałało, powiązanie dzwoniącego musi wiedzieć, co jest dla niego dostępne. Do czasu introspekcji GObject musiało to być zakodowane na stałe w powiązaniach, a to oznacza utrzymywanie ręcznie napisanej listy na każdym zestawie powiązań.
GObject Introspection zasadniczo zapewnia skaner, który może przeszukiwać bieżące źródło GObject, z którym pracujesz i zapewnia informacje o powiązaniu XML. To jest następnie przetwarzane przez powiązania i powstaje interfejs API, który po prostu działa przez cały czas.
Z pewnością nie omówiłem tutaj wszystkiego, ale staram się dać Wam wyobrażenie o dwóch tematach (introspekcja i dlaczego GObjects tego potrzebują). Jeśli chcesz dowiedzieć się więcej, na stronie Gnome jest mnóstwo.