Comment puis-je pratiquer une meilleure programmation orientée objet? [fermé]


Je programmation dans des langages orientés objet depuis des années mais secrètement je regarde certaines des choses que mes collègues font avec envie. Beaucoup d'entre eux semblent avoir un instinct OO intérieur que je n'ai pas - peu importe à quel point j'essaie. J'ai lu tous les bons livres sur OO mais je n'arrive toujours pas à le déchiffrer. Je me sens comme le gars qui a donné 110% pour être un footballeur professionnel mais qui n'avait tout simplement pas le talent naturel pour le faire. Je suis perdu et je pense à changer de carrière-que devrait faire J'?

 68
Author: JB King, 0000-00-00

21 answers

Je dirais que je me concentre moins sur la programmation OO et que je me concentre davantage sur la conception OO . Prenez un papier et un crayon (ou peut-être un outil de modélisation UML) et éloignez-vous de l'écran.

En pratiquant la conception d'un système, vous commencerez à avoir une idée naturelle des relations d'objets. Le code n'est qu'un sous-produit de la conception. Dessinez des diagrammes et modélisez votre application sous une forme purement non codée. Quelles sont les relations? Comment vos modèles interagissent-ils? Ne pensez même pas à l' code.

Une fois que vous avez passé du temps à concevoir... ensuite, traduisez-le en code. Vous serez surpris de voir à quelle vitesse le code peut être écrit à partir d'un bon design OO.

Après beaucoup de pratique de conception, vous commencerez à voir des zones communes qui peuvent être modularisées ou abstraites, et vous verrez une amélioration à la fois de vos conceptions et de votre code.

 102
Author: zombat, 2009-08-19 18:07:31

Le moyen le plus simple est d'apprendre des concepts tels que SOLIDE, SEC, FIT, DDD, TDD, MVC, etc. Comme vous regardez ces acronymes, il vous mènera vers le bas de nombreux autres trous de lapin et une fois que vous avez terminé avec votre lecture, vous devriez avoir une bonne compréhension de ce que la meilleure programmation orientée objet est!

Podcasts SOLIDES: http://www.hanselminutes.com/default.aspx?showID=168, http://www.hanselminutes.com/default.aspx?showID=163

Répartition solide: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

SEC: http://en.wikipedia.org/wiki/Don%27t_repeat_yourself

AJUSTEMENT: http://www.netwellness.org/question.cfm/38221.htm

DDD: http://dddcommunity.org/

DDD lecture requise: http://www.infoq.com/minibooks/domain-driven-design-quickly

TDD: http://en.wikipedia.org/wiki/Test-driven_development

MVC: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

Et oui, se retrousser les manches et coder est toujours une bonne idée. Faites un petit projet au meilleur de vos capacités actuelles. Ensuite, lisez un article d'en haut. Ensuite, refactorisez votre code pour répondre aux besoins de ce que vous venez de lire. Répétez jusqu'à ce que vous ayez refactorisé l'enfer de votre code. À la fin vous devriez non seulement savoir ce qu'est OO mais vous devriez être en mesure d'expliquer pourquoi c'est important et comment pour obtenir leur première fois. Apprendre à refactoriser est également une clé pour un bon code. Ce qui est en ce moment n'est pas juste demain.

 36
Author: Andrew Siemer, 2011-04-16 08:49:49

Dans de nombreux domaines, il y a un moment "eureka" où tout se réunit.

Je me souviens m'être senti frustré dans la géométrie du lycée. Je ne savais pas quel théorème appliquer à chaque étape de la preuve. Mais j'ai continué. J'ai appris chaque théorème en détail, et étudié comment ils ont été appliqués dans différents exemples de preuves. Comme je comprenais non seulement la définition de chaque théorème, mais comment l'utiliser, j'ai construit une" boîte à outils " de techniques familières que je pouvais sortir comme nécessaire.

Je pense que c'est la même chose en programmation. C'est pourquoi les algorithmes, les structures de données et les modèles de conception sont étudiés et analysés. Il ne suffit pas de lire un livre et obtenir la définition abstraite d'une technique. Vous devez le voir en action aussi.

Alors essayezlire plus de code , en plus de vous entraîner à l'écrire vous-même. C'est une beauté de l'open source, vous pouvez télécharger beaucoup de code à étudier. Tout ce code n'est pas bon, mais étudier un mauvais code peut l'être tout autant éducatif comme l'étude du bon code.

 12
Author: Bill Karwin, 2009-08-19 18:17:34

Ma suggestion serait d'apprendre quelque chose de différent.

Apprenez la programmation fonctionnelle et appliquez ce que vous apprenez de cela à la POO. Si vous connaissez C++, jouez avec la programmation générique.

