Uma pergunta para os especialistas do OOP. - página 35

 
Реter Konow:

Como são estabelecidas as ligações cruzadas entre as classes descendentes que têm uma raiz comum em algum lugar profundo da hierarquia?

Por exemplo: As classes F e Z são os elos finais de uma cadeia sucessória com uma raiz comum na hierarquia, a classe A.

Como se pode obter dados ou métodos da classe Z da classe F?

Você não pode. Não existe tal coisa. Mas não há necessidade disso.

Depois de criar objetos você pode passar um ponteiro de um objeto para o segundo e um ponteiro do segundo objeto para o primeiro.

Embora, se estivermos falando especificamente sobre a classe, você pode abordar qualquer objeto através de dois colons. Mas para que você precisa disso? É necessário às vezes, é claro, mas é uma característica extremamente menor do OOP.

 
Dmitry Fedoseev:

De jeito nenhum. Não existe tal coisa. Mas você não precisa.

Depois de criar objetos, você pode passar um ponteiro de um objeto para o segundo e um ponteiro do segundo objeto para o primeiro.

Embora, se estivermos falando especificamente sobre a classe, você pode se referir a qualquer coisa através de dois colons. Mas para que você precisa disso?

Tudo depende de quais tarefas a classe F está resolvendo. Pode haver uma situação em que os dados ou métodos utilizados em uma cadeia de herança de terceiros podem ser úteis.
 

Exemplo: A classe F armazena os métodos Cor e Comprimento, e a classe Z armazena os métodos Som e Largura.

Aparece um Objeto que tem duas propriedades, Comprimento e Largura, mas são calculados por diferentes classes F e Z. O que fazer? Criar uma classe separada com a repetição desses métodos, ou como posso acessá-los? (Com quatro pontos?).

 
Реter Konow:

Exemplo: A classe F armazena os métodos Cor e Comprimento, e a classe Z armazena os métodos Som e Largura.

Aparece um Objeto que tem duas propriedades, Comprimento e Largura, mas são calculados por diferentes classes F e Z. O que fazer? Criar uma classe separada com a repetição desses métodos, ou como posso acessá-los? (Com quatro pontos?).

Você poderia criar uma nova classe e incluir as classes F e Z nela.

class F{
};

class Z{
};

class Y{
   public:
   F f;
   Z z;
}
 
Dmitry Fedoseev:

Você pode criar uma nova classe e incluir nela as classes F e Z.

Uma aula de arco? Entendi. Obrigado.
 
Dmitry Fedoseev:

Você pode criar uma nova classe e incluir nela as classes F e Z.

Alternativamente, na classe onde você quer os dados da outra classe, você pode fazer um método para obter um ponteiro para a classe desejada.

 
Реter Konow:
Um "arco" de classe? Entendi. Obrigado.

Você pode simplesmente obter um ponteiro para a classe que deseja, e usar o ponteiro para obter um objeto de classe. Mas você tem que ter cuidado para não colocar um ponteiro em um objeto de classe vazio ou novo.

 
Artyom Trishkin:

Você pode simplesmente obter um ponteiro para a classe desejada, e usar o ponteiro para obter um objeto de classe. Mas você tem que ter cuidado para não colocar um ponteiro em um objeto de classe vazio.

Sutilezas. Vejo. A hierarquia da herança é conveniente quando os dados são claramente classificáveis, pré-definidos e inequívocos. medida que os objetos se tornam mais complexos, podem aparecer combinações de métodos e propriedades não previstas nas classes, o que requer a construção de "amarrações" - ou seja, ligações cruzadas entre as classes. Isto nem sempre é conveniente e pode quebrar o belo esquema de distribuição e forçá-lo a ser revisto.
 
Реter Konow:
Uma classe de "curvatura"? Estou vendo, obrigado.

No exemplo

class F{
};

class Z{
};

class Y{
   public:
   F f;
   Z z;
}

A classe Y contém variáveis com tipos de classes F e Z.

Mas se você já tiver objetos das classes F e Z criados e usados em algum lugar, não poderá acessá-los no objeto Y. Haverá dois novos objetos das classes F e Z no objeto Y.

E para ter acesso aos objetos das classes F e Z criados anteriormente e já utilizados, você precisa obter referências aos objetos F e Z na classe Y - então a classe Y pode operar com esses dados, que já estão escritos em F e Z, em vez de usar F e Z novos e imaculados.

Mas se você criar tal objeto, então F e Z nele dará acesso às classes F e Z, e você terá que preenchê-las somente através da classe Y - novamente, dê acesso aos objetos F e Z a partir dele, obtenha um ponteiro para o objeto que você precisa e trabalhe com ele através do ponteiro.

 
Реter Konow:
Sutilezas. Vejo. A hierarquia da herança é conveniente quando os dados são claramente classificáveis, pré-definidos e inequívocos. medida que os objetos se tornam mais complexos, podem aparecer combinações de métodos e propriedades não destinadas a classes e isto requer a construção de "amarrações" - ou seja, ligações cruzadas entre classes. Isto nem sempre é conveniente e pode quebrar o belo esquema de distribuição e forçá-lo a ser revisto.

Você não precisa quebrar nada - você só precisa adicionar um método à classe que dê um ponteiro para o objeto requerido de outra classe.

Nos artigos recentes, passei desta forma indicações deobjetos já criados e em funcionamentoda classe de coleção de símbolos e do objeto da conta corrente, que já têm dados acumulados, em objetos de comércio. E a classe comercial lida com eles como se sempre os tivesse tido.