OLP. Problemi di applicazione - pagina 10

 

Interesting:

Il metodo proposto da Alexander(AlexSTAL) potrebbe aver risolto il problema (non teniamo conto della sua certa problematicità).

Ehi, ehi, ehi, ehi!

Non l'ho suggerito, ho detto che c'è una possibilità.

E qual è il tuo problema, non riesco a capire?

State discutendo un esempio in cui metà della logica manca e metà è sbagliata (rimasto dall'inizio dell'OOP)?

 
AlexSTAL:

Ehi, ehi, ehi, ehi!

Non l'ho suggerito, ho detto che c'è una possibilità.

E qual è il tuo problema, non riesco a capire?

Diciamo che avete bisogno di mettere diversi oggetti in un array.

Allo stesso tempo, tutte le proprietà di questi oggetti dovrebbero essere memorizzate nello stesso array + dovrebbe esserci l'accesso a tutti gli eventi e metodi.

La possibilità offerta da voi (l'implementazione può essere diversa) per quanto ho capito, permette l'accesso alla funzionalità degli oggetti (eventi e metodi).

Ma è improbabile che la memorizzazione di dati in un array con un tipo antenato funzioni (dato che questi dati non sono stati dichiarati nell'antenato).


Permettetemi di chiarire il mio pensiero.

Se ci fermiamo a questo particolare esempio, allora:

1. Diciamo che possiamo creare un array che memorizzerà il tipo di oggetto, la posizione in X, la posizione in Y;

2. Potremmo provare a identificare un oggetto unico tramite il suo puntatore (anche se quando si lavora con un oggetto, il puntatore potrebbe non essere usato, allora sarebbe auspicabile avere qualcosa come un handle);

Una domanda sciocca (non vedo altre soluzioni), perché usare un puntatore come handle (creare una proprietà nell'antenato e riempirlo nel costruttore)?

Non abbiamo la possibilità di memorizzare le proprietà discendenti in un array (solo quelle che non sono definite nell'antenato). Per esempio, per quanto ho capito, non possiamo memorizzare il raggio di un cerchio o il lato di un quadrato in un array.

 
Interesting:

3. non abbiamo la possibilità di memorizzare le proprietà discendenti nell'array (solo quelle non coniate nell'antenato). Per esempio, per quanto ho capito, non possiamo memorizzare il raggio di un cerchio o il lato di un quadrato in un array.

Perché non dovrebbe funzionare... Non li affronti direttamente, ma usi la tua funzione "GetValue" con il parametro "radius" (se l'oggetto è un cerchio)... Questa è una possibilità...

Si imposta un semplice compito specifico

 
AlexSTAL:

Perché non dovrebbe funzionare... Non li affronti direttamente, ma usi la tua funzione "GetValue" con il parametro "radius" (se l'oggetto è un cerchio)... Questa è una possibilità...

Si pone un problema semplice e specifico

Il compito è semplice, ma chi può dire che sia facile da attuare.

Il compito è quello di registrare in un array vari oggetti (discendenti della classe base) insieme ai loro dati.

Mettiamo in chiaro che insieme ai loro dati!!!

2. GetArea() per ogni discendente;

3. Aggiungere le seguenti caratteristiche:

a. Calcolare il perimetro del quadrato - lato *4;

б. Calcolo del perimetro di un cerchio - 2πR.

3. Aggiungi altre forme alla libreria - rettangolo (due lati) e triangolo.

4. Aggiungere le seguenti caratteristiche:

a. calcolare l'area di un rettangolo - base per altezza;

б. Calcolare il perimetro di un rettangolo - somma dei lati *2;

в. Calcolo dell'area di un triangolo;

г. Calcolo del perimetro di un triangolo.

5. Identificare ogni oggetto individualmente (tra tutti gli oggetti e tra gli oggetti della sua classe).

Preferibilmente con o senza puntatori.

6. calcolare il perimetro e l'area delle forme usando solo i dati memorizzati nella matrice.


PS

Non è permesso trasferire codice dai discendenti all'antenato (a meno che questo codice non si applichi a tutti gli antenati).

Cioè non si può, per esempio, trasferire un raggio in un antenato, poiché un quadrato, un rettangolo e un cerchio non ne hanno uno.

Una nuova funzionalità può essere aggiunta a un antenato, purché si applichi a tutti i discendenti.

Prendiamo il codice del trailer come base.

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

All'interno di un singolo array, personalmente ho risolto il problema semplicemente aggiungendo variabili per memorizzare area e perimetro all'antenato + funzionalità per scrivere dati su di esse.

In questo caso, se il risultato di GetArea() e altre funzioni di calcolo diretto è controllato.

Non mi sembra di aver infranto le mie stesse regole.

 

Ho abbozzato un modo per implementare l'approccio che descrivi.

Non è completo, ma è l'approccio più importante

File:
_script.mq5  4 kb
 
AlexSTAL:

Ho abbozzato un modo di implementare con l'approccio che descrivi.

Non è completo, ma è l'approccio più importante

L'approccio è chiaro. È probabilmente una delle migliori soluzioni a un problema simile.

Almeno per ora.

 
Interesting:

Il compito è semplice, ma chi dice che è facile da realizzare?

1. il compito è quello di scrivere diversi oggetti (discendenti di una classe base) insieme ai loro dati in un array.

...
Fogli di calcolo in MQL5 il problema è già stato risolto e descritto.
 
Urain:
I fogli di calcolo in MQL5 hanno già risolto e descritto il problema.

Quanto è bello poter leggere... :)

Anche l'approccio non è male, anche se come ho capito entrambi questi approcci sono progettati per il trasferimento/lettura di un solo parametro (anche se di tipi diversi).

Ma cosa fare se ci sono molti parametri ed è impossibile inserirli tutti in una classe base?

Per quanto ho capito, l'indice del parametro da passare deve essere inserito in aggiunta (anche un array con parametri impilati per indice può essere creato nella classe).

 
Interesting:

Quanto è bello poter leggere... :)

Anche l'approccio non è male, anche se come ho capito entrambi questi approcci sono calcolati sul trasferimento/lettura di un solo parametro (anche se di tipo diverso).

E cosa fare se ci sono molti parametri ed è impossibile includerli tutti nella classe base?

Per quanto ho capito, è possibile inserire un indice del parametro da passare (è anche possibile creare un array con parametri impilati per indice in una classe)?

L'ho letto tre volte e ancora non ho capito qual è il messaggio.
Motivazione: