J'ai été programmée (en tant que travail) depuis environ 3-4 mois maintenant après avoir obtenu son diplôme d'études universitaires. P>
à l'université, j'ai été enseigné une programmation orientée objet et j'ai senti que j'avais une bonne idée jusqu'à ce que je commence à travailler sur de vrais problèmes. P>
Je ne peux pas sembler faire quoi que ce soit, mais que vous utilisez du code de procédure pour des solutions - bien que j'utilise des classes et des techniques de base du COP, le code est essentiellement procédural à l'intérieur et je sais qu'il y a de meilleures solutions, mais je ne peux pas sembler correspondre à des motifs, etc. avec ce que j'essaie de faire. p>
Combien de temps / beaucoup pratique prend-il avant de pouvoir commencer à programmer correctement à l'aide de techniques de POOP - par opposition à l'utilisation de classes remplies de code procédural. P>
Aussi, existe-t-il des conseils sur la manière de progresser vraiment avec la possibilité de concevoir des solutions aux problèmes correctement? P>
7 Réponses :
La procédure n'est pas objectivement pire que la conception orientée objet, mais son outil pratique. La voie essentielle de bien vouloir bien travailler est de penser à votre programme comme modélisation de l'interaction des objets du monde réel, chaque objet du monde réel est modélisé par un objet programmatique et chaque interaction entre ces objets est une méthode. P>
Mais si cela ne suffit pas pour vous faire rouler, peut-être que ce dont vous avez besoin est d'autres outils sous votre ceinture pour travailler avec. Une source largement recommandée est le GOF Book , qui décrit, en détail, de nombreuses façons de construire des programmes, en mettant l'accent sur OUP. Un mot de prudence, cependant, assurez-vous que tout modèle que vous appliquez est bien adapté au problème, car cela vous causera des maux de tête sans fin de collegues si vous les appliquez au hasard. P>
+1, j'aimerais pouvoir vous donner +1 pour chaque grand point que vous avez fait dans cette réponse.
En plus de la réponse de @ TokenmacGuy, il existe une ligne directrice utile à adopter lors de la conception de cours - ils doivent savoir comment ne pas savoir quoi. Par exemple, dans un système qui utilise la position de certaines classes de but doit savoir comment trouver leur position plutôt que de la stocker et l'enregistrer. Bien que pas une panacée, il est très utile de garder à l'esprit, car cela aide à régler votre esprit dans une direction appropriée. P>
Je pense que dans votre cas, vous devez commencer le code comme vous pouvez, même procédural. Une fois terminé, et le code fonctionne, étudiez-le et voyez comment vous pouvez le casser en modules. Trouvez des fonctionnalités communes qui doivent être placées dans la méthode de l'objet. Dans le même temps, essayez de voir comment vous pouvez refactoriser votre code pour adapter un modèle que vous avez lu. Dans le temps, vous vous dérangerez ce que vous avez mal fait dans votre conception et vous améliorerez-vous P>
regarder Recettes numériques en C , vous ferez l'expérience d'une programmation procédurale. Appels de fonction avec des listes de paramètres sans fin, le contrôle de flux de programme se propage sur de nombreuses procédures. Prenez un simple algorithme comme 'Runke-Kutta' et portez-le à une langue de votre choix. L'encapsulation et le passage de message sont un état d'esprit complet. P>
oop est strong> modélisation, comme TokenmacGuyguy a déjà dit "l'interaction des objets du monde réel". ATTENDU QUE la programmation procédurale se concentre davantage sur les «algorithmes». p>
Un pas dans l'apprentissage de OOP est la possibilité de transformer / modeler objets du monde réel em> dans les propriétés et méthodes de classe. Des livres comme efficace Java em>, Modèles de mise en œuvre em>, gof em> vous aider à choisir les meilleures pratiques tout en mettant des objets du monde réel dans le code. p>
La 3ème version de NR (pour laquelle vous doit B> Modifier, le précédent a 15 ans) utilise C ++ et bonne conception OOP.
@Alexandre C. J'ai choisi la version C de 15 ans. C exprès. J'ai supposé que l'administrateur ait appris une langue de l'OOP en tant que première langue de programmation. Par conséquent, il n'aurait peut-être pas fait l'expérience de procéder à la procédure au PCO. Je n'ai pas l'intention de déshériter la version C des recettes numériques du tout.
Je pense que cela prend simplement beaucoup de pratique. P>
Quand je regarde mon code, je le vois submergé par toutes sortes d'objets qui n'ont absolument aucune représentation mondiale réelle: mappeurs de la base de données, usines d'objet, constructeurs d'expressions, etc. Ils pourraient sembler comme des objets du monde réel, mais ils ne sont vraiment rien Comme. Ce ne sont que des abstractions qui nous aident à gérer toute la complexité du programme. P>
Je pense que la partie difficile principale de OOP est exactement ça. Vous ne pouvez pas simplement regarder votre domaine dans votre domaine, qui traite par exemple avec des voitures et dis: je sais, j'ai besoin d'une classe de voiture! Même si vous avez besoin d'une classe d'automobile, cette connaissance ne vous aide pas à décider de quoi vraiment mettre à l'intérieur. Évidemment, vous ne pouvez pas simplement mettre les cent mille caractéristiques qui traitent des voitures à l'intérieur d'une classe. Alors, comment le gérez-vous? Comment la coupe-t-elle? Quelle devrait être la responsabilité de la classe de voiture? Qui devrait aussi savoir sur la classe de voiture? Ce sont les questions difficiles pour lesquelles personne, mais l'auteur du programme lui-même peut vraiment répondre. Et même les plus expérimentés répondent rarement à toutes les questions à la première fois. P>
Mais je suppose qu'il y a des principes généraux de bon OOP à suivre. Gardez le Couplage entre les objets aussi bas que possible. Suivez La loi de Demeter . Le Solid Principes sont bons gardez à l'esprit. Mais surtout: Gardez-le Dry tout le chemin. P>
+1 spécialement pour répondre avec "mais c'est ce qu'ils vous disent habituellement à l'école aussi", je pensais que WTF lorsque je lisais le premier paragraphe de la question élue la plus élevée à la question ( Stackoverflow.com/questions/3747352/... ). Vraiment, c'est la toute première chose qu'ils vous disent. Et comme vous pouvez dire de ma réponse, je ferais une mention spéciale dans votre dernier paragraphe à Solid.
Implémentez des objets COM dans C et vous comprenez la différence entre OOP et procédural ... P>
Au fait, étudie les modèles d'objet (COM, par exemple, mais c'est le cas de 1995 ...) est un bon moyen de saisir la supériorité de OUP sur la modularité. Prenez votre immense bibliothèque préférée (QT est un bon départ si vous êtes dans C ++ ou Python) et lisez Docs, écrivez de petits programmes. P>
Je ne peux pas sembler faire quoi que ce soit, mais que vous utilisez du code de procédure pour des solutions - bien que j'utilise des classes et des techniques de base du COP, le code est essentiellement procédural à l'intérieur et je sais qu'il y a de meilleures solutions, mais je ne peux pas sembler correspondre à des motifs, etc. avec ce que j'essaie de faire. P> blockQuote>
Ne désespoir pas, c'est totalement normal au début. Soyez prudent avec ce que vous faites lors de votre adressage, assurez-vous d'appliquer uniquement des modèles pour résoudre les problèmes réels que vous voyez dans le code. Le code doit être simple, vous pouvez avoir un scénario qui n'appelle aucune technique avancée. Tout ce que vous appreniez, essayez de garder à l'esprit que ce que vous voulez, c'est d'introduire des éléments simples qui vous donnent des avantages sans se terminer par un tas de code / motifs inutiles. P>
Combien de temps / beaucoup pratique prend-il avant de pouvoir commencer à programmer correctement à l'aide de techniques de POOP - par opposition à l'utilisation de classes remplies de code procédural. P> blockQuote>
dépend de ce que vous voulez dire avec correctement. Vous pouvez apprendre à appliquer des approches spécifiques très tôt, Et même réaliser des choses très cools, mais imho de vraiment maîtriser ses années. Je pense juste qu'il y a des morceaux de puzzle qui prennent un bon moment pour vraiment s'enfoncer. P>
Aussi, existe-t-il des conseils sur la manière de progresser vraiment avec la possibilité de concevoir des solutions aux problèmes correctement? P> blockQuote>
Je vous recommande vivement de lire ces 2 "ebooks" S.O.L.I.D. Principes et 31 jours de refactoring . Celui sur le solide est très bon dans les aspects de la conception du code, spécialement dans un environnement agile. Celui sur le refactoring vous aide à identifier les opportunités d'amélioration dans votre code existant. P>
Java Efficace de Joshua Bloch, deuxième édition, Modèles de mise en œuvre BYKENT Beck Beck.