[JAVA] [Résumé] Pourquoi le rendre orienté objet

0. Introduction

L'un des nombreux chefs-d'œuvre des livres "Why Series", [** Why make it object-orienté **](https://www.amazon.co.jp/%E3%82%AA%E3%83%] 96% E3% 82% B8% E3% 82% A7% E3% 82% AF% E3% 83% 88% E6% 8C% 87% E5% 90% 91% E3% 81% A7% E3% 81% AA% E3% 81% 9C% E3% 81% A4% E3% 81% 8F% E3% 82% 8B% E3% 81% AE% E3% 81% 8B-% E7% AC% AC2% E7% 89% 88-% J'ai lu E5% B9% B3% E6% BE% A4-% E7% AB% A0 / dp / 4822284654 /), j'ai donc résumé les points qui m'ont été utiles et que j'aimerais utiliser pour l'éducation.

1. Pourquoi le rendre orienté objet?

La question qui est aussi le titre du livre.

Il y a plusieurs choses, mais si vous l'écrasez un peu, vous pouvez dire ** pour rendre le logiciel plus facile **.

2. Pourquoi dit-on que l'orientation des objets est difficile?

L'orientation des objets est difficile et est parfois considérée comme difficile à comprendre. Les raisons en sont les suivantes.

2-1. Déluge de conditions

"Héritage, superclasses, interfaces, attributs, remplacements ..." Il y a tellement de termes qu'il est difficile de se souvenir au début. Cependant, l'orientation de l'objet couvre une grande surface, on peut donc dire qu'elle ne peut pas être aidée. Cela semble être mauvais si vous ne vous en souvenez pas.

2-2. Abus de métaphore

"Les animaux sont en super classe, les chiens sont en sous-classe ..." "Envoyez un message à l'objet humain pour me dire votre âge ..." Je pense que vous voyez souvent de tels exemples. Cependant, la métaphore reste comme une impression forte et est mal interprétée par le mécanisme réel et les croyances de l'apprenant.

2-3. Syndrome de tout objet

"Humain, entreprise, ordinateur, distributeur automatique, bouteille en PET, événement ..." Tant qu'il existe dans ce monde, il peut être exprimé comme un objet. Une abstraction aussi extrême crée l'idée fausse que le monde réel peut être exprimé dans un programme tel qu'il est.

3. L'orientation de l'objet et le monde réel sont différents

L'orientation objet est parfois considérée comme «une représentation directe du monde réel dans le logiciel». Cette idée est déroutante en retour. ** Orienté objet et le monde réel sont similaires et différents **.

3-1. Les choses ne peuvent pas être faites à partir de la classe

3-2. Dans le monde réel, les messages seuls n'agissent pas

-** Dans le monde réel ** Lorsque vous recevez le message "Cry!", Vous pouvez entendre "Meow" ou "One", mais vous pouvez l'ignorer. Vous pouvez mordre. Dans le monde réel, c'est contre les ordres.

Le logiciel ne doit pas représenter le monde réel, mais couvrir une partie du travail humain. Il s'agit de laisser l'ordinateur faire le ** «se souvenir» et le «travail fixe» ** pour lequel l'ordinateur est bon.

4. Historique jusqu'à l'orientation de l'objet

La technologie de programmation a été conçue et améliorée à de nombreuses reprises et l'orientation objet est née. L'histoire de l'évolution de la technologie de programmation est la suivante.

4-1. Langage machine

L'ordinateur ne comprend que le ** langage machine **. Au début, les humains écrivaient des programmes en langage machine.

A10010
8B160210
01D0
A10410

4-2. Langage d'assemblage

** Le langage d'assemblage ** a été introduit pour rendre le langage machine un peu plus facile à comprendre. Dans le langage d'assemblage, le langage machine est remplacé par un symbole facile à comprendre pour les humains.

MOV AX, X
MOV DX, Y
ADD AX, DX
MOV Z,  AX

4-3. Langage de haut niveau

** Des langages de haut niveau ** sont apparus pour rendre l'expression encore plus conviviale. Avec l'avènement des langages de haut niveau, la productivité et la qualité de la programmation se sont considérablement améliorées. Cependant, avec la croissance explosive des ordinateurs, les besoins ne se sont pas réunis. Cela s'appelait la ** crise du logiciel **.

Z = X + Y

4-4. Programmation structurée

Pour répondre à la crise du logiciel, la ** programmation structurée ** a été introduite par ** Dyxtra ** aux Pays-Bas. L'idée de la programmation structurée est qu'il est important d'avoir une structure facile à comprendre afin de créer un programme qui fonctionne correctement. Pour faciliter la compréhension, les méthodes suivantes ont été spécifiquement mentionnées.

Bien que les langages de programmation structurés soient devenus monnaie courante pour les programmeurs, il existe encore deux problèmes que les langages de programmation structurés ne peuvent pas résoudre.

-** Variables globales ** Les variables locales disparaissent après l'appel du sous-programme. Les données qui doivent être conservées au sein de l'agence d'exécution du sous-programme doivent être gérées par des variables globales.

5. L'émergence de l'orientation objet

L'orientation objet est apparue pour résoudre le problème des variables globales et de la mauvaise réutilisation. Dans l'orientation objet, trois nouveaux mécanismes «classe», «polymorphisme» et «héritage» ont été ajoutés.

5-1. Classe

5-1-1. Résumer

C'est un mécanisme pour combiner des variables et des sous-programmes avec des liens forts en une seule classe. Ce mécanisme peut réduire le nombre de lignes dans un code source (partie). De plus, comme les classes sont regroupées, il est plus facile de nommer les sous-programmes.

<Avant orienté objet>
・ TextFileOpen()
・ TextFileClose()
・ TextFileRead()
・ JsonFileOpen()
・ JsonFileClose()
・ JsonFileRead()

<Dans le cas de l'orientation objet>
■ Classe de texte
・ FichierOpen()
・ FichierFermer()
・ FichierLire()
■ Classe Json
・ FichierOpen()
・ FichierFermer()
・ FichierLire()

5-1-2. Masquer

C'est un mécanisme pour cacher les variables et les sous-programmes définis dans une classe des autres classes (privé). En le cachant, il l'empêche d'être utilisé involontairement de l'extérieur.

5-1-3. Faites beaucoup

En définissant une classe, vous pouvez créer autant d'instances que vous le souhaitez. Puisque l'utilisateur appelle le sous-programme en spécifiant l'instance, il est possible de spécifier quelle instance doit être traitée.

5-2. Polymorphisme

Le polymorphisme signifie "se transformer en diverses formes". Le sous-programme est un mécanisme pour normaliser la logique du côté appelé, tandis que le polymorphisme est un mécanisme pour normaliser le côté appelant. Plus précisément, jetons un œil à l'exemple suivant. Avec le mécanisme de polymorphisme, vous pouvez utiliser GetNameCount () et Special Attack () pour Human et Monster. De plus, si de nouvelles créatures sont ajoutées, ces méthodes n'ont pas du tout besoin d'être modifiées.

Untitled-1.png

hoge.cs


//Compter les noms
public int GetNameCount(Creature creature)
{
    return creature.GetName().Length;
}

//Tout le monde attaque spéciale!
public void AllSpecialAttack(IEnumerable<Creature> creatures)
{
    foreach (var creature in creatures)
    {
        creature.SpecialAttack();
    }
}

5-3. Héritage

C'est un mécanisme pour créer une autre classe en collectant les points communs des classes de personnes similaires (bien que cela ait été aperçu dans l'exemple du polymorphisme). En d'autres termes, vous pouvez éliminer la duplication de code.

6. Orientation des objets plus avancée

Des programmes tels que Java et C # ont fourni des fonctionnalités encore plus avancées. Des exemples typiques sont les "packages", les "exceptions" et les "garbage collections".

6-1. Paquet

C'est un mécanisme pour organiser les classes, comme un dossier. Il est également possible de créer une structure hiérarchique en imbriquant des packages.

6-2. Exception

C'est un mécanisme qui renvoie une erreur spéciale de la méthode sous une forme différente de la valeur de retour. Les exceptions sont souvent utilisées pour les «échecs de réseau», «échecs d'accès au disque», «blocage de la base de données», etc. Dans le passé, la méthode d'utilisation d'un code d'erreur était courante, mais il y avait les problèmes suivants.

--Il est nécessaire que l'application effectue un traitement de détermination de code d'erreur. Si vous oubliez d'écrire le processus de jugement, il sera difficile d'identifier la cause lorsqu'un bug survient.

Dans le cas d'une exception, si vous oubliez d'écrire le post-traitement (catch) de l'exception, une erreur d'exécution se produira. De plus, pour les méthodes qui ne nécessitent pas de post-traitement, il vous suffit de déclarer qu'une exception se produira. Le mécanisme d'exception a deux effets: éliminer les déchets et éviter les erreurs.

6-3. Collecte des ordures

C'est un mécanisme qui supprime automatiquement les instances inutiles et libère de la mémoire. Il est inclus dans Java et C #. Si vous ne disposez pas d'un garbage collection, vous devez libérer explicitement la mémoire. Si vous supprimez accidentellement l'instance requise, cela conduira à un bogue, et si vous oubliez de la supprimer, cela entraînera une fuite de mémoire. Le Garbage Collection peut vous aider dans ce domaine.

7. Réutilisation orientée objet

L'orientation objet a engendré deux technologies de réutilisation. C'est la «réutilisation des logiciels» et la «réutilisation des idées».

7-1. Réutilisation du logiciel

7-1-1. Bibliothèque

C'est une collection de classes avec des fonctions générales. Dans les langages de programmation traditionnels, la seule partie réutilisable était un sous-programme, mais l'orientation objet vous permet de:

--Créez une instance à partir d'une classe dans la bibliothèque et utilisez des méthodes et des variables. ···classe --Remplacez la logique appelée depuis la bibliothèque par un traitement spécifique à l'application. ・ ・ ・ Polymorphisme --Créez une nouvelle classe à partir de la classe de bibliothèque et ajoutez des méthodes et des variables. ・ ・ ・ Héritage

