Le Secret pour atteindre une bonne Conception OO
Je suis un programmeur c++, et je suis impatient de l'apprentissage et la maîtrise de conception OO.J'ai fait beaucoup de recherche et comme nous le savons tous, il ya des charges de matériel, de livres, etc tutoriaux sur comment à obtenir un bon OO design. Bien sûr, je comprends un bon design est quelque chose qui peut seulement venir avec des charges de l'expérience, le talent individuel, brillance ou en fait, même par simple chance(exagération!).
Mais bien sûr, tout commence avec un solide début & le renforcement de certaines des bases solides.Quelqu'un peut-il m'aider en leur montrant le bon matériel sur la façon de commencer cette quête de l'apprentissage de la conception dès le stade de l'identification des objets, classes, etc à l'étape de à l'aide de modèles de conception.
Avoir dit que je suis un programmeur, mais je n'ai pas eu une expérience dans la conception.Pouvez-vous svp m'aider à prendre quelqu'un de m'aider dans cette transition à partir d'un programmeur pour un designer?
Des conseils,des suggestions,des conseils vous seront utiles.
[Edit]Merci pour les liens et les réponses, j'ai besoin de me faire à ça 🙂 Comme je l'ai mentionné avant, je suis un programmeur C++ et je ne comprends l'OO concepts de base en tant que tel, comme l'héritage, l'abstraction, le polymorphisme, et après avoir écrit le code en C++ de faire comprendre quelques-uns des modèles de conception ainsi.ce que je ne comprends pas est la base du processus de pensée avec laquelle on doit s'approche d'une exigence. Le nitty grittys de comment appraoch et de décider sur ce que les classes doivent être faites, et comment le définir ou de conclure sur les relations qu'ils doivent avoir entre eux.Connaître les concepts(t, dans une certaine mesure, mais ne sachant pas comment les appliquer est le problème me semble que j'ai 🙁 Toutes les suggestions à ce sujet?
- "OUPS" est un étrange et drôle de terme, je vous recommande d'utiliser le mieux connu "OO design" ou tout simplement "OOD" à la place.
- Eh bien, je pense que la plupart d'entre nous ont écrit beaucoup de code qui ne peut être décrit comme ayant un "oups design" 😉
- oh oui 🙂 Bien que je ne suis pas tout à fait sûr de l'OP moyens pour atteindre ces sortes de prouesses 😉
- Démarrer avec Classe-la responsabilité-la collaboration de la carte.
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de secret. C'est de la sueur, pas de la magie.
Ce n'est pas de bien faire une chose. C'est de l'équilibrage de beaucoup de choses qu'il ne faut pas aller mal. Parfois, ils travaillent en synchronisation, parfois, ils travaillent les uns contre les autres. Le Design est un seul de ces aspects. Le meilleur design n'est pas de l'aide si le projet échoue (par exemple, parce qu'il n'a jamais envoyé).
La première règle que j'avais mis en avant est:
1. Il n'y a pas d'absolus
Suit directement à partir de l' "beaucoup de choses à l'équilibre. D. R. Y., Y. A. G. N. I. etc. sont lignes directrices, en suivant strictement entre eux ne peuvent pas garantir une bonne conception, si elle est suivie de la lettre qu'ils peuvent faire de votre projet est un échec.
La deuxième règle n'est pas très fréquent:
2. Une interface doit être plus simple que la mise en œuvre
Sons au trivial pour être accrocheur. Pourtant, il y a beaucoup à dire à ce sujet:
La prémisse de l'OO est de gérer le programme de tailles qui ne peut pas être géré avec la programmation structurée et plus. Le mécanisme principal est d'intégrer la complexité: nous ne pouvons cacher la complexité derrière une interface plus simple, et puis oublier que la complexité.
Interface complexité implique la documentation, la gestion des erreurs de spécifications, les garanties de performance (ou de leur absence), etc. Cela signifie que, par exemple, en réduisant la déclaration d'interface en introduisant des cas particuliers n'est pas une réduction de la complexité - juste un shuffle.
3-N Voici où j'ai mis la plupart des autres mentions, qui ont été expliqué déjà très bien.
La séparation des Préoccupations, K. I. S. S, SOLIDE principe, R. D. Y., à peu près dans cet ordre.
Façon de construire un logiciel conformément à ces lignes directrices?
Au-dessus des lignes directrices de l'évaluation d'un morceau de code. Malheureusement, il n'y a pas de recette pour y arriver. "Expérimentés" signifie que vous avez une bonne idée de la façon de structurer votre logiciel, et certaines décisions juste se sentir mal. Peut-être que tous les principes sont rationnalizaitons après le fait.
Le chemin d'accès général est de décomposer un système en responsabilités, jusqu'à ce que les éléments individuels sont gérable.
Il existe des processus formels pour cela, mais ces juste sur le fait que des ce qui fait un bon, isolé composant est une décision subjective. Mais en fin de compte, c'est ce que nous sommes payés pour.
Si vous avez une idée approximative de l'ensemble du système, il n'est pas faux de commencer avec l'une de ces pièces comme une graine, et de grandir dans un "core". Top-down et bottom-up ne sont pas antipodes.
Pratique, pratique, pratique. Construire un petit programme, le faire fonctionner, les exigences du changement, le faire fonctionner à nouveau. "L'évolution des exigences de la partie" vous n'avez pas besoin de former un lot, nous avons des clients pour qui.
Post-revues de Projet - essayez de vous habituer à eux même pour vos projets personnels. Après il est scellé, fait, d'évaluer ce qui était bon, ce qui était mauvais. Examiner le code source a été jeté à - dire ne pas voir que sessison comme "ce qui doit être fixe?"
Conway Loi dit que "Un système reflète la structure de la organizaiton qui l'a construit." Qui s'applique à la plupart des logiciels complexes que j'ai vu, et des études semblent confirmer que. Nous pouvons tirer quelques bits d'information à partir de:
Je vais citer Marcus Baker parler de la façon d'obtenir de bons OO design dans un post sur le forum ici: http://www.sitepoint.com/forums/showpost.php?p=4671598&postcount=24
Évidemment, c'est un processus assez simple, et les informations qui y sont contenues ne doit pas être appliquée à chaque situation, mais je sens que Marcus est juste, notamment en ce qui concerne le processus on doit utiliser pour la conception OO code. Après un certain temps, vous allez commencer à le faire naturellement, il va tout simplement devenir une seconde nature. Mais, tout en apprenant à le faire, c'est un grand ensemble d'étapes à suivre.
Comme vous l'avez dit, il n'y a rien comme l'expérience. Vous pouvez lire tous les ouvrages existants sur la planète à ce sujet, vous aurez toujours pas aussi bon que si vous pratiquez.
La compréhension de la théorie est bonne, mais à mon humble avis, il n'y a rien comme l'expérience. Je pense que la meilleure façon d'apprendre et de comprendre des choses complètement est de les appliquer dans un projet(s).
Là, vous devrez faire face à des difficultés, vous allez apprendre à les résoudre, parfois peut-être avec une mauvaise solution : mais encore, vous allez apprendre. Et si quelque chose vous dérange et vous ne pouvez pas trouver comment le résoudre bien, nous allons être ici pour vous aider ! 🙂
Je peux vous conseiller le livre "la Tête la Première, les Design Patterns" (recherche Amazon). C'est un bon point de départ, avant de sérieusement plongée dans le gang des fours de la bible, et il montre des principes de conception et le plus utilisé des modèles.
En un mot : Code, critiquer, chercher une solution bien connue, mettre en œuvre, et revenir à la première étape jusqu'à ce que vous êtes (plus ou moins) satisfait.
Comme souvent, la réponse à ce genre de question est : ça dépend. Et dans ce cas, cela dépend de comment vous apprendre des choses. Je vais vous raconter ce travail pour moi, pour que je face au problème que vous décrivez, mais il ne fonctionne pas avec tout le monde et je ne voudrais pas dire que c'est la réponse parfaite".
J'ai commencer à coder quelque chose, pas trop simple, ni trop complexe. Ensuite, je regarde le code et je pense : bon, quel est le problème ? Pour cela, vous pouvez utiliser les trois "principes SOLIDES" :
Ne pas essayer de maîtriser ces et comprendre tout sur eux. Simplement les utiliser comme lignes directrices pour critiquer votre code. Pense principalement sur "que faire si je veux le faire maintenant ?". "Que faire si je travaille pour un client, et il veut ajouter ceci ou cela ?". Si votre code est parfaitement adaptable à toute situation (ce qui est presque impossible), vous pourriez avoir atteint un très bon design.
Si elle ne l'est pas, envisager une solution. Que feriez-vous ? Essayez de venir avec une idée. Puis, en savoir plus sur les modèles de conception et de trouver celui qui pourrait répondre à votre problème. Voir si elle correspond à votre idée - souvent, c'est l'idée que vous avez eu, mais mieux exprimé et développé. Maintenant, essayez de la mettre en œuvre. Ça va prendre du temps, vous aurez souvent à l'échec, c'est frustrant, et c'est normal.
Est à propos de l'expérience, mais l'expérience est acquise par critiquer votre propre code. C'est la façon dont vous allez comprendre la conception, non pas comme quelque chose de cool à savoir, mais comme la base d'un solide code. Il ne suffit pas de savoir tout droit, un bon code a qui et qui". C'est beaucoup mieux d'avoir subi pourquoi, ont échoué, et voir ce que whas mal. Le problème avec le modèle de conception, c'est qu'ils sont très abstrait. Ma méthode est un moyen (probablement pas le seul ni le meilleur) pour les rendre moins abstrait pour vous.
Les concepts de base dans mon esprit:
Tous les autres concepts tels que l'héritage, le polymorphisme et la conception des modèles sont sur l'intégration de ces deux concepts ci-dessus et ont encore des objets qui peuvent résoudre des problèmes du monde réel.