Formazione MQL5 - pagina 19

 
papaklass:
Mi permetta di farle una domanda. Qual è la differenza fondamentale tra programmazione procedurale e OOP? Poche parole, cioè l'essenza della differenza.

Per cominciare, anche l'approccio procedurale implica delle strutture, perché è difficile farne a meno. Questo è almeno una sorta di organizzazione dei dati.

L'OOP ci permette di identificare comodamente le entità astratte e le relazioni tra loro in fase di progettazione. E poi si può semplicemente codificarli, anche singolarmente, senza preoccuparsi particolarmente delle peculiarità dell'implementazione.

E tutto sembra più logico e leggibile. E spesso funziona più velocemente. E la cosa principale è che viene implementato più velocemente. Nonostante il fatto che possiamo avere più codice.

 
papaklass:

Volevo che tu esprimessi la tua comprensione della questione, non che mi dessi una formulazione libresca. No significa no. Vi parlerò di me.

Beh, non ti ho "dato una formulazione del libro" :) Non ho formulato niente di niente - con una spiegazione. Ho dato per scontato che la domanda fosse una domanda d'esame, di cui si conosce già la risposta grazie alla pillola. E così è venuto fuori :) Non ho rifiutato di rispondere sull'esperienza personale.

A volte basta "sentire" il fenomeno e senza porsi domande filosofiche come "come può essere" e "qual è il suo significato più profondo", semplicemente capire con l'esempio come funziona. Il riferimento al tetris nel Manuale di Riferimento mi è bastato e questo esempio è stato sufficiente per il molto, molto inizio:

A seconda diquale oggetto di classe viene creato, viene chiamata una funzione virtuale di una o un'altra classe derivata.

void CTetrisField::NewShape()
  {
//--- случайным образом создаём одну из 7 возможных фигур
   int nshape=rand()%7;
   switch(nshape)
     {
      case 0: m_shape=new CTetrisShape1; break;
      case 1: m_shape=new CTetrisShape2; break;
      case 2: m_shape=new CTetrisShape3; break;
      case 3: m_shape=new CTetrisShape4; break;
      case 4: m_shape=new CTetrisShape5; break;
      case 5: m_shape=new CTetrisShape6; break;
      case 6: m_shape=new CTetrisShape7; break;
     }
//--- отрисовываем
   m_shape.Draw();
//---
  }

La creazione intuitiva di oggetti il cui comportamento differisce a seconda dei dati iniziali era abbastanza da vedere. Poi - ho richiesto l'intero file di tetris dal forum, più i materiali di riferimento, le librerie, ecc. E poi è andato avanti ancora e ancora. Un sacco di domande sul forum sull'argomento.

cartapesta:

Dopo aver letto un sacco di informazioni sul sito web, non ho ancora capito cosa sia OOP.

Abbiamo semplicemente un approccio cardinalmente diverso. Non mi sono particolarmente chiesto "cos'è OOP" dal punto di vista scientifico. - Per non perdere l'essenza dietro una facciata di termini nuovi e incomprensibili.

Sono andato senza mezzi termini a studiare gli esempi disponibili.

cartapesta:

Dopo aver letto un sacco di informazioni sul sito web non ho ancora capito cosa sia OOP.

The MQL5 Reference / Fondamenti / Programmazione orientata agli oggetti. Basta leggere la pagina. Apparentemente, questo era sufficiente per me - senza il bisogno di cercare altre definizioni in materiali di terzi.

 
papaklass:

La risposta alla mia domanda:

La programmazione produttiva si concentra sulle azioni (verbi), mentre la programmazione orientata agli oggetti si concentrasugli oggetti, o entità (nomi). Questa è la differenza principale.


In teoria e in pratica lo è:

La programmazione procedurale risponde alla domanda su cosa fare (verbi) ,
I verbi della programmazione orientata agli oggetti e descrive l'oggetto (aggettivi).

Cioè, OOP è una sovrastruttura generalizzante del codice in frasi significative con molte parti del discorso.


Chi parla solo in verbi può vivere nelle procedure.

Chi vuole raccontare il suo codice, lo lasci scrivere con OOP.


PS.

Quanto siamo stanchi di tutti questi teorici della programmazione, dannazione.

Presto ucciderò senza pietà l'argomento "OOP vs Procedure".
 
sergeev:

PS.

Sono stufo di tutti questi teorici della programmazione, dannazione.

Presto ucciderò senza pietà gli argomenti "OOP vs Procedure".
Perché bisogna "ucciderli" subito? La maggior parte dei principianti di MQL5 ha familiarità con la "programmazione procedurale". E se hanno domande sulla necessità e il significato di OOP - devono essere pazientemente spiegate/comprese. Come un insegnante a scuola - la stessa cosa anno dopo anno. Spiegare pazientemente, - non dirgli di andare a farsi fottere solo perché l'insegnante è stanco di ripetere questo argomento.
 
sergeev:

PS.

Quanto siamo stufi di tutti questi teorici della programmazione, dannazione.

Presto i temi "OOP vs procedure" saranno uccisi senza pietà.

"Invece di sistemare la punteggiatura a volontà, scrivi un glossario e non ci sarà nessuno da "uccidere senza pietà".

Ma se leggete "praticanti" di OOP - è come una "casta" di esperti di alta mentalità in OOP.

MQL5 è un linguaggio per tutti i livelli di comprensione e capacità, non solo per i naufraghi - gli esempi standard di indicatori ed Expert Advisors lo dimostrano.

Un linguaggio di programmazione non è un fine, ma un mezzo. Se il PP è sufficiente per raggiungere l'obiettivo - che sia così. Se per qualcuno è più facile e più chiaro usare OOP - che sia così. E per raggiungere l'obiettivo - non c'è alcuna differenza fondamentale - soprattutto nel 90% degli indicatori microfunzionali a basso codice e Expert Advisors, che sono principalmente scritti.

 

papaklass:

Quando ci si imbatte in una frase come questa all'inizio di un corso, è subito chiaro di cosa tratta l'intero libro. E in qualche modo, tutto va a posto. Capite che gli attributi sono proprietà dell'oggetto, che le implementazioni e i metodi sono la stessa cosa (funzioni) e, infine, che le classi sono composte da oggetti. Non solo gli oggetti hanno attributi (proprietà) e metodi (funzioni), ma possono anche interagire tra loro. Allo stesso tempo, essi (gli oggetti) non hanno bisogno di conoscere gli attributi e i metodi di altri oggetti. È così che si creano le classi a partire da questi elementi costitutivi, che interagiscono anche tra loro.

Hai messo tutto in un mucchio così grande che non riesci nemmeno a farci il porridge))) Non può essere che sia scritto in un libro.
 
abolk:

Un linguaggio di programmazione non è un fine, ma un mezzo. Se il PP è sufficiente per raggiungere l'obiettivo, così sia. Se OOP è più chiaro e semplice per qualcuno, così sia.

Saggio. A giudicare dalla mia esperienza: gli indicatori della moneta unica sono scritti su PP. E l'Expert Advisor multivaluta è scritto usando OOP (perché senza OOP - nel mio caso non sarebbe apparso affatto).
 

Как уже надоели все эти программистские теоретики, блин. 

Presto i thread "OOP vs procedure" saranno uccisi senza pietà.

Questo perché la gente non capisce i vantaggi, gli svantaggi, i luoghi e i modi di usare entrambi. Un articolo con esempi così semplici: PP darà vantaggi per questo compito_1 tali e svantaggi tali, OOP darà vantaggi per questo compito_1 tali e svantaggi tali; PP darà vantaggi per questo compito_2 tali e svantaggi tali, OOP darà vantaggi per questo compito_2 tali e svantaggi tali... Penso che sia fondamentale prestare maggiore attenzione al confronto tra classi e interfacce, se queste ultime appaiono in cinque, poiché le sottigliezze e le differenze possono essere complicate per coloro che sono nuovi all'OOP. E tutto con una tendenza a risolvere problemi semplici, e questa è la difficoltà - la spiegazione e gli esempi devono essere il più semplici e brevi possibile, ma utilizzando i principi di PP e OOP.

Allora sarebbe possibile bloccare un thread mandandolo in un posto dove tutto è organizzato in scaffali con semplici esempi di applicazione, sistematizzati secondo alcuni argomenti.

Yedelkin:
Saggio. A giudicare dalla mia esperienza: gli indicatori a una valuta sono scritti su PP. E l'Expert Advisor multivaluta è scritto usando OOP (senza OOP non sarebbe apparso affatto).
Caro Yedelkin! Posso inviarvi il kernel multicurrency progettato proceduralmente se vi interessa (funziona a barra aperta). Il codice è stato scritto per la 4, ma funzionerà anche con la 5 - potete confrontare le prestazioni di entrambe le varianti.
 
-Alexey-: Caro Yedelkin! Posso inviarvi un kernel multicurrency progettato proceduralmente se siete interessati (funziona su open bar). Il codice è scritto per 4.
Io sono per vivere tutti in pace e comprensione, se possibile. Per quanto riguarda i miei post, stavo solo descrivendo la mia comprensione di OOP. Essa (la comprensione) può essere tre volte sbagliata - ma è la "mia" comprensione. Non escludo affatto che una parte dei problemi che ho potuto risolvere con l'aiuto di OOP, possa essere risolta anche nel quadro di PP. La saggezza dell'affermazione di abolk è precisamente che"Se il PP è sufficiente per raggiungere l'obiettivo - così sia. Se è più chiaro e più semplice per qualcuno usare OOP - così sia". Ho aggiunto un'aggiunta al mio post.
 
Yedelkin:
Sono a favore della convivenza di tutti nella comprensione reciproca, quando è possibile. Per quanto riguarda i miei messaggi, ho descritto esclusivamente la mia comprensione di OOP. (La comprensione) può essere tre volte sbagliata - ma è la "mia" comprensione. Non escludo affatto che una parte dei problemi che ho potuto risolvere con l'aiuto di OOP, possa essere risolta anche nel quadro di PP. La saggezza dell'affermazione di abolk è precisamente che"Se il PP è sufficiente per raggiungere l'obiettivo - così sia. Se per qualcuno è più facile e più chiaro usare OOP - che sia così".
Sono d'accordo. E per combattere per l'una o l'altra preferenza, è meglio avere una competizione tra gli utenti del forum. C'è un tale compito...: quale approccio vincerà esattamente in termini di prestazioni, consumo di memoria, dimensione del codice, portabilità...?
Motivazione: