Une question pour les experts de la POO. - page 24

 

Pourtant, je ne comprends pas ce qu'est un "objet" dans la POO.

Il est dit "Un objet est une instance d'une classe". Une classe peut avoir plusieurs instances. Mais, ces instances ne sont que des références à la classe. Une classe contient des champs. Les champs sont lespropriétés de l'objet. Les méthodes sont des éléments du moteur qui gèrent les valeurs des propriétés spécifiques des objets.

D'après moi, un objet est un ensemble de propriétés nommées (ou numérotées). Les valeurs des propriétés sont gérées par divers mécanismes de gros blocs. C'est à peu près la même chose. Seulement, c'est écrit différemment. Dans la POO, la fonctionnalité est fragmentée dans le but de l'encapsuler. Dans mon cas, c'est l'inverse - la fusion des fonctionnalités.

Si nous transformons la question en zone graphique, la classe CButton est la même que mon élément Button. Dans mon implémentation, il y a trois objets dans le noyau, chacun avec un certain nombre de propriétés. Dans une classe, c'est aussi une liste de propriétés (champs), de méthodes du bouton (je n'ai pas de méthodes appartenant séparément au bouton. La fonctionnalité des boutons se trouve dans les blocs fonctionnels globaux). Dans ces blocs, le bouton est traité comme n'importe quel élément, mais à certains endroits, il a ses conditions et ses gestionnaires personnels. Dans la POO, la même fonctionnalité de bouton est encapsulée dans une classe à laquelle on accède par des instances.

 
Реter Konow:

George, dans chaque bibliothèque, dans chaque solution, il y a un concept. Si je prends le concept de quelqu'un d'autre et que j'essaie de développer le mien sur sa base, je risque d'avoir un accident de concept, car un système construit sur deux ou plusieurs concepts ne peut être stable. Par conséquent, les choses innovantes doivent être développées par vous-même et à partir de zéro. Pour ne pas avoir à se battre avec les erreurs et les incohérences "génériques" des autres auteurs.

Peter, vous argumentez en vain. Il est impossible de prouver quoi que ce soit. Je ne comprends pas non plus cette approche de la programmation lorsqu'au lieu d'utiliser _Symbol, on suggère de connecter la bibliothèque CSymbolInfo et d'écrire object.Name().

Je ne comprends pas l'utilisation de telles méthodes par exemple

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

Quelle est la difficulté d'écrire

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

Dans les deux cas, il n'y a qu'une seule ligne de code.

D'autre part, Artyom m'a montré les possibilités de la POO, dans laquelle je me suis perdu, je n'ai rien compris et je n'utilise pas

 
Petros Shatakhtsyan:

Pas tant que ça.

Voici une autre façon de l'expliquer. En général, personne ne l'explique de cette façon.

Tous les programmeurs savent ce qu'est int x, par exemple ;

Imaginons maintenant que le mot int est comme le nom d'une classe. Et que décrit-il ?

1. un nombre entier

2. occupe 4 octets en mémoire

3. prend des valeurs +- dans certaines limites. (ce qui est suffisant) ;

Et quand on écrit int x; alors on déclare un objet x, de type int . x occupe déjà physiquement un champ de 4 octets dans la RAM.

Merci. Dans ce cas, une classe est une entité encapsulée, un conteneur qui est essentiellement un objet en soi, dans une relation hiérarchique avec d'autres classes d'objets. Une classe décrit son entité par le biais de propriétés (champs) et de méthodes (fonctionnalité encapsulée), séparées de la fonctionnalité d'autres objets.
 
Alexey Viktorov:

Peter, vous argumentez en vain. Il est impossible de prouver quoi que ce soit. Je ne comprends pas non plus cette approche de la programmation lorsqu'au lieu d'utiliser _Symbol, ils suggèrent de connecter la bibliothèque CSymbolInfo et d'écrire object.Name()

Je ne comprends pas l'utilisation de telles méthodes par exemple

Quelle est la difficulté d'écrire

Dans les deux cas, il n'y a qu'une seule ligne de code.

D'autre part, Artyom m'a montré les possibilités de la POO, dans laquelle je me suis perdu, je n'ai rien compris et je n'utilise pas

Rien :)) J'essaie de comprendre le concept de la POO pour trouver les différences et les similitudes avec mon concept. Je pense que cela va enrichir mes connaissances.))
 
Реter Konow:
Dans cette variante de sens, la classe est un entrepôt d'outils, de matériaux, de matières premières et de machines. Hiérarchie de classes héritées - comme les ateliers d'une "usine".

Peter, pourquoi voulez-vous entrer dans de telles subtilités ?

Une classe est une description d'un objet, de ses propriétés et des méthodes permettant de définir et d'accéder à ces propriétés.

On parle d'objet lorsque l'on déclare une variable de type classe, ou que l'on crée un nouvel objet de cette classe en utilisant l'opérateur new.

Par exemple, ceci est une 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;   }
  };
//+------------------------------------------------------------------+

Il n'a que deux membres de classe - type et nom. Ce sont ses propriétés. Et ce n'est pas encore un objet. C'est un plan, un schéma, un plan... de l'objet futur.

Nous créons un objet :

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

Nous créons un objet et un pointeur vers celui-ci :

CClass  *class_ptr = new CClass();  // Оператором new создали новый объект класса CClass, и в переменную class_ptr получили на него указатель. 
                                    // Теперь в памяти сидит объект CClass, и получить к нему доступ можно по этому указателю, 
                                    // и по этому же указателю обязательно удалить объект по завершении работы оператором delete
 
Comme je l'ai déjà dit, la vision OOP de l'objet est plus large que mon concept. Je ne traitais que des objets graphiques, avec un ensemble monotone de propriétés. La POO offre une vue de toute entité à travers le concept d'objet. C'est bien sûr génial, car toute entité est un objet. Bien sûr, je suis contre l'encapsulation excessive et la fragmentation de la fonctionnalité des objets. Pourquoi ? Oui, car cela rend les mécanismes moins efficaces. Mais la possibilité même de considérer l'objet dans un contexte plus large me séduit.
 
Реter Konow:

George, dans chaque bibliothèque, dans chaque solution, il y a un concept. Si je prends le concept de quelqu'un d'autre et que j'essaie de développer le mien sur sa base, je risque d'avoir un accident de concept, car un système construit sur deux ou plusieurs concepts ne peut être stable. Par conséquent, les choses innovantes doivent être développées par vous-même et à partir de zéro. Pour ne pas avoir à se battre avec les erreurs et les incohérences "génériques" des autres auteurs.

Il n'y a que sept ( !) notes. Et combien de musique y a-t-il sur eux ? Et aucun compositeur ne pense à l'effondrement. Il écrit juste de la musique qui joue dans l'âme. Il n'invente pas autre chose, il utilise ces sept notes.

 
Artyom Trishkin:

Peter, pourquoi voulez-vous entrer dans de telles subtilités ?

Une classe est une description d'un objet, de ses propriétés et des méthodes permettant de définir et d'accéder à ces propriétés.

On parle d'objet lorsque l'on déclare une variable de type classe, ou que l'on crée un nouvel objet de cette classe en utilisant l'opérateur new.

Par exemple, ceci est une classe :

Il n'a que deux membres de classe - type et nom. Ce sont ses propriétés. Et ce n'est pas encore un objet. C'est un plan, un schéma, un plan... ...d'un objet futur.

Nous créons un objet :

Nous créons un objet et un pointeur vers celui-ci :

Une classe est une description d'un objet. Bien. Contient les propriétés et les fonctionnalités de l'objet. Ok. Tout cela est commandé, ouvert ou protégé.

Dans ce cas, l'OBJET lui-même n'est pas pris en compte. C'est dans le contexte de la classe. Dans le contexte de son nom et de sa description. C'est-à-dire qu'en POO, l'Objet, est exactement un ensemble d'attributs (non seulement des propriétés, mais aussi des éléments fonctionnels - méthodes), mais plus ordonné et encapsulé que moi. (Cela a plus de sens pour moi).

 
Alexey Viktorov:

Je ne comprends pas l'utilisation de méthodes SB telles que

pourquoi est-il difficile d'écrire

le concept même de la POO implique simplement de ne pas écrire - vous n'avez pas besoin de connaître l'implémentation de la méthode (dans votre exemple return(SymbolSelect(m_name,select))

Imaginez ça au lieu de cette ligne :

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

vous devez effectuer de nombreuses requêtes, des vérifications diverses, etc. - Cela vous prendra du temps pour écrire votre propre bibliothèque et étudier la matière

Supposons que votre tâche consiste à utiliser une seule méthode de la solution toute faite sous la forme d'une classe - vous créez une instance de la classe (objet) et utilisez la méthode toute faite Select(const bool select).

Si vous n'avez pas l'intention d'effectuer de telles opérations, libérez de la mémoire = supprimez l'objet.

Supposons que votre tâche consiste à afficher un bouton, en appuyant dessus, vous activez/désactivez le symbole dans la surveillance du marché ---> créez votre classe et encapsulez la classe prête à l'emploi bouton et la classe prête à l'emploi CSymbolInfo - la tâche est accomplie.

Le paradigme de la POO ne vous donne que des informations générales sur ce que vous pouvez faire avec une classe - si vous ne voulez pas encapsuler CSymbolInfo, vous pouvez en hériter dans votre propre classe.


HH : Le but de la POO est de résoudre un problème donné rapidement et sans connaissance de l'implémentation.

 
Реter Konow:

Une classe est une description d'un objet. Bien. Contient les propriétés et la fonctionnalité de l'objet. Ok. Tout cela est commandé, ouvert ou protégé.

Dans ce cas, l'OBJET lui-même n'est pas pris en compte. C'est dans le contexte de la classe. Dans le contexte de son nom et de sa description. C'est-à-dire qu'en POO, l'Objet, est exactement un ensemble d'attributs (non seulement des propriétés, mais aussi des éléments fonctionnels - méthodes), mais plus ordonné et encapsulé que moi. (Cela a plus de sens pour moi).

Il faut lire des livres pour que les choses soient claires. Au moins VC++ en 21 jours.

Mon conseil pour la première fois est d'utiliser MFC, de créer une application Windows basée sur CDialog, de créer toutes sortes d'objets et de voir à quel point ils sont faciles à gérer.

Après cela, vous jetterez votre entreprise. Malheureusement.