245 votes

Comment concevez-vous des projets orientés objet?

Je suis en train de travailler sur un projet important (pour moi) qui aura de nombreuses classes et devront être extensible, mais je ne suis pas sûr de la façon de planifier mon programme et la façon dont les classes ont besoin d'interagir.

J'ai pris un OOD sûr quelques semestres de retour et a appris beaucoup de choses; comme la rédaction d'UML, et de traduire les exigences en matière de documents dans les objets et les classes. Nous avons appris les diagrammes de séquence trop mais de toute façon j'ai raté la conférence ou quelque chose, ils n'ont pas vraiment collé avec moi.

Avec les projets précédents, j'ai essayé d'utiliser les méthodes que j'ai appris de l'sûr, mais finissent généralement avec le code que dès que je peux dire "oui, cela ressemble à quelque chose comme ce que j'avais à l'esprit" je n'ai aucune envie de creuser par le biais de la boue pour ajouter de nouvelles fonctionnalités.

J'ai une copie de Steve McConnell Code Complet qui je ne cesse de l'entendre est étonnant, d'ici et d'ailleurs. J'ai lu le chapitre sur la conception et ne semblent pas s'en sortir avec les informations que je cherche. Je sais qu'il dit qu'il n'est pas coupé et séché processus, qu'il est principalement basée sur l'heuristique, mais je n'arrive pas à prendre toutes ses informations et de l'appliquer à mes projets.

Alors quelles sont les choses que vous faites pendant le haut niveau de la phase de conception (avant de commencer la programmation) afin de déterminer quelles sont les catégories dont vous avez besoin (en particulier ceux qui ne repose sur aucun " monde réel des objets) et comment ils interagissent les uns avec les autres?

Plus précisément, je m'intéresse à ce que sont les méthodes que vous utilisez? Quel est le processus que vous suivez habituellement yeilds une bonne conception propre mieux représenter le produit final?

213voto

Scott Davies Points 574

Les étapes que j'ai utiliser pour la conception initiale (arriver à un diagramme de classe), sont:

  1. La collecte des besoins. Parler le client et le facteur le cas d'utilisation de définir les fonctionnalités que le logiciel doit avoir.

  2. Composer un récit de l'individu cas d'utilisation.

  3. Aller à la narration et de mettre en évidence les noms (une personne, un lieu, une chose), comme candidat des classes et des verbes d'action (les actions), de méthodes et de comportements.

  4. Couble noms et des facteurs communs de la fonctionnalité.

  5. Créer un diagramme de classe. Si vous êtes un développeur Java, NetBeans 6.7 de Soleil dispose d'un module UML qui permet la création de diagrammes ainsi que le round-trip engineering et c'est GRATUIT. Eclipse (open source Java IDE), a également un cadre de modélisation, mais je n'ai aucune expérience avec elle. Vous pouvez également essayer de sortir ArgoUML, un outil open source.

  6. Appliquer des CRUES principes pour organiser vos classes (facteur fonctionnalités communes, d'établir des hiérarchies, etc.)

79voto

Darryl Points 2560

Je n'ai pas assez de réputation pour faire de commentaires pour l'instant (depuis aujourd'hui) j'aurais juste un commentaire sur Scott Davies réponse. L'ajout de ce qu'il avait à dire:

  1. Assurez-vous que vous savez ce que votre programme est tout au sujet avant de commencer. Quel est votre programme? Que sera-ce pas ? Ce problème est-il en essayant de résoudre?

  2. Votre première série de cas d'utilisation ne doit pas être une liste de blanchisserie de tout le programme finira par le faire. Commencer avec le plus petit ensemble de cas d'utilisation, vous pouvez venir avec encore capture l'essence de ce que votre programme est pour. Pour ce site web, par exemple, la base de cas d'utilisation peut être connecter, poser une question, répondre à une question, et de consulter les questions et réponses. Rien au sujet de la réputation, le droit de vote, ou le wiki de la communauté, seulement la première essence de ce que vous êtes chasse pour.

  3. Comme vous venez avec potentiel de classes, ce n'est pas seulement en termes de ce nom qu'ils représentent, mais quelles sont les responsabilités qu'ils ont. J'ai trouvé ceci pour être la plus grande aide dans la compréhension de la façon dont les classes se rapportent les uns aux autres pendant l'exécution du programme. Il est facile de venir avec des relations comme "un chien est un animal" ou "un chiot a une mère." Il est généralement difficile à comprendre les relations décrivant au moment de l'exécution des interactions entre les objets. Vous êtes du programme algorithmes sont au moins aussi importantes que vos objets, et ils sont beaucoup plus facile à concevoir si vous avez précisé ce que chaque classe d'emplois est.

  4. Une fois que vous avez que l'ensemble minimal de cas d'utilisation et des objets, de commencer à coder. Obtenir quelque chose qui fonctionne en fait dès que possible, même si cela ne fait pas beaucoup et probablement ressemble à de la merde. C'est un point de départ, et vous forcer à répondre à des questions que vous pourriez brillant sur le papier.

  5. Maintenant revenir en arrière et choisir plus de cas d'utilisation, d'écrire comment ils vont travailler, de modifier votre modèle de classe, et d'écrire plus de code. Tout comme votre première coupe, le prendre comme peu que vous le pouvez, tout en continuant d'ajouter quelque chose de significatif. Rincer et répéter.

Juste mes deux cents. J'espère que c'est utile.

21voto

Stefano Borini Points 36904

Lorsque j'ai eu la chance, j'ai l'habitude d'utiliser ce que j'appelle les "trois itérations de la règle".

Dans la première itération (ou de démarrage), j'ai concevoir la présentation générale de l'application, selon le modèle, les objets, les algorithmes et les attendus (vraiment prévu, non pas peut-être prévu) orientations futures. Je ne suis pas d'écrire des documents de conception, mais si je dois coordonner plusieurs personnes, une esquisse de la procédure est bien sûr nécessaire, avec une analyse des dépendances et de l'estimation du temps nécessaire. Essayez de garder cette phase à un minimum, si, comme moi, vous préférez un plus méthode agile. Il y a des cas où une forte phase de conception est nécessaire, en particulier lorsque tout est connu et vrai à propos de la logique de votre programme, et si vous prévoyez d'avoir beaucoup d'interactions entre les caractéristiques de votre code. Dans ce cas, des cas d'utilisation ou de l'utilisateur des histoires à fournir sont une bonne idée, en particulier pour les applications à interface graphique. Pour la ligne de commande applications, et en particulier de bibliothèques, d'essayer d'écrire le programme "d'histoires", dans lequel vous code à l'encontre de la bibliothèque que vous avez à développer et vérifier à quoi il ressemble. Ces programmes deviennent fonctionnels les tests de votre bibliothèque une fois terminé.

Après cette première itération, vous aurez une meilleure compréhension sur la façon dont les choses interagissent, a obtenu les détails et les taches rugueuses, à résoudre des problèmes avec une des claques de la bande de conduit patch. Vous êtes prêt à se servir de cette expérience pour améliorer, nettoyer, polir, diviser ce qui était trop grand, unir ce qui est trop fragmenté, de définir et d'utiliser des modèles de conception, d'analyser les goulots d'étranglement des performances et non les questions de sécurité. En général, tous ces changements auront un impact énorme sur les tests unitaires que vous avez écrit, mais pas sur les tests fonctionnels.

Lorsque vous avez terminé cette deuxième itération, vous aurez un petit bijou, bien testé, bien documentée et bien conçu. Maintenant, vous avez à la fois l'expérience et le code pour la troisième itération, prolonger. Vous pouvez ajouter de nouvelles fonctionnalités et des cas d'utilisation pour améliorer votre application. Vous trouverez les endroits rugueux et vous finirez par entrer un quatrième itération qui est analogue à la seconde. Rincer et répéter.

C'est mon approche générale pour la conception de logiciels. Elle est semblable à la conception en spirale, à court, à trois mois d'itérations, et les éléments de développement Agile, qui vous permet d'apprendre les problèmes et de faire la connaissance de votre logiciel et de son champ d'application. Bien sûr, c'est une question d'évolutivité, de sorte que si la demande est tellement important pour impliquer des centaines de développeurs, les choses sont un peu plus complexe que cela, mais dans le fin je suppose que l'idée est toujours la même, divide et impera.

Donc, pour résumer:

  1. Dans l'itération, vous obtenez un avant-goût de, et d'apprendre
  2. Dans l'itération de deux, le nettoyage de votre produit et de le préparer pour l'avenir
  3. Dans l'itération trois, vous ajouter de nouvelles fonctionnalités et en savoir plus
  4. goto 2

13voto

Dave Gamble Points 3245

Il est souvent répété mais tout à fait vrai - comprendre vos données.

Pour la programmation orientée objet, vos classes doivent décrire pièces saillantes de l’information et comment ils interagissent.

Si vous avez un modèle mental qui décrit bien le comportement et la durée de vie des données, vous aurez un parcours facile portant sur vos classes.

Il s’agit d’un simple prolongement de : savoir exactement ce que vous essayez de le faire.

10voto

Eric the Red Points 1418

Essayez d’utiliser le comportement axé sur le développement. Ça va être difficile à briser vos vieilles habitudes, mais j’ai trouvé que les BDD est vraiment votre meilleur pari quand il s’agit de développer dans le monde réel.

http://Behaviour-Driven.org/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X