Una pregunta para los expertos en POO. - página 35

 
Реter Konow:

¿Cómo se establecen los enlaces cruzados entre clases descendientes que tienen una raíz común en algún lugar profundo de la jerarquía?

Por ejemplo: Las clases F y Z son los eslabones finales de una cadena de herencia con una raíz común en la jerarquía, la clase A.

¿Cómo se pueden obtener datos o métodos de la clase Z desde la clase F?

No se puede. No existe tal cosa. Pero no es necesario.

Después de crear los objetos puedes pasar un puntero de un objeto al segundo y un puntero del segundo objeto al primero.

Aunque, si hablamos específicamente de la clase, puedes dirigirte a cualquier objeto a través de dos colones. Pero, ¿para qué lo necesitas? Es necesario a veces, por supuesto, pero es una característica OOP extremadamente menor.

 
Dmitry Fedoseev:

De ninguna manera. No existe tal cosa. Pero no es necesario.

Después de crear los objetos, puedes pasar un puntero de un objeto al segundo y un puntero del segundo objeto al primero.

Aunque, si hablamos específicamente de la clase, puedes referirte a cualquier cosa a través de dos colones. Pero, ¿para qué lo necesitas?

Todo depende de las tareas que resuelva la clase F. Puede haber una situación en la que los datos o métodos utilizados en una cadena de herencia de terceros puedan ser útiles.
 

Ejemplo: La clase F almacena los métodos de Color y Longitud, y la clase Z los métodos de Sonido y Anchura.

Aparece un Objeto que tiene dos propiedades, Longitud y Anchura, pero son calculadas por diferentes clases F y Z. ¿Qué hacer? Crear una clase separada con la repetición de estos métodos, o ¿cómo puedo acceder a ellos? (¿Con cuatro puntos?).

 
Реter Konow:

Ejemplo: La clase F almacena los métodos de Color y Longitud, y la clase Z los métodos de Sonido y Anchura.

Aparece un Objeto que tiene dos propiedades, Longitud y Anchura, pero son calculadas por diferentes clases F y Z. ¿Qué hacer? Crear una clase separada con la repetición de estos métodos, o ¿cómo puedo acceder a ellos? (¿Con cuatro puntos?).

Podrías crear una nueva clase e incluir en ella las clases F y Z.

class F{
};

class Z{
};

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

Puedes crear una nueva clase e incluir en ella las clases F y Z.

¿Una clase de arco? Lo tengo. Gracias.
 
Dmitry Fedoseev:

Puedes crear una nueva clase e incluir en ella las clases F y Z.

Alternativamente, en la clase en la que quieres los datos de la otra clase, puedes hacer un método para obtener un puntero a la clase deseada.

 
Реter Konow:
¿Un "arco" de clase? Lo tengo. Gracias.

Puedes simplemente obtener un puntero a la clase que quieras, y usar el puntero para obtener un objeto de clase. Pero hay que tener cuidado de no obtener un puntero a un objeto de clase vacío o nuevo.

 
Artyom Trishkin:

Puede simplemente obtener un puntero a la clase deseada, y utilizar el puntero para obtener un objeto de clase. Pero hay que tener cuidado de no obtener un puntero a un objeto de clase vacío.

Sutilezas. Ya veo. La jerarquía de la herencia es conveniente cuando los datos son claramente clasificables, predefinidos e inequívocos. A medida que los objetos se vuelven más complejos, pueden aparecer combinaciones de métodos y propiedades no previstas en las clases, lo que requiere la construcción de "bindings", es decir, enlaces cruzados entre clases. Esto no siempre es conveniente y puede romper el bonito esquema de distribución y obligar a revisarlo.
 
Реter Konow:
¿Una clase de "reverencia"? Ya veo.

En el ejemplo

class F{
};

class Z{
};

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

La clase Y contiene variables con tipos de las clases F y Z.

Pero si ya tiene objetos de las clases F y Z creados y utilizados en algún lugar, no podrá acceder a ellos en el objeto Y. Habrá dos nuevos objetos de las clases F y Z en el objeto Y.

Y para obtener acceso a los objetos de las clases F y Z creados anteriormente y ya utilizados, es necesario obtener referencias a los objetos F y Z en la clase Y - entonces la clase Y puede operar con esos datos, que ya están escritos en F y Z, en lugar de utilizar los nuevos y prístinos F y Z.

Pero si creas un objeto de enlace de este tipo, entonces F y Z en él dará acceso a las clases F y Z, y deben ser llenados sólo a través de la clase Y - de nuevo, dar acceso a los objetos F y Z de ella, obtener un puntero al objeto que necesita y trabajar con él por el puntero.

 
Реter Konow:
Sutilezas. Ya veo. La jerarquía de la herencia es conveniente cuando los datos son claramente clasificables, predefinidos e inequívocos. A medida que los objetos se hacen más complejos, pueden aparecer combinaciones de métodos y propiedades no previstas para las clases, lo que requiere la creación de "bindings", es decir, enlaces cruzados entre clases. Esto no siempre es conveniente y puede romper el bonito esquema de distribución y obligar a revisarlo.

No es necesario romper nada - sólo hay que añadir un método a la clase que da un puntero al objeto requerido de otra clase.

En los últimos artículos he pasado punteros aobjetos de clase de colección de datos previamente creados y en funcionamiento y habiendo acumulado el objeto de cuenta corriente en los objetos de comercio de esta manera. Y la clase comercial los maneja como si siempre los hubiera tenido.