7-1-2. Cadre

Ce sera une image d'un produit semi-fini de l'application. Il est utilisé pour appeler une application depuis le framework, par opposition à une bibliothèque. Le flux de base est fourni par le framework et l'application incorpore son propre traitement.

7-2. Réutilisation des idées

7-2-1. Modèle de conception

C'est une collection de bonnes idées de design. Créé par ** Eric (Erich) Gamma **, ** Richard Helm **, ** Ralph Johnson **, ** John Brisidis **. Ils s'appelaient ** GoF ** et les 23 modèles de conception qu'ils ont élaborés s'appelaient ** Modèles de conception GoF **. Voir ci-dessous pour plus d'informations sur les modèles de conception du GoF.

  1. UML UML signifie Unified Modeling Language et est traduit par «Unified Modeling Language». Créé par ** Grady Booth **, ** James Rambo **, ** Iver Jacobson **. Ces trois personnes sont familièrement appelées ** Trois Amigo **. UML est utilisé comme suit.

8-1. Comment utiliser UML

8-1-1. Représentation de l'orientation de l'objet

UML est utilisé pour représenter des structures et des comportements de programme orientés objet. Il convient au cerveau humain car il capture visuellement une figure en deux dimensions. En bref, UML est un ** outil de visualisation de logiciels immatériels **. Les diagrammes typiques incluent le ** diagramme de classes **, le ** diagramme de séquence ** et le ** diagramme de communication **. * L'explication détaillée de chaque figure est omise ici. Dans le développement de logiciels, il est utilisé dans la conception.

8-1-2. Représentation non orientée objet

Les informations qui ne peuvent pas être exprimées de manière orientée objet sont également exprimées en UML. Les diagrammes typiques incluent ** diagrammes de cas d'utilisation **, ** diagrammes d'activité ** et ** diagrammes de machine d'état **. * L'explication détaillée de chaque figure est omise ici. En développement logiciel, il est utilisé pour l'analyse commerciale (organisation du travail dans le monde réel) et la définition des exigences (détermination de la gamme de travail à confier à l'ordinateur).

8-2. UML facilite la communication

Le langage naturel est utilisé pour la communication entre les humains et le langage informatique est utilisé pour les humains pour donner des commandes aux ordinateurs. Puisque les langages naturels et les langages informatiques sont exprimés à l'aide de lettres, les expressions sont compliquées et la quantité est énorme. D'autre part, UML est exprimé à l'aide de diagrammes, de sorte qu'il peut être compris de manière intuitive. UML est également un langage qui compense les lacunes des langages naturels et informatiques. Par conséquent, n'essayez pas de tout exprimer en UML, n'hésitez pas à l'utiliser comme un moyen de communication!

9. Conseils de conception orientée objet

Les points clés pour créer un logiciel facile à entretenir et à réutiliser sont les suivants.

9-1. Éliminer les doubles emplois

Plus il y a de doublons, plus il est difficile de comprendre, de modifier et de tester le programme. Les doublons ont tendance à entraîner davantage de copier-coller. En d'autres termes, soyez prudent si vous avez beaucoup de copies. Des précautions doivent être prises pour éviter les doubles emplois pendant la phase de conception.

9-2. Augmenter l'indépendance des pièces

L'astuce pour rendre les choses complexes plus faciles à comprendre est de «diviser». Un degré élevé d'indépendance rend la fonction de la pièce plus claire et plus facile à comprendre. L'idée d'augmenter l'indépendance est la suivante.

Voici quelques conseils pour accroître votre indépendance.

9-3. Ne pas diffuser les dépendances

Les dépendances se produisent lorsqu'une partie en utilise une autre. Aucun des exemples ci-dessous ne peut être compilé indépendamment. De plus, si vous modifiez l'un d'entre eux, vous devez vérifier tous les autres composants. 1.png

Dans l'exemple ci-dessous, le «composant C» peut être utilisé seul. De plus, si vous utilisez "Composant A", vous n'avez pas besoin de vérifier les autres composants. 2.png

10. Conclusion

Je suis le genre de personne qui a appris l'orientation objet à travers le projet, donc ce livre m'a aidé à organiser les bases. Dans le livre, la mémoire et le processus de développement sont également décrits d'une manière facile à comprendre, mais je voulais en faire un article séparé, alors je l'ai omis ici. Si vous êtes intéressé par l'orientation des objets, veuillez consulter les livres.

J'espère également que vous pourrez également lire les articles suivants dans la même série de raisons.

Recommended Posts

[Résumé] Pourquoi le rendre orienté objet
[Critique de livre] Pourquoi le rendre orienté objet, 2e édition
Résumé orienté objet
Résumé orienté objet par les débutants (Java)
[Java] Rendez-le constant
Divisez par Ruby! Pourquoi est-ce 0?
Priority Queue max En faire une file d'attente
Résumé de la programmation orientée objet utilisant Java