Co dokładnie oznacza introspekcja? Jak to jest przydatne dla programisty? Czy ktoś może wyjaśnić laikowi?
Co dokładnie oznacza introspekcja? Jak to jest przydatne dla programisty? Czy ktoś może wyjaśnić laikowi?
Odpowiedzi:
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.