Apprenez des langages non orientés objet.

Pas seulement parce que vous devriez également utiliser toutes ces choses (vous devriez), ou parce qu'elles devraient complètement remplacer la POO (elles probablement ne devraient pas), mais parce que vous pouvez également appliquer les leçons de celles-ci à la POO.

Le secret de OOP est que il n'a pas toujours de sens de l'utiliser. Tout n'est pas une classe. Toutes les relations ou comportements ne doivent pas être modélisés en tant que classe.

Essayer aveuglément d'appliquer la POO, ou s'efforcer d'écrire le meilleur code de POO possible a tendance à conduire à d'énormes dégâts suringéniés avec beaucoup trop de niveaux d'abstraction et d'indirection et très peu de flexibilité.

N'essayez pas d'écrire un bon code de POO. Essayez d'écrire du bon code. Et utilisez la POO quand cela contribue à cela objectif.

 12
Author: jalf, 2009-08-19 18:18:32

Trop de gens pensent au codage en premier, aux objets, en dernier.

Vous pouvez lire tous les livres que vous voulez mais cela ne vous apprendra pas à penser de manière orientée objet that cela demande de la pratique et une certaine méthodologie.

  1. Voici quelques méthodes qui ont m'a aidé: Quand vous êtes loin de travail et ouverture d'esprit vous pouvez pratique en regardant tout comme un objet. Ne regardez pas ces objets et se demander comment vous allez pour les programmer, regardez comme propriétés et fonctions uniquement et comment ils se rapportent ou héritent de chacun autre. Par exemple, lorsque vous voyez un personne, ils sont un objet et par conséquent représenterait une classe. Ils ont des propriétés comme les cheveux couleur, teint, hauteur, etc. Ils certaines fonctions. Ils marcher, parler, dormir, etc. Certains de la fonctions ces personnes font des retours résultat. Par exemple, leur travail la fonction renvoie un montant en dollars. Vous pouvez le faire avec tout ce que vous voir parce que tout est un objet. Vélo, voiture, étoile, etc.

  2. Avant de coder un projet, concevez-le en utilisation de notes post-it et d'un effaçable à sec bord. Cela fera de bonnes pratiques jusqu'à ce que vous obtenez le coup de cela. Pensez à votre objet / fonction / propriété. Chacun ces articles auront le sien note post-it. Placez-les comme un hiérarchie sur le tableau effaçable à sec. Dans à cet égard, fonction / propriétés sera placé sous l'objet. Si vous avez un autre objet, faites de même pour que l'on. Puis, demandez-vous, faire l'un de ces post-it (objets/fonctions/propriétés) se rapportent les uns aux autres. Si deux objets utilisez la même fonction, créez un objet parent (note post-it) et mettre il au-dessus des autres avec la fonction réutilisable sous le nouveau Note. Tracez une ligne en utilisant le marqueur effaçable à sec des deux enfants les objets de la mère.

  3. Quand tout cela est fait, alors vous inquiétez a propos des internes de la façon dont la classe travail.

 11
Author: , 2009-08-21 18:10:30

