O que significa introspecção exatamente? Como é útil para um programador? Alguém pode explicar em termos leigos?
fonte
O que significa introspecção exatamente? Como é útil para um programador? Alguém pode explicar em termos leigos?
A introspecção é uma maneira de descobrir o que é um objeto e o que ele contém em tempo de execução. Em alguns idiomas, isso é mais necessário que em outros. O Python digitado dinamicamente (ou seja, um objeto pode obter atributos e métodos em tempo de execução) usa a introspecção para descobrir o status atual de um objeto.
Aqui está um exemplo muito simplista de Python, no qual você começa com uma classe e adiciona um novo atributo e, usando a introspecção, monitora quais atributos estão disponíveis na instância do objeto.
>>> class MyObject:
... variable = False
>>> instance = MyObject()
>>> dir(instance)
['__doc__', '__module__', 'variable']
>>> instance.newvariable = "Kittens"
>>> dir(instance)
['__doc__', '__module__', 'newvariable', 'variable']
Portanto, em sistemas dinâmicos, você pode usar coisas como a do Python hasattr
para saber se um objeto poderá fazer o que você está tentando fazer com ele. Mesmo se você não usá-lo em tempo de execução, a introspecção também é extremamente útil para depuração.
Agora, nas bibliotecas GObjects e GObject. Eles estão em C e em C você não recebe toda essa bobagem fofa de código gerenciado e obtém desempenho. Isso significa que a introspecção integrada não existe e significa que é mais difícil manter uma ligação externa.
As ligações são uma API entre itens em diferentes idiomas que lhes permitem trabalhar juntos. Para que isso funcione, você precisa de uma API comum e, nesse caso, a API é GObject. Mas, para que isso funcione, a ligação do chamador precisa saber o que está disponível. Até a introspecção do GObject, isso precisava ser codificado nas ligações e isso significa manter uma lista escrita à mão em cada conjunto de ligações.
O GObject Introspection fornece essencialmente um scanner que pode procurar a fonte atual do GObject com o qual você está trabalhando e fornece informações de ligação XML. Isso é processado pelas ligações e você acaba com uma API que simplesmente funciona, o tempo todo.
Certamente não abordei tudo aqui, mas estou tentando dar uma idéia dos dois tópicos (introspecção e por que o GObjects precisa). Se você quiser saber mais, há muito no site do Gnome.