Idee ambiziose!!! - pagina 4

 
TheXpert:
Calmatevi.
Perché così all'improvviso? Le credenze religiose cieche sono ferite? :)
 
Andrei01:

Perché è una sciocchezza? Basta calcolare quanti puntatori ci vogliono per arrivare ai dati o alle funzioni giuste.

Se certamente sapete contare. :)


Quando si crea una nuova istanza di una classe, cioè una variabile di tipo classe, si crea un duplicato della tabella delle relazioni e basta.

L'accesso ai dati, sia nella classe che nella variabile abituale è lo stesso in velocità, tutte le misure descrittive sulla divisione dei diritti di accesso all'interno delle classi (privato, pubblico) - tutto questo a livello di compilatore, il codice compilato funziona solo con le celle di memoria fisica

Bene, supponiamo che ci sia una "classe dinamica complessa" che viene astutamente generata al volo da altre classi astutamente generate. E allora? Dopo tutto, tutto sarà calcolato da una funzione specifica. Beh, valeva davvero la pena di costruire un giardino per questi trucchi da circo?

La malattia sta progredendo? Vi è stato detto più volte, OOP libera il programmatore dalle azioni di routine di preparazione dei dati, dal controllo sul contenuto dei dati e spetta al programmatore come implementare i metodi all'interno della classe o chiamare funzioni di terzi

Anche l'OOP appartiene al passato. La tendenza attuale è la programmazione orientata all'hardware, che è principalmente in C, per esempio CUDA. Con il rilascio di processori con GPU questo sarà ulteriormente migliorato. Le aziende di processori stanno pianificando di smettere di rilasciare solo core di processori universali.

Qui non sono competente, e nella tua bocca queste informazioni non sembrano credibili

SZZY: perché ti scrivo, non scrivere sciocchezze nei forum tecnici, condividi le tue conoscenze e se non sai qualcosa, chiedimelo.

 
IgorM:


Ti vuoi calmare? Che cosa passare? Quando si crea una nuova istanza di una classe - cioè una variabile di tipo classe, si crea un duplicato della tabella delle relazioni e questo è tutto

l'accesso ai dati, che sia in una classe o in una variabile ordinaria, è lo stesso in termini di velocità, tutte le misure descrittive per separare i diritti di accesso all'interno delle classi (privat, public) sono tutte a livello di compilatore, il codice compilato funziona solo con le celle di memoria fisica

Allora ecco una domanda per un esperto. C'è una classe che consiste di tre array dinamici (la dimensione al momento della compilazione è sconosciuta).

Ora calcola e confronta il numero di operazioni per l'accesso all'array statico arbitrario e all'array dinamico all'interno della classe.

 
IgorM:

Non sono competente qui, e nella tua bocca queste informazioni non sembrano credibili
Ma l'affidabilità delle informazioni dipende da chi le presenta? Penso che qualsiasi persona di buon senso dovrebbe capire che l'informazione è una cosa oggettiva, non soggettiva. :)
 
Andrei01:

Cosa c'entra la logica del programma con la presentazione dei dati? Queste cose non sono affatto collegate.

La logica del programma è costituita da operazioni aritmetiche su qualsiasi dato di input, mentre la rappresentazione dei dati è solo dati in un formato o nell'altro.

E per definizione è impossibile ridurre il codice del programma con l'OOP, poiché ci sono puntatori esterni agli oggetti per accedere ai dati interni (funzioni e variabili) invece di un accesso diretto. Ma poiché il calcolo dei puntatori e dei riferimenti di memoria è un'operazione molto lenta, le prestazioni rallentano di conseguenza.

Sviluppare applicazioni OOP non è la stessa cosa che sviluppare librerie di classi. In senso stretto, lo sviluppatore di una libreria non dovrebbe _aver cura di ciò per cui la sua libreria sarà usata da coloro che scrivono i programmi applicativi stessi. Per esempio: un produttore di martelli non si preoccupa affatto di come si usa il suo prodotto - per martellare i chiodi o per rompere le noci. Il suo compito è quello di creare uno strumento. Anche in OOP le classi sono strumenti per risolvere una certa gamma di compiti, di solito molto ampia e non sempre chiaramente definita (chissà, forse si usa un martello per uccidere gli scarafaggi?)

Ancora una volta, per risolvere i compiti più semplici non c'è bisogno di OOP. Ma d'altra parte, non pensate che chiunque voglia piantare un chiodo debba farsi un martello da solo, vero?

Naturalmente, si può sostenere che abbiamo una libreria di funzioni, perché abbiamo bisogno di altre classi? Ma in questo caso ci si priva delle comodità fornite dai meccanismi di ereditarietà, estensioni di tipo, sovraccarico, ecc. In parole povere, potete avvitare un motore fatto in casa a un martello e farlo funzionare a modo vostro, ma non dovete capire il meccanismo del martello; tutto quello che dovete sapere è che può essere usato per martellare i chiodi.

Quindi, credetemi, OOP rende davvero la vita più facile ai programmatori che scrivono applicazioni. Un'altra cosa è che le capacità delle librerie MQL5 sono ancora molto limitate, ma è una questione di tempo, e gli sviluppatori delle librerie se ne occuperanno (anche se ovviamente possono essere - ma non sono tenuti ad essere - le stesse persone). Con un sistema ben sviluppato di librerie di classi, è sufficiente per un utente-programmatore scrivere una o due righe come "1. programma, ecco i dati" "2. programma, conta" in un programma, quasi senza chiedersi come funziona nei dettagli. Questo non può essere ottenuto nella programmazione orientata alla struttura.

Mi sembra che il tuo pregiudizio contro l'OOP sia il risultato del fatto che o non hai incontrato compiti sufficientemente complessi, o semplicemente non vuoi farlo per pigrizia o per qualche altra ragione. Lo direi per niente. Tuttavia, il maestro è il maestro.

 
Andrei01:

Ecco la domanda di un esperto. C'è una classe che consiste di tre array dinamici (la dimensione al momento della compilazione è sconosciuta).

Ora per favore calcola e confronta il numero di operazioni per accedere all'array statico arbitrario e all'array dinamico all'interno della classe.


Cosa c'entrano le classi? Si lavora con gli array dinamici o statici, e non importa dove si usano gli array dinamici - in una classe o solo in una variabile.

Il fatto che lavorare con gli array dinamici richieda un po' più di tempo è "difficile da capire" - c'è un controllo per gli overrun degli array e il gestore dell'allocazione dinamica della memoria sarà spesso chiamato

 

alsu:

1. Ma in questo caso, ci si priva della comodità offerta dai meccanismi di ereditarietà, estensioni di tipo, sovraccarico, ecc. In parole povere, potete imbullonare un motore artigianale a un martello e farlo funzionare a modo vostro, ma non dovete capire la meccanica del martello; tutto quello che dovete sapere è che potete martellare i chiodi con esso.

2. Con un sistema ben sviluppato di librerie di classi, è sufficiente per un utente-programmatore scrivere una o due righe come "1. programma, ecco i dati" "2. programma, conta" in un programma, quasi senza chiedere come funziona in dettaglio. Nella programmazione orientata alla struttura, questo non può essere ottenuto.

1. In RPP, dovete anche occuparvi delle classi - cosa fanno esattamente. Proprio come se fosse una funzione di qualche tipo. Ma con le classi è più difficile tracciare l'intera catena, quindi generalmente si spende più tempo per studiare la loro struttura, allo stesso livello di funzionalità.

2. Nella programmazione orientata alla struttura, si possono anche organizzare tali azioni senza problemi, senza dover entrare in dettagli che qualcuno ha già approfondito prima.

 
IgorM:


Cosa c'entrano le classi? Si tratta di lavorare con array dinamici o statici, e non importa dove si usano gli array dinamici - in una classe o solo in una variabile

Ok, farò una domanda più semplice. Confrontare il numero di operazioni quando si accede a una variabile di un array monodimensionale e bidimensionale.

E ora volete sostenere che non c'è quasi nessuna differenza?

 
Andrei01:

Ok, allora farò una domanda più semplice. Confrontare il numero di operazioni quando si accede a una variabile in una matrice unidimensionale e in una bidimensionale.

Avete intenzione di sostenere che non c'è quasi nessuna differenza?


Anche questa è una domanda OOP?

Se no, allora: se l'array è statico - allora non ci sarà differenza di prestazioni quando si accede sia agli array monodimensionali che a quelli bidimensionali, perché i dati degli array multidimensionali sono memorizzati in memoria per stringhe, come se avete l'array x[20] e l'array y[2][10], allora i dati y saranno registrati in memoria: prima y[0] e poi y[1], che sarà fisicamente posizionato come x[20]

se c'è qualche ritardo nelle prestazioni, è insignificante e si verifica solo a causa del controllo dell'overrun dell'array

Se l'array è dinamico, dipende dal produttore specifico del compilatore - quanto del codice del gestore di memoria è ottimizzato (in Delphi, la maggior parte del modulo System è scritto in ASM), perché l'allocazione della memoria per un array dinamico multidimensionale è un po' più complicata, ma poi, di solito il problema non è negli array dinamici, ma nel programmatore - quanto giustificato e spesso chiama l'allocazione della memoria per un array dinamico

SZS: grazie per la chiacchierata - ma non posso per la tua mancanza di comprensione delle cose elementari spendere così tanto tempo - inizia a leggere te stesso

 
IgorM:


Anche questa è una domanda OOP?

se no, allora: se l'array è statico - allora non ci sarà differenza di prestazioni quando si accede sia all'array monodimensionale che a quello bidimensionale, perché i dati dell'array multidimensionale sono memorizzati in memoria in stringhe, come se avete l'array x[20] e l'array y[2][10], allora i dati y saranno registrati in memoria: prima y[0] e poi y[1], che sarà fisicamente situato come x[20]

Lei si sbaglia perché non conosce le cose più semplici.

I dati di una qualsiasi matrice sono immagazzinati in memoria in modo lineare. Dal primo all'ultimo, per accedere a un elemento x[15], è necessario calcolare l'indirizzo dell'inizio dell'array più l'offset 15, che sarà l'indirizzo della variabile per calcolare questa variabile. Se abbiamo un array bidimensionale, per esempio, x[2][5], calcoliamo prima l'offset per la seconda riga e poi vi aggiungiamo l'offset per il quinto elemento, cioè il doppio delle operazioni.