Apprenez une autre langue! La plupart des développeurs utilisant uniquement Java (à titre d'exemple) n'ont qu'une compréhension limitée de OO car ils ne peuvent pas séparer les fonctionnalités et les concepts du langage. Si vous ne le savez pas encore, jetez un oeil à python. Si vous connaissez python, apprenez Ruby. Ou choisissez l'un des langages fonctionnels.

 9
Author: Achim, 2009-08-19 18:09:03

L'aswer est dans votre question ;)

Pratique, pratique, Pratique.

Revoyez votre propre code et apprenez des erreurs.

 7
Author: Neil N, 2009-08-19 18:05:42

TDD m'a le plus aidé à améliorer mes compétences globales, y compris la POO.

 5
Author: jamesaharvey, 2009-08-19 20:03:32

Le code plus vous écrivez, plus vous remarquerez les pièges de certaines pratiques de programmation. Après d'assez de temps, et assez de code, vous serez en mesure d'identifier les signes d'alerte de ces pièges et être en mesure de les éviter. Parfois, quand j'écris du code, je vais avoir cette démangeaison dans le fond de mon esprit en me disant qu'il peut y avoir une meilleure façon de le faire, même si elle fait ce dont j'ai besoin. Une de mes plus grandes faiblesses de programmation est" sur-analyser " les choses tellement qu'il commence à considérablement ralentir les temps de développement. J'essaie d'empêcher ces "démangeaisons" en passant un peu plus de temps sur la conception, ce qui se traduit généralement par beaucoup moins de temps à écrire du code.

...secrètement, je regarde certaines des choses que mes collègues font avec envie. Beaucoup d'entre eux semblent avoir un instinct OO intérieur que je n'ai pas - peu importe à quel point j'essaie...

Je pense que vous avez répondu à votre propre question ici. Lire un bon code est un bon début, et comprendre un bon code est encore mieux,mais comprendre les étapes pour arriver à ce bon code est le meilleur. Lorsque vous voyez un code dont vous êtes envieux, vous pouvez peut-être demander à l'auteur comment il est arrivé à cette solution. Cela dépend entièrement de votre environnement de travail ainsi que les relations avec vos collègues. En tout cas, si quelqu'un me demande le processus de pensée derrière tout code que j'écris, je n'hésite pas à leur dire parce que je sais que je voudrais qu'ils fassent la même chose pour moi.

 4
Author: SuperSized, 2009-08-19 21:27:51

Les concepteurs de langage ont interprété la "programmation orientée objet" de différentes manières. Par exemple, voyez comment Alan Kay, l'homme qui a d'abord utilisé le terme POO, l'a défini:

OOP pour moi signifie seulement la messagerie, locale conservation et protection et dissimulation de état-processus, et extrême liaison tardive de toutes choses. Il peut être fait en Smalltalk et en LISP. Y sont peut-être d'autres systèmes dans lesquels c'est possible, mais je ne suis pas au courant ils.

(Cité de http://userpage.fu-berlin.de/ ~ ram / pub / pub_jf47ht81Ht / doc_kay_oop_fr).

Il peut sembler étrange qu'il ne considère pas les langages Java et C++ OOP! Mais en tant que concepteur de l'un des premiers et meilleurs langages de POO (Smalltalk), il a ses propres raisons valables pour cela. Pourquoi Alan Kay a-t-il considéré Lisp comme un langage orienté objet mais pas Java? Cette question exige un examen sérieux de la part de quiconque prétend comprendre la POO.

Erlang a un tout à fait différente implemntation de la POO, Scheme en a un autre. Il convient de considérer tous ces points de vue alternatifs. Si possible apprenez toutes ces langues! Cela vous donnera une perspective plus large, mettra de nouveaux outils puissants dans votre main et fera de vous un meilleur programmeur.

J'ai résumé mes expériences avec la mise en œuvre d'un langage de POO, basé sur des idées empruntées à Smalltalk, Scheme et Erlang dans cet article.

 4
Author: Vijay Mathew, 2009-08-20 04:00:45
       public void MasteryOfOOP() 
    { 
       while(true)

        /* My suggestion is: */
     DO: find a lot of well-written object oriented code and read it.  Then 
try to use the insights from it on your own coding.  Then do it again.  Then 
have a colleague who is a good OOP look at it and comment. Maybe post a chunk 
of your code on SO and ask for how it could be improved.

        Then read some more of those books.  Maybe they make a little more 
sense now...?

        Now go back to the top of this post, and do it again. 

        Repeat Forever.

        }
    }
 4
Author: Alex Baranosky, 2009-10-08 09:29:06

Si vous ne savez pas comment concevoir des systèmes orientés objet, commencez par les données. Déterminez les choses dont vous avez besoin pour garder une trace et quelles informations vont naturellement ensemble (par exemple, toutes les spécifications d'un modèle de groupe de voiture ensemble bien).

Chacun de ces types de choses que vous décidez de suivre devient une classe.

Ensuite, lorsque vous devez pouvoir exécuter des actions particulières (par exemple, marquer un modèle de voiture comme désactivé) ou poser des questions particulières (pour exemple, en demandant combien d'un modèle de voiture donné ont été vendus au cours d'une année donnée), vous chargez cette fonctionnalité sur la classe avec laquelle elle interagit le plus fortement.

En général, il devrait toujours y avoir un endroit assez naturel pour qu'un bit de code donné vive dans votre structure de classe. S'il n'y en a pas, cela indique qu'il y a un endroit où la structure doit être construite.

 3
Author: chaos, 2009-08-19 18:10:40

Il y a trop d'informations sur les objets. Le plus important est de maîtriser les bases et tout se met en place plus facilement.

Voici une façon de penser aux objets. Pensez aux structures de données dans les langages procéduraux. Ils sont un groupe de champs sans comportement. Pensez aux fonctions qui reçoivent des pointeurs vers ces structures de données et manipulent ces dernières. Maintenant, au lieu de les séparer, définissez les fonctions à l'intérieur de la définition des structures et assumer les fonctions reçoivent généralement un pointeur vers la structure de données à manipuler. Ce pointeur s'appelle ceci. En résumé, considérez les objets comme la combinaison d'état (données) et de comportement (méthodes - le nom fantaisiste des fonctions en POO).

C'est la base absolue. Il y a trois autres concepts que vous devez absolument maîtriser:

Héritage - Tout est question de réutilisation de code.

Encapsulation - Il s'agit de cacher l'implémentation de l'interface. Simplement mis, tout devrait être privé jusqu'à preuve du contraire.

Polymorphisme - Peu importe le type de la variable de référence, mais le type de l'instance réelle pour savoir quel comportement (méthode) est appelé. Java ne rend pas facile d'avoir ce concept très visible car par définition tout est polymorphe. . Net facilite la compréhension lorsque vous décidez ce qui est polymorphe et ce qui ne l'est pas, remarquant ainsi la différence de comportement. Ce résultat est obtenu par la combinaison de le virtuel et la remplacer.

Si ces concepts sont très bien compris, tout ira bien.

Un dernier conseil: Vous mentionnez les meilleurs livres. Avez-vous lu "Penser en Java" de Bruce Eckel? Je recommande ce livre même aux personnes qui commencent dans. Net, car les concepts de POO sont clairement présentés.

 3
Author: Rui Craveiro, 2009-08-20 15:23:32

Devenez plus agile, apprenez les tests junit et étudiez la conception pilotée par domaine. Je suggère le livre Domain-Driven Design: affronter la Complexité au Cœur de Logiciels bien que c'est un peu difficile à certains moments.

 2
Author: cherouvim, 2009-08-19 18:06:48

Les compétences de POO viennent au fil du temps. Lecture 1, 2 ...10 livres ne le coupent pas. La pratique de l'écriture du code. Si vous travaillez dans un environnement de programmation...cela peut être utile. Si ne pas essayer d'obtenir en un seul. Proposez de développer une application(s) gratuitement. Vous devez obtenir vos mains sales. Remember...no l'application est parfaite à partir de zéro.C'est pourquoi il y a ré-affacturage.

Aussi...ne vous laissez pas emporter par la POO aussi much...it somes au fil du temps. Souci de développer pleinement applications fonctionnelles.

 2
Author: Saif Khan, 2009-08-19 18:19:54

Essayez de programmer dansSelf , l'un des langages OO les plus purs du monde. Si pur, en fait, qu'il n'a même pas de classes, seulement des objets. Il n'a pas non plus de variables, de champs, de statiques, d'attributs, seulement des méthodes. Il est également intéressant de noter que chaque objet du système est également un objet à l'écran et vice-versa.

Certains des articles intéressants sur soi sont Construction d'Applications Basée sur des Prototypes Utilisant SELF 4.0 (l'auto tutoriel), Auto: la Puissance de La Simplicité et l'Organisation des Programmes Sans Classes. Aussi, Auto: La vidéo (Randall B. Smith; Dave Ungar) est formidable, avoir deux des concepteurs de la langue expliquer les idées de Soi.

Cela fonctionne pour à peu près n'importe quel concept, en fait, du moins pour moi: trouvez le langage qui incarne le plus purement le concept que vous voulez apprendre et utilisez-le simplement.

 2
Author: Jörg W Mittag, 2009-08-19 19:45:29

OO a finalement cliqué pour moi après avoir essayé de programmer un programme de type banque qui gérait les transactions, calculait les intérêts et gardait une trace de tout cela. Je l'ai fait pendant que j'apprenais Java. Je suggère simplement de l'essayer, de le compléter, puis quand vous avez terminé, regardez une BONNE solution et voyez ce que vous auriez pu faire de mieux.

 2
Author: Joe Phillips, 2009-08-20 04:03:47

Je pense aussi que les compétences de POO se renforcent principalement avec la pratique. Envisagez de changer d'entreprise, si vous y êtes depuis plus de 3 ans. Certes, ce n'est pas valable pour tous les emplois, mais souvent un homme s'habitue aux projets et aux pratiques d'une entreprise et cesse d'avancer avec le temps.

 2
Author: Vladimir Grigorov, 2009-08-20 15:05:42

Vous avez dit la réponse vous-même: pratique. La meilleure solution pour cela est de développer un jeu. Utiliser les concepts que vous avez appris dans les livres.

 1
Author: aviraldg, 2009-08-19 18:07:39

Avez-vous lu le chapitre sur OO de la première édition du livre de Scott Meyers "Effective C++"? Il n'est pas arrivé aux éditions ultérieures, mais c'était une excellente explication. Le titre était essentiellement "dis ce que tu veux dire, veux dire ce que tu dis" à propos des conventions appropriées.

En Fait, vous pourriez voir ma réponse à une question similaire sur ici.

HTH

Bravo,

 1
Author: Rob Wells, 2017-05-23 10:31:17

Retroussez vos manches et codez!

 0
Author: John, 2009-08-19 18:03:24