Una domanda per gli esperti di OOP. - pagina 24

 

Ancora, non capisco cosa sia "Object" nell'OOP.

Dice: "Un oggetto è un'istanza di una classe". Una classe può avere molte istanze. Ma queste istanze sono solo riferimenti alla classe. Una classe contiene campi. I campi sonole proprietà dell'oggetto. I metodi sono elementi del motore che gestiscono i valori di specifiche proprietà dell'oggetto.

Per come la vedo io, un oggetto è un insieme di proprietà nominate (o numerate). I valori di proprietà sono gestiti da vari meccanismi di grandi blocchi. È praticamente la stessa cosa. Solo che è scritto in modo diverso. In OOP, la funzionalità è frammentata per il bene del suo incapsulamento. Nel mio caso è viceversa - fusione di funzionalità.

Se trasformiamo la domanda in un'area grafica, la classe CButton è la stessa del mio elemento Button. Nella mia implementazione, sono tre oggetti nel kernel, ognuno con un certo numero di proprietà. Nella classe, è anche un elenco di proprietà (campi), metodi del pulsante (non ho metodi appartenenti separatamente al pulsante. La funzionalità dei pulsanti è all'interno di blocchi funzionali globali). In questi blocchi, il pulsante è trattato come qualsiasi elemento, ma in certi punti ha le sue condizioni e gestori personali. In OOP, la stessa funzionalità del pulsante è incapsulata in una classe a cui si accede tramite istanze.

 
Реter Konow:

George, in ogni biblioteca, in ogni soluzione, c'è un concetto. Se prendo il concetto di qualcun altro e cerco di sviluppare il mio sulla sua base, potrei avere un crash del concetto, perché un sistema costruito su due o più concetti non può essere stabile. Pertanto, le cose innovative devono essere sviluppate da soli e da zero. Per non lottare con gli errori "generici" e le incongruenze degli altri autori.

Peter, stai discutendo invano. È impossibile provare qualcosa. Inoltre non capisco questo approccio alla programmazione quando invece di usare _Symbol suggeriscono di collegare la libreria CSymbolInfo e scrivere object.Name().

Non capisco l'uso di questi metodi per esempio

//+------------------------------------------------------------------+
//| Set the property value "SYMBOL_SELECT"                           |
//+------------------------------------------------------------------+
bool CSymbolInfo::Select(const bool select)
  {
   return(SymbolSelect(m_name,select));
  }

Qual è la difficoltà nello scrivere

SymbolSelect("Нужный символ", включить или выключить);

In entrambi i casi c'è solo una linea di codice.

D'altra parte, Artyom mi ha mostrato possibilità OOP, in cui mi sono perso, non ho capito niente e non uso

 
Petros Shatakhtsyan:

Non così tanto.

Ecco un altro modo di spiegarlo. Di solito nessuno lo spiega in questo modo.

Tutti i programmatori sanno cos'è l' int x, per esempio;

Ora immaginiamo che la parola int sia come il nome di una classe, e cosa descrive?

1. un intero

2. occupa 4 byte in memoria

3. assume valori +- entro certi limiti. (questo è sufficiente);

E quando scriviamo int x; allora dichiariamo un oggetto x, di tipo int . x occupa già fisicamente un campo di 4 byte nella RAM.

Grazie. In questo caso - una classe è un'entità incapsulata, un contenitore che è essenzialmente un Oggetto in sé, in una relazione gerarchica con altre classi-oggetto. Una classe descrive la sua entità attraverso proprietà (campi) e metodi (funzionalità incapsulate), separati dalla funzionalità di altri oggetti.
 
Alexey Viktorov:

Peter, stai discutendo invano. È impossibile provare qualcosa. Inoltre non capisco questo approccio alla programmazione quando invece di usare _Symbol suggeriscono di collegare la libreria CSymbolInfo e scrivere object.Name()

Non capisco l'uso di questi metodi per esempio

Qual è la difficoltà nello scrivere

In entrambi i casi c'è solo una linea di codice.

D'altra parte, Artyom mi ha mostrato possibilità OOP, in cui mi sono perso, non ho capito niente e non uso

Niente :)) Cercando di capire il concetto di OOP per trovare differenze e somiglianze con il mio concetto. Penso che arricchirà le mie conoscenze)).
 
Реter Konow:
In questa variante di senso, la Classe è un magazzino di strumenti, materiali, materie prime e macchine. Gerarchia di classi ereditate - come i laboratori di una "fabbrica".

Peter, perché vuoi entrare in queste sottigliezze?

Una classe è una descrizione di un oggetto, le sue proprietà e i metodi per impostare e accedere a queste proprietà.

Un oggetto è quando dichiariamo una variabile di tipo classe, o creiamo un nuovo oggetto di quella classe usando l'operatore new.

Per esempio, questa è una classe:

//+------------------------------------------------------------------+
class CClass
  {
//--- Приватные члены класса. Доступны только в объекте этого класса
private:
   int               m_type;  // Тип объекта

//--- Защищённые члены класса. Доступны в объекте этого класса и его наследниках
protected:
   string            m_name;  // Имя объекта

//--- Публичные члены класса. Доступны везде
public:
   void              SetType(const int type)          { this.m_type=type;     }
   int               GetType(void)              const { return this.m_type;   }
   void              SetName(const string name)       { this.m_name=name;     }
   string            GetName(void)              const { return this.m_name;   }
  };
//+------------------------------------------------------------------+

Ha solo due membri di classe - type e name. Queste sono le sue proprietà. E non è ancora un oggetto. È un piano, un progetto, un progetto... dell'oggetto futuro.

Creiamo un oggetto:

CClass   class_obj;                 // Объявили переменную class_obj с типом класса CClass. Теперь class_obj - это объект

Creiamo un oggetto e un puntatore ad esso:

CClass  *class_ptr = new CClass();  // Оператором new создали новый объект класса CClass, и в переменную class_ptr получили на него указатель. 
                                    // Теперь в памяти сидит объект CClass, и получить к нему доступ можно по этому указателю, 
                                    // и по этому же указателю обязательно удалить объект по завершении работы оператором delete
 
Come ho detto prima, la visione OOP dell'oggetto è più ampia del mio concetto. Ho avuto a che fare solo con oggetti grafici, con un insieme monotono di proprietà. OOP offre una visione di qualsiasi entità attraverso il concetto di Oggetto. Questo è ovviamente fantastico, perché qualsiasi entità è un Oggetto. Naturalmente, sono contro l'incapsulamento eccessivo e la frammentazione delle funzionalità degli oggetti. Perché? Sì perché rende i meccanismi meno efficienti. Ma la possibilità stessa di guardare l'Oggetto in un contesto più ampio mi attrae.
 
Реter Konow:

George, in ogni biblioteca, in ogni soluzione, c'è un concetto. Se prendo il concetto di qualcun altro e cerco di sviluppare il mio sulla sua base, potrei avere un crash del concetto, perché un sistema costruito su due o più concetti non può essere stabile. Pertanto, le cose innovative devono essere sviluppate da soli e da zero. Per non lottare con gli errori "generici" e le incongruenze degli altri autori.

Ci sono solo sette (!) note. E quanta musica c'è su di loro? E nessun compositore pensa al collasso. Scrive solo musica che suona nell'anima. Non inventa qualcos'altro, usa quelle sette note.

 
Artyom Trishkin:

Peter, perché vuoi entrare in queste sottigliezze?

Una classe è una descrizione di un oggetto, le sue proprietà e i metodi per impostare e accedere a queste proprietà.

Un oggetto è quando dichiariamo una variabile di tipo classe, o creiamo un nuovo oggetto di quella classe usando l'operatore new.

Per esempio, questa è una classe:

Ha solo due membri di classe - type e name. Queste sono le sue proprietà. E non è ancora un oggetto. È un piano, un progetto, un progetto... ...di un oggetto futuro.

Creiamo un oggetto:

Creiamo un oggetto e un puntatore ad esso:

Una classe è una descrizione di un oggetto. Bene. Contiene le proprietà e le funzionalità dell'oggetto. Ok. Tutto questo è ordinato, aperto o protetto.

Allora l'OGGETTO stesso è fuori dal quadro. È nel contesto della classe. Nel contesto del suo nome e della sua descrizione. Cioè, in OOP, l'Oggetto, è esattamente un insieme di attributi (non solo proprietà, ma anche elementi funzionali - metodi), ma più ordinato e incapsulato di quello che ho. (Ha più senso per me).

 
Alexey Viktorov:

Non capisco l'uso dei metodi SB come

perché è difficile scrivere

il concetto stesso di OOP implica semplicemente non scrivere - non è necessario conoscere l'implementazione del metodo (nel tuo esempio return(SymbolSelect(m_name,select))

Immaginate che invece di questa linea:

SymbolSelect("Нужный символ", включить или выключить);

devi fare un sacco di ricerche, controlli vari, ecc. - Questo ti porterà via del tempo per scrivere la tua libreria e studiare il materiale

Supponiamo che il vostro compito sia solo quello di usare un solo metodo di una soluzione pronta sotto forma di una classe - create un'istanza della classe (oggetto) e usate il metodo pronto Select(const bool select)

Se non avete intenzione di eseguire tali operazioni, liberate la memoria = cancellate l'oggetto

Supponiamo che il vostro compito sia quello di visualizzare un pulsante, premendolo, attivate/disattivate il simbolo nell'orologio del mercato ---> create la vostra classe e incapsulatela con una classe pulsante già pronta e una classe CSymbolInfo pronta - ecco fatto - il compito è fatto

Il paradigma OOP ti dà solo informazioni generali su cosa puoi fare con una classe - se non vuoi incapsulare CSymbolInfo, puoi ereditarlo nella tua classe


HH: L'intero punto dell'OOP è di risolvere un dato problema rapidamente e senza conoscenza dell'implementazione.

 
Реter Konow:

Una classe è una descrizione di un oggetto. Bene. Contiene le proprietà e le funzionalità dell'oggetto. Ok. Tutto questo è ordinato, aperto o protetto.

Allora l'OGGETTO stesso è fuori gioco. È nel contesto della classe. Nel contesto del suo nome e della sua descrizione. Cioè, in OOP, l'Oggetto, è esattamente un insieme di attributi (non solo proprietà, ma anche elementi funzionali - metodi), ma più ordinato e incapsulato di quello che ho. (Ha più senso per me).

Bisogna leggere dei libri per chiarire le cose. Almeno VC++ in 21 giorni.

Il mio consiglio per la prima volta è di usare MFC, creare un'applicazione windows basata su CDialog, creando tutti i tipi di oggetti e vedere come sono facili da gestire.

Dopo di che butterete via la vostra impresa. Purtroppo.