Compartilhar via


Interface IModelObject2 (dbgmodel.h)

A interface IModelObject2 encapsula a noção de um objeto. Se esse objeto é um inteiro, uma cadeia de caracteres, algum tipo complexo no espaço de endereço de destino do depurador.

Esta versão 2 da interface dá suporte a todos os métodos anteriores com assinaturas idênticas e inclui novos métodos adicionais que fornecem funcionalidade adicional. Os novos métodos são listados no cabeçalho no final da seção dessa interface.

Herança

IModelObject2 herda de IModelObject.

Observações

Uma das coisas mais básicas e poderosas sobre o modelo de dados é que ele padroniza a definição do que é um objeto e como ele interage com um objeto. A interface IModelObject encapsula a noção de um objeto – se esse objeto é um inteiro, um valor de ponto flutuante, uma cadeia de caracteres, algum tipo complexo no espaço de endereço de destino do depurador ou algum conceito de depurador, como a noção de um processo ou um módulo.

Há várias coisas diferentes que podem ser mantidas em (ou em caixa) em um IModelObject:

• Valores intrínsecos – Um IModelObject pode ser um contêiner para vários tipos básicos: 8, 16, 32 ou 64 bits com sinal ou inteiros sem sinal, boolianos, cadeias de caracteres, erros ou a noção de vazio.

• Objetos Nativos – Um IModelObject pode representar um tipo complexo (conforme definido pelo sistema de tipo do depurador) dentro do espaço de endereço de qualquer que seja o destino do depurador

• Objetos Sintéticos – Um IModelObject pode ser um objeto dinâmico – um dicionário, se desejar: uma coleção de tuplas chave/valor/metadados e um conjunto de conceitos que definem comportamentos que não são simplesmente representados por pares chave/valor.

• Propriedades – Um IModelObject pode representar uma propriedade: algo cujo valor pode ser recuperado ou alterado com uma chamada de método. Uma propriedade dentro de um IModelObject é efetivamente uma interface IModelPropertyAccessor boxed em um IModelObject

• Métodos – Um IModelObject pode representar um método: algo que você pode chamar com um conjunto de argumentos e obter um valor retornado. Um método dentro de um IModelObject é efetivamente um interface IModelMethod boxed em um IModelObject

Um IModelObject não é um objeto isolado. Além de representar um dos tipos de objetos mostrados acima, cada objeto tem a noção de uma cadeia de modelos de dados pai. Essa cadeia se comporta muito como um | Cadeia de protótipos JavaScript. Em vez de uma cadeia linear de protótipos como o JavaScript tem, cada objeto de modelo de dados define uma cadeia linear de modelos pai. Cada um desses modelos pai, por sua vez, tem outra cadeia linear de seu próprio conjunto de pais. Em essência, cada objeto é uma agregação dos recursos (propriedades etc...) de si mesmo e de cada objeto nesta árvore. Quando uma propriedade específica é consultada, se o objeto em que ele é consultado não dá suporte a essa propriedade, a consulta é passada em ordem linear para cada pai, por sua vez. Isso cria um comportamento em que a pesquisa por uma propriedade é resolvida por uma pesquisa detalhada da árvore de agregação.

A extensibilidade dentro desse modelo de objeto é muito simples, considerando essa noção de que cada objeto é uma agregação de si mesmo e da árvore dos modelos pai. Uma extensão pode entrar e se adicionar à lista de modelos pai de outro objeto. Fazer isso estende o objeto. Dessa maneira, é possível adicionar funcionalidades a qualquer coisa: uma instância específica de um objeto ou valor, um tipo nativo, o conceito do depurador do que é um processo ou thread ou até mesmo a noção de "todos os objetos iteráveis".

Requisitos

Requisito Valor
cabeçalho dbgmodel.h

Consulte também

Visão geral das interfaces C++ do modelo de dados do depurador