Salut tout. J'ai récemment lancé un nouvel emploi, où je suis censé travailler avec C ++ / Je fais des programmes en C depuis 5 ans. Je cherche des moyens de me préparer à un niveau acceptable dans OOP. J'ai tous les concepts de base de C ++ et OOP mais n'ont pas beaucoup d'expérience de la conception actuelle de la classe. Ce que je cherche vraiment, c'est des moyens d'apprendre la bibliothèque de classe Conception de la bibliothèque de classe, car je travaillerai dans une équipe qui écrit des bibliothèques C ++ pour d'autres programmeurs à utiliser. Veuillez suggérer des principes tels que «assignation de responsabilité» qui peut m'aider à concevoir des cours en général. P>
12 Réponses :
donner un loook à Bob Martin Principes solides : P>
Méfiez-vous des noms accrocheurs et des abréviations. Chacun de ces principes prend un énorme article ou un chapitre pour expliquer, y compris de nombreuses exceptions, "cela ne signifie pas vraiment que" s "et" ne pas être suivis aveuglément ". Jeter le "solide" est au mieux trompeur.
Exactement le genre de chose que je cherchais. Merci.
Sainte Crap, c'est un acronyme d'acronymes
En outre, tout ce qui se passe, obtenez "efficace c ++" par Scott Meyers. Vous n'êtes pas un programmeur C ++, sauf si vous l'avez lu, c'est tellement important.
Il y a un certain nombre de messages ici sur cela, par exemple: P>
Quelle est la meilleure source d'apprentissage C ++? p>
Un bon livre P>
En général, Scott Meyers Livres est un bon endroit pour commencer. P>
Les livres d'Andrei Alexandrescu sont également très bons . P>
Je sais que ce n'est pas le type de réponse que vous recherchiez; Cela ressemble plus à une extension des autres réponses (déjà faites et encore à venir). Je pensais ajouter des choses générales ... p>
ne pouvait pas résister à ces bases, voir un nouveau venu au langage qui demande des conseils avant de se lancer dans de nombreuses mauvaises habitudes. ; -) p>
+1 Lire "Efficace C ++", "plus efficace C ++" et "STL efficace" de Scott Meyers ... Procurez-vous, essayez des exemples et assurez-vous de bien comprendre, commencez par le premier. Ce n'est pas compliqué mais vous donne un fond solide dans ce que C ++ est tout à propos de
J'ai essayé de constituer des exemples de code source [ github.com/ardsrk/efective-cpp-programs ] Pour chaque élément de C ++ efficace avec l'intention de m'aider à mieux comprendre les conseils donnés dans chaque article et aussi dans l'espoir que cela puisse être utile aux gars comme vous.
En ce qui concerne # 2 va, je considère qu'une hiérarchie de héritage profonde en C ++ est une mauvaise odeur. Cela signifie généralement que vous faites plus de héritage et moins de composition que ce n'est idéal.
Les principes solides sont de bons guides, mais n'oubliez pas que vous devez avoir
J'aime toujours le livre de Bjarne Stroustrup. Il a plusieurs chapitres consacrés à la conception et c'est aussi une grande référence de langue. Il peut être assez dense lecture parfois, mais cela vaut l'effort. P>
J'ai trouvé C ++ comme un excellent outil, mais seulement après avoir vraiment appris à l'utiliser. Lisez toutes les références suggérées ici par d'autres personnes, et il n'y a aucun substitut à la pratique! P>
Quel livre? Certes que je ne suis pas très loin dans "Programmation: principes et pratiques utilisant C ++", je suis impressionné par ce que j'ai vu. "Le langage de programmation C ++" est un excellent livre sur la langue, mais je ne pense pas non plus pour l'apprendre.
"Le langage de programmation C ++" est celui que je fais référence. Je suis d'accord, ce n'est pas le premier livre à saisir lors du départ. C'était mon premier manuel C ++ au collège et je l'ai détesté alors. Mais après avoir eu une poignée sur les bases, j'ai vraiment apprécié son traitement des détails plus fins.
Essayez de concevoir tout en UML avant de coder en utilisant une séquence appropriée de diagrammes vers la classe et la séquence. Malgré toutes les critiques (à juste titre) d'UML, cela vous obligera à traiter le programme en tant que système d'interaction d'objets et non de la séquence de code. P>
La plupart des "principes de OOP" sont facilement réduits à l'absurdité si vous essayez de concevoir un programme en les suivant exactement. Le refactoring est une autre histoire. P>
Sinon, assurez-vous de savoir vraiment C ++ et STL. Bon ou mauvais, STL est ce qui est attendu dans le code C ++. P>
Je ne suis pas sûr que "tout à travers UML d'abord" est une bonne idée. C ++ n'est pas purement oop (modèles!), Et si vous tuez tout et que l'évier de la cuisine à l'UML, vous perdez d'abord une certaine partie de l'expressivité de C ++.
Pas d'argument ici, je n'utilise pas beaucoup de strict uml. Mais pour quelqu'un qui passe de C et principalement inquiet des aspects oo de C ++, je pense que UML est une expérience nécessaire.
J'ai récemment commencé à travailler avec C ++ aussi, et c'est ce que j'ai fait: Tout d'abord, j'ai eu le livre C ++ en action à partir d'un collègue et traversa son " Partie de langue, faire tous les exercices. Le chapitre 'Techniques' est également important. P>
Alors, la chose qui m'a le plus aidé, je pense, lit beaucoup de code déjà écrit de mon équipe et essayant de comprendre la raison de tout. Si vos membres de votre équipe savent bien coder, cela éduquent tout à fait. Et de toute façon, cela vous aide certainement à comprendre le but et les méthodes de votre projet et que vous attendez de vous. P>
pièce de lecture Le code du projet pourrait être quelque chose que vous devriez faire de toute façon, je pense (pour utiliser les fonctions de la bibliothèque, mettre en œuvre des fonctions similaires ou ajouter au code existant), mais parfois les gens sautent cette partie ou le font très superficiellement. p>
concevoir des hiérarchies de classe C ++ pour d'autres personnes à utiliser est un champ de mines. Je recommande vivement de lire certains des pièges communs de la conception de classe. Deux livres que je suggère: p>
Référez ce lien. Ce fichier PDF consiste en "principes de conception et
Modèles de conception"
http://www.objectmentor.com/resources/articles/principles_and_patterns.pdfle/a > p>
Le lien ci-dessus vous aidera beaucoup. P>
Selon la façon dont STL ait orienté votre nouvel emploi, vous serez soit loué, soit tourné, pour la lecture: moderne C ++ Design em> par Alexandrescu. P>
Même si vous n'utilisez aucun des motifs de votre part, il ouvrira un nouveau monde de C ++ à vous. P>
Je mettrais ce livre deuxième sur votre liste de lecture, après quelques livres de mésieurs. Alexandrescu est jolie ... intense. P>
Il faut quelques années pour devenir compétent en C ++. Les livres qui ont été suggèrent aideront. Je suggère également que vous lisez la série C ++ exceptionnelle d'Herb Sutter. P>
Pour le court terme, vous devez trouver un mentor C ++ pour vous aider à vous mettre au courant de la nouvelle société. Chaque entreprise a sa propre "culture" autour de C ++. Dos et à ne pas faire. Cela peut être plus pertinent pour votre travail que ce que vous avez lu. Par exemple, votre entreprise peut ne pas utiliser stl, alors l'apprentissage peut-être peut être un exercice académique. De nombreuses entreprises pratiquent la programmation "Cargo Cutt" - dans ce cas, en évitant les caractéristiques puissantes mais effrayantes de la langue - vous pouvez donc trouver que vous êtes donc frustré que vous ne pouvez pas utiliser ce que vous apprenez des livres. P>
Il est difficile pour moi d'imaginer essayer d'apprendre une langue aussi complexe que c ++ juste pour le travail. Lire tous ces livres et pratiquer prend du temps. Vous pouvez apprendre ce dont vous avez besoin pour le travail et apporter une contribution utile. Je pense que vous devez aimer cela pour devenir compétent. P>
Pourquoi? Le CW-mafia vraiment i> doit obtenir une prise en main sur la réalité l'un de ces jours. Si une question est cw'ed, cela signifie que personne qui répond à un représentant pour ses efforts. Cela a du sens pour les threads de blague où une réponse ne dit rien sur les compétences de programmation ou les contributions de la programmation de l'auteur. Mais dans cette question, pourquoi une réponse bonne i> est-elle récompensée? CW a du sens lorsque les réponses n'ont aucune valeur. Même si une question est ouverte, comme celle-ci, les réponses peuvent toujours être bonnes ou mauvaises et mériter d'être repoussées.