Una domanda per gli esperti di OOP. - pagina 16

 
Georgiy Merts:

Esatto, di più su questa funzione. Avete un interruttore di dimensioni mostruose che seleziona una delle decine di funzioni di cui avete bisogno. In un tale switch, è molto facile fare un errore scrivendo accidentalmente il codice relativo a uno dei rami nel posto sbagliato.

Le cose sono molto più semplici con un sovraccarico. Abbiamo dieci discendenti diversi, e ogni volta lavoriamo con UNA classe, e questa ha UNA funzione sovraccaricabile. Non possiamo scriverlo accidentalmente in un'altra classe, perché dobbiamo aprire un file completamente diverso per questo.

Inoltre - il parsing stesso in questo enorme switch è, secondo me, molto più stressante che aprire l'unica classe di cui abbiamo bisogno, e poi analizzare solo una funzione.

In effetti, nel codice assembler tutta la gestione di questo interruttore si riduce comunque allo stesso swich, in funzione di questo puntatore. Ma nel caso di OOP tutto questo è nascosto al programmatore e non interferisce con il suo lavoro. Senza OOP - devi occupartene.

In parole povere, quando si cammina - si finisce per inviare segnali ai muscoli in una certa sequenza che li muovono. Tuttavia, a livello di coscienza - si ricorda solo quale movimento fare. Ecco, l'OOP è esattamente quel tipo di "memoria di quale movimento fare". Lei "non capisce perché abbiamo bisogno di ricordare il movimento quando abbiamo un mucchio di muscoli, e nervi collegati ad essi". bene... L'ho già detto molte volte, per i titani della memorizzazione, è davvero sufficiente ricordare quali muscoli devono essere tesi in quale sequenza per andare. Non ha senso ricordare tutto il movimento. Per gli altri, che non possono ricordare così tanto, è molto più ragionevole ricordare l'intero movimento, e cosa succede ai muscoli, in quale sequenza sono tesi e in che misura - è più ragionevole nasconderlo alla mente.

Sì, George, i tuoi argomenti sono ragionevoli e logici. In effetti, il mio approccio richiede che voi ricordiate e conosciate tutto nel vostro programma. Questo è sia buono che cattivo. Bene, perché sapere assicura un rapido sviluppo di codice e soluzioni, poca sintassi e molta funzionalità, e male, perché non c'è nessuna disposizione per la portabilità di parti di codice ad altri programmi a causa dell'interconnessione globale di tutti i blocchi.

Anche il nostro linguaggio parlato usa la memoria globale, dopo tutto. Conosciamo e ricordiamo tutte le parole e non solo quelle appartenenti all'attuale argomento di conversazione. Tutto è confuso nella nostra mente. È così che funziona Mind, ed è così che funziona il mio approccio. Tutti i risultati più importanti dei blocchi funzionali sono universalmente disponibili. E così, dentro di loro c'è una terminologia quasi umana. Parlo in codice, come una lingua normale. È molto conveniente. Ma ci sono molte cose da ricordare. È vero.


ZS. A proposito, l'interruttore gigante può essere suddiviso in file e il contenuto nascosto. È solo conveniente per me vedere il tutto.

 
Vict:

Tinny, stai facendo una specie di costruzione di biciclette senza uno studio adeguato dell'approccio convenzionale. Peter, trova un buon libro, forse Stroustrup, in qualche libro ha scritto un editor di testo, imparerai qualcosa da un problema reale, non ricordo il contenuto, ma è improbabile che ti insegni cose brutte.

Grazie, naturalmente. Ma è improbabile che compiti specifici possano aprirmi gli occhi su qualcosa, perché ne ho risolti una miriade negli ultimi 6 anni. Una vera miriade. Quindi so di cosa sto parlando.
 
Ora all'efficienza. Switch è in definitiva cosa? È un confronto sequenziale di un parametro con delle costanti. Attenzione Peter, sequenziale. Cioè, se la costante cercata è 100500, allora tutti questi confronti sul processore saranno fatti. Cosa sono le funzioni/metodi sovraccaricati - questi sono blocchi di codice completamente diversi nel codice macchina dopo la compilazione, con i propri punti di ingresso. Quindi, qual è più efficiente?
 
Реter Konow:
Grazie, naturalmente. Ma è improbabile che compiti specifici mi aprano gli occhi su qualcosa, visto che ne ho risolti una miriade negli ultimi 6 anni. Una vera miriade. Quindi so di cosa sto parlando.

Ci sono un sacco di compiti, e non hai ancora capito l'utilità dell'overloading. Immaginiamo che una funzione template, i suoi argomenti possono passare attraverso int, double o tipo utente, e vogliamo trovare un valore assoluto attraverso abs(), come possiamo farlo senza sovraccarico?

Mi piacerebbe vedere le tue stampelle intorno a questi array quando il progetto cresce: simulare una ruota di auto -> auto con 4 passeggini -> strada con un centinaio di auto.

 
Vladimir Simakov:
E ora passiamo all'efficienza. Switch è cosa alla fine? È un confronto sequenziale di un parametro con le costanti. Attenzione Peter, sequenziale.

No, l'interruttore funziona in modo diverso. È una tabella in cui l'interruttore va direttamente alla costante desiderata. Questa è una differenza significativa rispetto al blocco if.

 
Vladimir Simakov:
E ora passiamo all'efficienza. Switch è cosa alla fine? È un confronto sequenziale di un parametro con delle costanti. Attenzione Peter, sequenziale. Cioè, se la costante cercata è 100500, allora tutti questi confronti sul processore saranno fatti. Cosa sono le funzioni/metodi sovraccaricati - questi sono blocchi di codice completamente diversi nel codice macchina dopo la compilazione, con i propri punti di ingresso. Quindi, qual è più efficiente?

Ahimè, l'inevitabile tracotanza. In questo perdo, nell'altro vinco.

Per esempio, la funzione con l'interruttore gigante esegue il posizionamento di oggetti in oggetti e oggetti in finestre. Calcola le loro dimensioni. Lo chiamo una volta e tutti gli elementi e tutti gli oggetti sono posizionati secondo i loro punti di ancoraggio. Calcola le loro dimensioni e la loro posizione l'uno rispetto all'altro. Determina quali elementi devono essere nascosti, qual è la dimensione richiesta del kanvas e così via... Una chiamata è un lavoro enorme. Lo stesso blocco può calcolare la dimensione o la posizione di un elemento della finestra tra migliaia. Un blocco. La chiamata è Object();

Quante classi e funzioni dovrei scrivere in OOP per risolvere un tale numero di compiti? Ho paura di immaginare.

 
Реter Konow:

Ahimè, l'inevitabile tracotanza. In questo perdo, nell'altro vinco.

Per esempio: la stessa funzione con un interruttore gigante esegue il posizionamento di oggetti in elementi ed elementi in finestre. Lo chiamo una volta e tutti gli elementi e tutti gli oggetti sono collocati nelle loro posizioni secondo i loro legami. Le loro dimensioni e posizioni sono calcolate. Si determina quali elementi devono essere nascosti, qual è la dimensione richiesta del kanvas e così via... Una chiamata è un lavoro enorme. Lo stesso blocco può calcolare le dimensioni o le posizioni di un elemento della finestra su migliaia. Un blocco.

Quante classi e funzioni dovrei scrivere in OOP per risolvere un tale numero di compiti? Ho paura di immaginare.

Circa 5-10, a grandi linee. Con un'interfaccia completamente autoesplicativa.
 
Intendo il numero di classi. Ognuno è lungo 200 righe.
 
Ihor Herasko:

No, l'interruttore funziona in modo diverso. È una tabella in cui l'interruttore va direttamente alla costante desiderata. Questa è la differenza essenziale tra esso e il blocco if.

Quindi, in termini di velocità, questa è ovviamente l'opzione più veloce in MQL. Ma l'accesso aglioggetti della classe nell'ambiente gestito è indiretto.
 
Реter Konow:

Facciamo una funzione senza parametri, scriviamo dentro tutti i calcoli delle funzioni sovraccaricate, rendiamo le variabili globali e abbiamo accesso ai risultati di qualsiasi altra funzione. Beh, è una bellezza, no?

Sì, va benissimo... Dovremmo metterlo nel ramo "Umorismo". )
Motivazione: