Programmation OOP vs programmation procédurale - page 39

 
Andrei:

La classe n'a que des variables internes et aucune entrée ou sortie... Où avez-vous vu l'utilisation en programmation d'un tel objet qui n'a aucun contact avec le monde extérieur et qui bout dans son propre jus ?


Pourquoi discutez-vous de quelque chose que vous n'avez pas vu ? Un constructeur de classe est créé et il peut recevoir un nombre quelconque de paramètres. Des classes enfant différentes peuvent avoir des jeux de paramètres complètement différents dans leurs constructeurs. Vous pouvez simplement écrire des méthodes pour définir les paramètres.

 
СанСаныч Фоменко:

1. C'est la principale réponse à la nécessité de la POO.

2. c'est une question d'expérience en équipe. J'ai écrit tout ce dont j'avais besoin. Il y a quelques années, j'ai décidé d'écrire un peu plus - tout se lit, sans problème.


De vos réponses, j'ai compris une chose : la POO est une certaine norme qui introduit la discipline de la programmation, introduit l'uniformité et sur cette base, moins d'erreurs au départ et, surtout et surtout, les problèmes lors de la modification sont essentiellement réduits. Mais le même résultat a été obtenu en respectant scrupuleusement les GOST, les étapes du développement, la documentation.


Combien de fois dois-je te dire la même chose ? La POO n'est pas seulement un moyen de structurer le code; elle contient également des mécanismes qui sont absents de votre programmation procédurale.

C'est peut-être le cas lorsque, si une personne n'a pas vu de montagnes, elle ne comprendra pas ce que c'est, même si vous le lui dites.

 
Реter Konow:

Je m'efforce personnellement de trouver des solutions polyvalentes. Il faut pour cela "épisser" des fonctions similaires en un seul bloc sans augmenter la taille du code. Cela augmente l'efficacité du mécanisme et il n'y a pas besoin de surcharge et de division. Il suffit d'utiliser un peu son cerveau, c'est tout).

C'est-à-dire qu'il y avait deux fonctions de 20 lignes chacune. Les deux effectuent des actions similaires ou résolvent des tâches similaires. Mon objectif est de créer une fonction qui fasse le travail des deux avec un maximum de 20 lignes de code. C'est ainsi que je crée des blocs.


Depuis combien de temps tu te plonges dans ta bibliothèque ?

 

Pour le plaisir - R est écrit dans un mode absolument dégoûtant "tout en une seule poubelle sans aucune différenciation d'accès". Une approche vieille école d'il y a vingt ans, sans zones de visibilité, de protection ou de multisession. J'écris comme si j'étais le seul. Oui, le projet est né sous une seule personne par des développeurs non professionnels. Il doit être réécrit à partir de zéro. Au moins une fois.

J'ai eu l'idée de créer une interface normale dans R à partir de MQL5, mais après avoir approfondi le sujet, j'ai immédiatement décidé de ne pas l'intégrer. Le système est catégoriquement incapable de protéger les données et les sessions.

Tant qu'un programmeur ne travaille pas dans des équipes de développement normales avec des exigences strictes (en se tapant sur les mains pendant au moins deux ans), il ne deviendra pas un développeur au sens normal du terme. Nous nous prenons la tête 90 % du temps lorsque nous regardons des emplois tests lorsque nous examinons des candidats. L'horreur totale dans le secteur du développement.

Donc, une fois de plus, les opposants à OOP font preuve d'une sorte de bouffonnerie ici.

Désolé encore.

 
СанСаныч Фоменко:

Wow !

Je me demandais : existe-t-il un autre moyen, dans la programmation d'aujourd'hui, de brouiller un problème de niveau d'œuf d'une manière plus cool ?

Allez jusqu'à une voiture immobilisée dans un embouteillage, regardez comment elle est aménagée et dites au conducteur : "Il n'y a pas moyen de mieux embrouiller le problème, faites une centaine de mètres ici" ?

Comme le montre mon expérience, de tels "problèmes de confusion" sont beaucoup plus faciles à comprendre que des EA "sans problème" réalisés en copiant un modèle unique avec toutes les variables globales.

 
Dmitry Fedoseev:

Et pourquoi discutez-vous de quelque chose que vous n'avez pas vu ? Un constructeur de classe est créé et il peut recevoir un nombre quelconque de paramètres.

Lisez attentivement, il s'agissait de la classe, pas du constructeur de la classe.

De plus, vous suggérez à nouveau de faire un travail de singe - de planter un jardin sur une parcelle alors que nous pouvons avoir accès aux paramètres sans rien faire en cas de variables externes ou les passer directement sans se prendre la tête avec les constructeurs-destructeurs et toutes les fuites de mémoire qui en découlent.

 
СанСаныч Фоменко:

MonOnInit() ressemble à peu près à la même chose - une douzaine de lignes...

Et alors ?

Pour Reason, dans TOUS mes EA, il y a dix lignes (sans compter les inclusions et les commentaires).

#include <MyLib\DebugOrRelease\DebugSupport.mqh>
#include <MyLib\Factories\ForTrade\EURGBP\B1H2C20T2_0001_EPF.mq5>
#include <MyLib\Factories\ForTrade\EURGBP\B2H2C20T4_0001_EPF.mq5>
#include <MyLib\Factories\ForTrade\EURGBP\B3H2C20T2_0001_EPF.mq5>

// Объявляем фабрики частей эксперта.
CB1H2C20T2_0001_EPF epfFact_0;
CB2H2C20T4_0001_EPF epfFact_1;
CB3H2C20T2_0001_EPF epfFact_2;

// Объявляем функцию получения указателя на фабрику.
CEAPartsFactoryT* CEAPartsFactoryT::GetAdvisorsPartsFactory(uint uiFactIdx = 0)
{
   if(uiFactIdx == 0) return(GetPointer(epfFact_0)); 
   if(uiFactIdx == 1) return(GetPointer(epfFact_1)); 
   if(uiFactIdx == 2) return(GetPointer(epfFact_2)); 
   return(NULL); 
};

#include <MyLib\TSTemplate\ExpertAdvisorT.mq5>

Dans notre cas, il y a trois TS complètement différents dans un EA. Ils fonctionnent tous simultanément, sans interférer les uns avec les autres.

Des CTs supplémentaires peuvent être ajoutés en déclarant la fabrique appropriée, et en ajoutant du code la renvoyant dans une fonction.

Mais la vraie question n'est pas de savoir s'il y a trop ou trop peu de lignes de code. La question est de savoir s'ils sont faciles à entretenir et à modifier si nécessaire.

SanSanych, pouvez-vous facilement comprendre le fichier du tableau fourni par Peter ? Et le modifier facilement ? Eh bien, alors vous, comme Peter - n'avez pas besoin de la POO.

 
Реter Konow:
La POO est une méthode pour séparer, envelopper et cacher les parties d'un mécanisme. C'est au développeur de décider si cela est nécessaire ou non. Cela n'a absolument rien à voir avec l'augmentation de l'efficacité du mécanisme. Cela structure la façon de penser, oui. On ignore si elle le structure correctement ou non. La nécessité d'une telle mesure dépend de chaque personne, à mon avis.

Exactement. C'est l'essence même de l'encapsulation.

Il y a aussi l'héritage et le polymorphisme.

 
Реter Konow:
La POO est une méthode permettant de séparer, d'envelopper et de cacher les parties d'un mécanisme. La nécessité de cette mesure dépend de chaque individu.

Exactement, cela dépend de l'individu. Pourquoi un programmeur, qui ne souffre pas de schizophrénie, s'évertuerait-il à cacher l'accès à une partie de son propre code qu'il débogue lui-même ? Ne préférez-vous pas vous lier les mains ? :)

 
Renat Fatkhullin:

Tant qu'un programmeur n'a pas travaillé dans des équipes de développement normales avec des exigences strictes (il a travaillé pendant deux ans au minimum), il ne deviendra pas un développeur au sens normal du terme. Nous nous prenons la tête 90 % du temps lorsque nous regardons des emplois tests lorsque nous examinons des candidats. L'horreur totale dans toute l'industrie du développement.

Je me demande en quoi cette "horreur" se manifeste.

Je peux supposer que cela a à voir avec l'utilisation de la POO, parce que dans la programmation procédurale, l'attention principale est portée sur la logique du travail de l'algorithme et non sur toutes sortes d'ajouts externes de type POO, avec lesquels il est très facile de construire une forêt de n'importe quelle obtusité.

Raison: