[JAVA] Un oncle orienté objet avec 25 ans d'histoire orientée objet parle d'une prescription pour la conception orientée objet

Cible de cet article

Cet article est destiné aux personnes suivantes:

Les personnes suivantes ne sont pas éligibles.

Penser les objets sur une base de responsabilité

En parlant d'objet, il y a beaucoup de termes tels qu'interface, message, dissimulation et encapsulation, et aucun d'entre eux ne semble être lié, donc je ne comprends pas le sens. Je ne dis pas que je faisais semblant.

Si vous avez une expérience de travail au Japon, vous pouvez comprendre ce genre de chose en un mot. C'est une responsabilité.

Lorsque vous travaillez, vous définissez le responsable ou le responsable au travail. Ces personnes responsables ont un périmètre de responsabilité fixe. Nous assumerons l'entière responsabilité de ce qui nous est confié. Et n'entrez pas dans la zone de travail dont d'autres personnes sont responsables. "Je ne peux pas gérer cela, mais Suzuki est en charge, alors laissez-moi vous présenter cela", a-t-il déclaré.

Chaque objet a une portée de responsabilité. Si vous pensez qu'une classe n'est pas magnifiquement conçue, il est fondamental de déterminer si les responsabilités de la classe sont appropriées. La classe devrait-elle vraiment faire le travail? N'était-il pas censé être responsable d'une autre classe? Ou devrais-je être affecté à une nouvelle classe séparément? Cela fonctionne bien si vous le considérez comme anthropomorphique en appliquant la classe à l'occupation et l'objet à l'individu. Ce serait dangereux si l'objet commençait à dire "Je ne peux pas gérer cette question ..." dans ma tête.

Tout comme les humains deviennent incontrôlables lorsqu'ils en font trop, les objets deviennent incontrôlables lorsqu'ils prennent trop de responsabilités.

Ne faites pas de travail qui dépasse la responsabilité

Si un homme qui est membre du personnel de vente commence à nettoyer simplement parce que le hall est sale, cela peut retarder le temps de sortir et le sac à dos peut devenir sale et gêner le travail. Si les affaires générales ont déjà arrangé un nettoyeur dans l'après-midi, le travail sera gaspillé.

Même si vous pensez pouvoir faire ce genre de ménage vous-même, n'osez pas le faire, mais contactez les affaires générales et demandez-leur de mettre en place un personnel de nettoyage. Les affaires générales connaîtront l'état de l'arrangement des nettoyeurs, donc ils feront bien pour éviter le travail en double inutile.

Il s'agit d'une erreur causée par un objet masculin de classe de vente accédant à une variable globale appelée lobby.

Quelle est la responsabilité

Pour récapituler ce que je veux dire jusqu'à présent, quand on pense au design orienté objet, si vous anthropomorphosez un objet et le laissez parler de responsabilité, vous en serez assez accro.

Si le nombre de fonctions membres et de variables membres augmente, il est fort possible que la classe soit trop responsable. En revanche, s'il y en a trop peu, cela peut être un objet inutile qui saute le travail. Gardez-le à une taille de grain raisonnable.

Concevoir des relations entre les objets

D'accord, si vous gardez correctement l'étendue de la responsabilité de l'objet, cela fonctionnera. Je sens que je peux bien m'en sortir ... Pendant un certain temps, à mesure que le programme s'agrandit, il devient encore compliqué. Pourquoi est-ce la limite de l'orientation des objets ...

Non, garder l'étendue de responsabilité d'un objet au bon niveau de granularité n'est que la base de l'orientation de l'objet. À partir de là, la «relation» devient importante. Une association est une connexion entre des objets. Parlant d'entreprise, c'est un organigramme ou un point de contact.

Design pattern

Comment penser la relation en termes d'orientation objet? Vous pouvez faire référence au modèle de conception comme l'une des méthodes. Un modèle de conception est un catalogue de conceptions logicielles créées de manière orientée objet. Si vous google, diverses choses sortiront, donc je vais omettre les détails.

Ce modèle de conception, GoF, est célèbre, mais pour être clair, il n'est pas si proprement systématisé. Certaines personnes l'utilisent souvent, d'autres ne l'utilisent pas comme ça. En plus du GoF, divers modèles sont naturellement imaginables, mais il n'y a pas de tendance à rechercher et à systématiser l'ensemble de l'industrie.

Pourtant, un rapide coup d'œil à GoF vous donnera une idée de ce qu'est un beau design orienté objet.

UML

Une autre façon est d'illustrer. Il n'est pas nécessaire que ce soit UML, mais il est standardisé, alors utilisons UML. Il existe différents diagrammes, mais les diagrammes de classes sont importants dans la conception orientée objet.

En gros, un beau design rendra le diagramme de classe beau, et un design sale rendra le diagramme de classe sale. Si les lignes associées sont gâchées, corrigez-les simplement et le design sera semi-automatiquement magnifique. De plus, la création d'un diagramme facilite la réception des avis (conseils d'autres personnes).

