Qu'est-ce que le processus de pensée orienté objet? [fermé]


9

J'ai étudié la POO en conjonction avec l'implémentation MVC de Zend au cours des derniers mois. Je suis assez nouveau dans la programmation, en général, mais je suis convaincu que je dois apprendre les choses de la bonne manière, ce qui signifie pour moi de m'assurer que je comprends pourquoi les choses se font comme elles le sont. C'est-à-dire que j'ai découvert qu'en apprenant à faire quelque chose (n'importe quoi, par exemple de la musique), la meilleure façon d'apprendre à faire quelque chose est de savoir pourquoi cela a été fait de cette façon en premier lieu.

Quoi qu'il en soit, j'ai eu beaucoup de mal à comprendre comment développer mes propres modèles commerciaux (c'est-à-dire le M de MVC), et j'ai décidé que ce n'était pas parce que je ne comprenais pas la POO en général, parce que je l'avais étudié pendant plusieurs mois et je ne pense pas que les concepts soient très difficiles à saisir. En fait, je trouve les exemples que j'ai étudiés très intuitifs. Le problème pour moi, je pense, réside dans le processus de traduction de mes propres problèmes en solutions orientées objet. Les exemples dans les livres (que j'ai lus jusqu'à présent) sont trop évidents, donc le processus de traduction du problème en objets n'est pas très difficile. Je pense que je pourrais manquer un processus abstrait de haut niveau. Une sorte de liste d'étapes ou de questions auxquelles chaque solution orientée objet doit répondre au plus haut niveau.

Si vous deviez décrire un tel processus en cinq étapes au maximum, quels seraient-ils et pourquoi? Quel est le processus le plus efficace pour traduire un problème en une solution orientée objet?


1
OOP n'est pas toujours tout ça ...
Job

Dans votre étude de la POO, avez-vous déjà lu quelque chose sur les modèles de conception ?
Zoredache

1
Je vous recommande de lire le livre d'Eric Evan sur la conception pilotée par domaine lorsque vous avez du mal à créer des modèles. Voir aussi la réponse de @Simon Stellings. Le livre couvre ce processus assez en détail.
Falcon

@Zoredache J'ai rencontré le concept de modèles de conception, ainsi que quelques exemples de certains, comme singleton, factory et MVC lui-même (qui, dans la mise en œuvre de Zend, est également contrôleur frontal). Cependant, c'était mon prochain mouvement, pour ainsi dire. J'ai pris le livre de Martin Fowler sur les modèles d'entreprise et je n'ai lu qu'une partie de l'introduction jusqu'à présent. Est-ce une introduction claire et facile à lire que vous recommanderiez?

@Falcon J'avais une question sur php / MySQL et le formatage de la date SO donc l'autre jour, et j'aurais choisi votre réponse mais ce n'était qu'un commentaire, pour ce que ça vaut.

Réponses:


10

Trouver un modèle adapté n'est pas toujours simple. C'est une de ces choses qui nécessite plus d'expérience que de simples connaissances. Cependant, la recette simple suivante pourrait vous aider à surmonter un blocage mental initial.

Il a été initialement décrit dans ce document par Abbott et est souvent appelé "l'analyse textuelle d'Abbott".

  1. Écrivez une spécification de texte brut.
  2. Identifier les classes: les noms sont de bons candidats.
  3. Trouvez les attributs: les adjectifs / adverbes sont de bons candidats.
  4. Trouvez les opérations: les verbes sont de bons candidats.
  5. Trouvez les associations entre les classes.
  6. Affiner.

Exemple:

Les noms , les verbes et adjectivessont marqués.

La bibliothèque contient des livres et des revues . Il peut contenir plusieurs exemplaires d'un livre donné . Certains livres sont short-term réservés aux prêts . Tous les autres livres peuvent être empruntés par n'importe quel membre de la bibliothèque pendant trois semaines. Les membres de la bibliothèque peuvent normalement emprunter jusqu'à six articles à la fois, mais les membres du personnel peuvent emprunter jusqu'à 12 articles à la fois. Seuls les membres du personnel peuvent emprunter des revues .

Une première itération d'analyse donnerait:

Des classes:

  • Bibliothèque
  • Livre, Journal
  • Copie
  • Prêt
  • Membre de la bibliothèque
  • Article
  • Membre du staff

À partir de là, vous pouvez penser à quelle classe a besoin de quels attributs et méthodes pour implémenter le comportement, puis affiner ce modèle de plus en plus.


1
Bonne réponse. En plus de l'article d'Abbott, je recommande le livre d'Eric Evan sur la conception pilotée par le domaine . Il enseigne comment créer un langage omniprésent pour le projet et comment en distiller un modèle puissant.
Falcon

Je suis attiré par cette réponse parce que j'ai étudié un peu la linguistique et que cela me semble intuitif sans trop d'effort, mais j'en ai peur pour les mêmes raisons parce que j'ai trouvé que trop d'analogie peut m'égarer .

@Falcon +1 pour avoir recommandé un livre avec la couverture de Kandinsky.

@ tbj1982: Vous avez absolument raison. Il s'agit d'une simple heuristique, et les résultats doivent être traités dans cet esprit. Ce n'est pas la balle d'or, mais cela peut être un bon début.
blubb

4

À mon avis, adopter l'approche TDD est naturel et efficace:

  1. Notez les exigences spécifiques (données, quand, alors)
  2. Traduisez chaque exigence (la plus importante en premier) en un test unitaire.
  3. Écrivez le moins de code pour réussir le test écrit en # 2.
  4. Après avoir réussi le test, refactorisez votre code selon les principes de conception SOLIDD.
  5. Après # 4, assurez-vous que votre code passe toujours tous les tests écrits.
  6. Répétez 2-5.

Avec ce processus, vous pouvez progressivement produire du code testable avec une conception sonore. Vous pourriez penser au début que le test d'écriture n'est pas nécessaire, mais cette activité vous aide à construire une architecture sonore.


3

Voici les étapes que j'utilise dans le code c ++:

  1. décider du nom de la classe
  2. décider des paramètres du constructeur et des membres de données.
  3. décider des noms de fonction des membres et des prototypes
  4. le rendre indépendant des autres classes
  5. La conception est terminée et tout le reste n'est que la mise en œuvre.

La raison de (1) est qu'elle définit la portée de quelle fonctionnalité appartient à la classe. La raison de (2) est qu'elle définit la façon dont la classe communique avec le monde extérieur. La raison de (3) est qu'elle définit comment choisir la fonctionnalité de la classe qui est nécessaire dans chaque situation. La raison de (4) est qu'elle permet d'utiliser la classe dans de nombreuses situations différentes. La raison de (5) est qu'elle définit la frontière entre la conception et la mise en œuvre.


+1 pour la dénomination. C'est incroyable à quel point le simple fait d'ajouter des noms peut organiser des processus de pensée, car vous apportez implicitement toutes les connaissances du "monde réel" avec.
Mark Brackett
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.