OLP. Problemas de aplicación - página 10

 

Interesting:

El método propuesto por Alexander(AlexSTAL) podría haber resuelto el problema (no tengamos en cuenta su cierta problemática).

¡Whoa, whoa, whoa, whoa!

No lo he sugerido, he dicho que existe una posibilidad.

¿Y cuál es tu problema, que no puedo entender?

¿Debes estar discutiendo un ejemplo en el que la mitad de la lógica está ausente y la otra mitad está equivocada (que queda desde el inicio de la POO)?

 
AlexSTAL:

¡Whoa, whoa, whoa, whoa!

No lo he sugerido, he dicho que hay una posibilidad.

¿Y cuál es tu problema, que no puedo entender?

Digamos que necesitas poner diferentes objetos en un array.

Al mismo tiempo, todas las propiedades de estos objetos deben ser almacenadas en el mismo array + debe haber acceso a todos los eventos y métodos.

La posibilidad que ofreces (la implementación puede ser diferente) por lo que entiendo, permite acceder a la funcionalidad de los objetos (eventos y métodos).

Pero el almacenamiento de datos en un array con un tipo antecesor es poco probable que funcione (si se tiene en cuenta que estos datos no fueron declarados en el antecesor).


Permítanme aclarar mi pensamiento.

Si nos detenemos en este ejemplo particular, entonces:

1. Digamos que podemos crear un array que almacenará el tipo de objeto, la posición en X, la posición en Y;

2. Podríamos tratar de identificar un objeto único por su puntero (aunque cuando se trabaja con un objeto, el puntero podría no ser utilizado, entonces sería deseable tener algo así como un mango);

Una pregunta tonta (no veo otra solución), ¿por qué utilizar un puntero como manejador (crear una propiedad en el ancestro y rellenarla en el constructor)?

No tenemos la posibilidad de almacenar las propiedades descendientes en un array (sólo las que no están definidas en el ancestro). Por ejemplo, según tengo entendido, no podemos almacenar el radio de un círculo o el lado de un cuadrado en una matriz.

 
Interesting:

3. no tenemos la posibilidad de almacenar las propiedades descendientes en el array (sólo las no acuñadas en el ancestro). Por ejemplo, según tengo entendido, no podemos almacenar el radio de un círculo o el lado de un cuadrado en un array.

Por qué no iba a funcionar... No se dirige a ellos directamente, sino que utiliza su función "GetValue" con el parámetro "radius" (si el objeto es un círculo)... Esto es como una posibilidad...

Usted establece una tarea específica simple

 
AlexSTAL:

Por qué no iba a funcionar... No se dirige a ellos directamente, sino que utiliza su función "GetValue" con el parámetro "radius" (si el objeto es un círculo)... Esto es como una posibilidad...

Usted establece un problema simple y específico

La tarea es sencilla, pero quién dice que es fácil de aplicar.

La tarea consiste en registrar en un array varios objetos (descendientes de la clase base) junto con sus datos.

¡¡¡Que quede claro, que junto con sus datos!!!

2. GetArea() para cada descendiente;

3. Añade las siguientes características:

a. Calcula el perímetro del cuadrado - lado *4;

б. Cálculo del perímetro de un círculo - 2πR.

3. Añade formas adicionales a la biblioteca: rectángulo (dos lados) y triángulo.

4. Añade las siguientes características:

a. calcular el área de un rectángulo - base por altura;

б. Calcula el perímetro de un rectángulo - suma de lados *2;

в. Cálculo del área de un triángulo;

г. Cálculo del perímetro de un triángulo.

5. Identificar cada objeto individualmente (entre todos los objetos y entre los objetos de su clase).

Preferiblemente con o sin punteros.

6. calcular el perímetro y el área de las formas utilizando sólo los datos almacenados en la matriz.


PS

No está permitido transferir código de los descendientes al antepasado (a menos que este código se aplique a todos los antepasados).

Es decir, no se puede, por ejemplo, transferir un radio a un ancestro, ya que un cuadrado, un rectángulo y un círculo no lo tienen.

Se puede añadir una nueva funcionalidad a un ancestro siempre que se aplique a todos los descendientes.

Tomamos como base el código del tráiler.

Когда нужно использовать указатели в MQL5
Когда нужно использовать указатели в MQL5
  • 2010.03.25
  • MetaQuotes Software Corp.
  • www.mql5.com
Все объекты в MQL5 по умолчанию передаются по ссылке, но есть возможность использовать и указатели объектов. При этом есть опасность получить в качестве параметра функции указатель неинициализированного объекта. В этом случае работа программы будет завершена критически с последующей выгрузкой. Автоматически создаваемые объекты как правило такой ошибки не вызывают, и в этом отношении они достаточно безопасны. В этой статье мы попробуем разобраться в чем разница между ссылкой и указателей, когда оправдано использование указателей и как написать безопасный код с использованием указателей.
Archivos adjuntos:
Forum-3.mq5  11 kb
 

Dentro de un mismo array, personalmente resolví el problema simplemente añadiendo variables para almacenar el área y el perímetro al ancestro + funcionalidad para escribir datos en ellas.

En este caso, si se controla el resultado de GetArea() y otras funciones de cálculo directo.

Parece que no he roto mis propias reglas.

 

He esbozado una forma de aplicar el enfoque que describes.

No es completo, pero es el enfoque más importante

Archivos adjuntos:
_script.mq5  4 kb
 
AlexSTAL:

He esbozado una forma de aplicación con el enfoque que describes.

No es completo, pero es el enfoque más importante

El planteamiento es claro. Es probablemente una de las mejores soluciones a un problema similar.

Al menos por ahora.

 
Interesting:

La tarea es sencilla, pero ¿quién dice que es fácil de aplicar?

1. la tarea consiste en escribir diferentes objetos (descendientes de una clase base) junto con sus datos en un array.

...
Hojas de cálculo en MQL5 el problema ya ha sido resuelto y descrito.
 
Urain:
Las hojas de cálculo en MQL5 ya han resuelto y descrito el problema.

Qué bueno es poder leer... :)

Tampoco es un mal enfoque, aunque según he entendido ambos enfoques se calculan sobre la transferencia/lectura de un solo parámetro (aunque de diferentes tipos).

Pero, ¿qué hacer si hay muchos parámetros y es imposible meterlos todos en una clase base?

Según tengo entendido, el índice del parámetro a pasar debe introducirse adicionalmente (también se puede crear en la clase un array con parámetros apilados por índice).

 
Interesting:

Qué bueno es poder leer... :)

Tampoco es un mal enfoque, aunque según he entendido ambos enfoques están diseñados para la transferencia/lectura de un solo parámetro (aunque de diferentes tipos).

¿Y qué hacer si hay muchos parámetros y es imposible incluirlos todos en la clase base?

Según tengo entendido, es posible introducir un índice del parámetro a pasar (también es posible crear un array con parámetros apilados por índice en una clase)?

Lo he leído tres veces y sigo sin entender de qué va el mensaje.