Le dessin UML a un outil dédié, mais je suis Visio ou manuscrit. Si vous essayez d'écrire la conception détaillée du logiciel dans Visio, vous mourrez, mais il est faux d'utiliser UML en premier lieu. Lorsque vous dessinez un diagramme, vous devez vous concentrer sur les points que vous souhaitez prendre en compte. Pas tout le logiciel, mais seulement la bibliothèque ou des fonctions spécifiques. Seulement dans les endroits où c'est devenu difficile à faire. Il est insensé de tracer une ligne liée à la classe de chaînes de toutes les classes.

Dessiner un diagramme en mettant l'accent sur les points facilite la réflexion sur la conception, facilite la révision et facilite la lecture du document. En dessinant un diagramme qui dépasse A4 avec Visio, on ne peut pas dire que vous avez une bonne idée de la taille du grain.

Héritage ou polymorphisme

Si vous ne comprenez pas l'héritage et le polymorphisme, vous ne pouvez pas dire que vous comprenez l'orientation des objets. Mais l'héritage et le polymorphisme ne sont qu'un type de relation entre les objets. Si vous lisez cet article, vous êtes une bonne personne et vous le comprendrez si vous jouez avec un langage orienté objet adapté depuis un certain temps. Par conséquent, l'explication est omise.

Qu'est-ce qu'une relation

Compte tenu des relations entre chaque objet en fonction des bases de l'étendue de la responsabilité des objets, il s'avère que la conception orientée objet n'est rien de plus que la conception des relations entre chaque objet. Cela devrait venir.

Laisser la discrétion au-delà de la responsabilité de l'objet

Eh bien, si vous gardez la portée de la responsabilité des objets compacte et réfléchissez soigneusement aux relations entre chaque objet en utilisant des modèles de conception et UML, vous pouvez créer un beau programme.

Cependant, lorsque le programme devient enfin énorme, il est difficile de le faire. L'erreur la plus courante est de relayer le jeu de messages.

Jeu de message

"Je souhaite acheter les pièces de votre entreprise. Pourriez-vous me donner une estimation?" "Veuillez patienter un moment." "La société A veut acheter ces pièces." "Si vous n'achetez pas en gros de la société B, elle se vendra. Renseignez-vous auprès de l'entreprise B pour voir si ce n'est pas là. "" J'aimerais acheter les pièces de votre entreprise. Pouvez-vous me donner une estimation? "

C'est toujours permis s'il n'y a que quelques personnages dans un tel jeu de messages, mais attention si la hiérarchie devient plus profonde avec 4 ou 5 personnes. Surtout, il est dangereux de l'appeler deux ou trois fois juste pour obtenir les données.

babillard

Mettez une base de données pour résoudre ce problème. Une base de données est comme un babillard électronique. Si le prix était affiché sur la page Web de la société B, il n'était pas nécessaire de contacter la société A.

La base de données est ici utilisée au sens large comme une simple zone de stockage de données commune. Il peut s'agir d'une véritable base de données relationnelle, d'une base de données en mémoire, d'un fichier ou d'une paire clé-valeur de stockage mémoire accessible globalement.

Si la base de données est hors de la mémoire du processus, il est également possible de fractionner le processus. S'il est possible de diviser l'ensemble de l'application en processus plus petits, la granularité de chaque processus peut être réduite.

Contre-attaque des variables globales

Cette base de données est la variable globale elle-même. Même si l'étendue de la responsabilité se distingue par l'orientation objet, que devons-nous faire de toutes les responsabilités?

La base de données étant une variable globale, il est toujours souhaitable de ne pas l'introduire. Les petits programmes doivent être gérables autant que possible dans la plage orientée objet. Si votre programme devient énorme et que vous commencez à sentir que le jeu de messages est terminé, envisagez de déployer une base de données pour la première fois.

Y a-t-il une solution miracle après tout?

Les variables globales ont souvent des conséquences désastreuses. Il se décompose facilement si la quantité de code augmente même un peu. Avec l'introduction de l'orientation objet, vous pouvez supporter une quantité importante de code. Mais si le programme devient trop gros, cela peut provoquer une tempête de jeux de messages et une autre ruine.

Les bases de données gérées par des programmeurs moins qualifiés peuvent être désastreuses. Cependant, si les héros qui maîtrisent l'orientation objet se rassemblent dans une certaine mesure et accèdent à la base de données dans le cadre de la responsabilité de chaque classe, il sera possible d'atteindre à la fois l'orientation objet et la base de données à un niveau élevé. La seule façon d'équilibrer cela est de travailler dur avec des aspirations élevées.

Recommended Posts

Un oncle orienté objet avec 25 ans d'histoire orientée objet parle d'une prescription pour la conception orientée objet
À propos de l'utilité des monades dans une perspective orientée objet